无线漫游搞乱了 resolv.conf

无线漫游搞乱了 resolv.conf

这是我的无线网络interfaces

#auto wlp1s0
allow-hotplug wlp1s0
iface wlp1s0 inet manual
        wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#        up /usr/sbin/wondershaper -a wlan0 -d 9500 -u 15000
#        down /usr/sbin/wondershaper -a wlan0 -c

allow-hotplug RWB
iface RWB inet dhcp

其中RWBAP 定义在/etc/wpa_supplicant/wpa_supplicant.conf

每当我连接到该 AP 时dhclient(我认为)都会更新该文件/etc/resolv.conf。这意味着当我离开RWB并连接到其他设备(包括有线以太网)时,DNS 会失败,因为 IP 地址resolv.conf不再可路由。

天真的修复是阻止dhcp客户端更新resolv.conf,但肯定有一个针对这种情况的常规配置可以解决这个问题 - 什么?

答案1

尚无法发表评论,因此将此作为答案。此 YouTube 演示了使用 resolv.conf 在 Ubuntu/Debian 上设置永久 DNS 名称服务器

https://www.youtube.com/watch?v=NEyXDdBrw2c

就像 @Hack Saw 评论的 systemd 可能会管理resolve.conf,这可能会导致永久更改resolve.conf中的dns名称服务器的问题

答案2

man页面dhclient-

BUGS
       If more than one interface is being used, there's no obvious way to avoid
clashes between server-supplied configuration parameters - for example, the stock
dhclient-script rewrites /etc/resolv.conf ...

dhclient当 DHCP 事件发生时,使用 shell 脚本来配置系统。为了防止dhclient覆盖resolv.conf,您需要修改此脚本的默认行为。但首先,您需要安装并运行类似的东西,systemd-resolved可以管理多个网络接口的 DNS 信息。

以下是如何修改以使用而不是覆盖dhclient来更新 DNS 信息的示例-systemd-resolved/etc/resolv.conf

/etc/dhcp/dhclient-enter-hooks.d/dns-update

#!/bin/sh

make_resolv_conf(){
    # DHCPv4
    if [ -x /usr/bin/systemd-resolve ]; then
        if [ -n "$new_domain_name" ]; then
            systemd-resolve --interface="$interface" --set-domain="${new_domain_name%% *}"
        fi
        if [ -n "$new_domain_name_servers" ]; then
            for nameserver in $new_domain_name_servers; do
                systemd-resolve --interface="$interface" --set-dns="$nameserver"
            done
        fi
    fi
}

dhclient在应用从 DHCP 接收到的系统配置并覆盖 stock之前调用此脚本make_resolv_conf()

根据您的操作系统,可能没有/etc/dhcp/dhclient-enter-hooks.d目录。在这种情况下,您可以将该脚本放置在名为/etc/dhclient-enter-hooks.

相关内容