Linux NetworkManager 未写入 resolv.conf 或运行 dhclient

Linux NetworkManager 未写入 resolv.conf 或运行 dhclient

我在运行 xfce 的基于 ubuntu 的 Linux 发行版 (linaro) 上。我的网络管理器连接到无线接入点,但无法执行以下两项操作:

  • 动态获取名称服务器,并编写动态/etc/resolv.conf。事实上,如果我可以让它在某些特定网络上执行此操作,并/etc/resolv.conf在其他网络上使用标准,那就太好了。
  • 我的浏览器无法重定向到登录页面。显然,这与名称服务器问题有关。

我检查了一下/etc/dhcp/dhclient.conf,发现有一行, request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.name-servers, dhcp6.sntp-servers; 所以如果我运行 sudo dhclient <network inteface> 它,它会毫无问题地重写/etc/resolv.conf文件。因此,如果我使用 wpa-supplicant 和 dhclient“手动连接”,这就可以完美地工作。所以我猜这是网络管理器的问题。网络管理器不使用 dhclient 吗?我该如何解决这个问题?

答案1

在我的系统(ubuntu 14.04)上,/etc/resolv.conf 由包“resolvconf”创建(它安装了吗?)并且只是文件 ../run/resolvconf/resolv.conf 的符号链接。

/etc/resolv.conf 中的 IP 地址是虚拟内部 IP。要获取名称服务器的真实地址,您可以使用“nm-tool”或“nmcli device list iface eth0”。

您在网络管理器中的 IPv4 下选择了哪种方法,“自动 (DHCP)”或“仅自动 (DHCP) 地址”。我认为您必须使用第一种方法。

你的 linaro 系统是什么版本,它基于哪个版本的 ubuntu?

答案2

事实证明,较新版本的 NetworkManager 使用名为 dnsmasq 的程序作为 DNS 解析器。因此,即使您 /etc/resolv.conf 从系统中删除该文件,NetworkManager 仍将正常工作。事实上,dnsmasq 有一个明确的选项,即不读取resolv.conf。这是我的 NetworkManager 通常使用的文件运行它: dnsmasq --no-resolv 它还有一个 /var/run/nm-dns-dnsmasq.conf 文件。这是使用中的文件配置的 /etc/NetworkManager/dnsmasq.d/ 。查看 dnsmasq 文档以了解有关其配置的更多信息。它似乎是一个相当强大的工具。

dns=dnsmasq 可以通过删除文件中的 行来禁用 dnsmasq /etc/NetworkManager/NetworkManager.conf 。然后——尽管我还没有测试过——根据我在 NetworkManager 文档中读到的内容,它应该默认为 dhclient。

另一个可能的问题是 /etc/NetworkManager/NetworkManager.conf 中有一行说 [ifupdown] managed=false 我将其更改为 true,然后 NetworkManager 又开始正常工作了。较新的 NetworkManager 版本(在 precise 及更高版本上)在 waiting for network configuration 启动过程中也往往会在开始时暂停 60 秒或更长时间并显示一条消息。这通常是由文件中的语法错误引起的/etc/network/interfaces。我通过在文件中只添加以下几行来解决这个问题 auto lo iface lo inet loopback

相关内容