DNS 服务器地址不再存储在 resolv.conf 中;它现在在哪里?

DNS 服务器地址不再存储在 resolv.conf 中;它现在在哪里?

我有时会使用任务栏中的 NetworkManager 指示器切换 DNS 服务器;这在以前的版本中运行良好,实际上在 12.04 中也运行良好,除了一件事:我使用 Conky 显示一些系统信息,包括 DNS 地址,我注意到它现在总是显示127.0.0.1

我查看了resolv.conf,这是它获取此地址的地方,果然,它总是这样说。它只有一行,警告不要手动编辑文件:

nameserver 127.0.0.1

我现在知道检查 DNS 服务器地址的唯一方法是打开网络管理器 GUI 检查信息页面。那么,这些信息现在存储在哪里?

答案1

这些信息由网络管理器内部管理。您可以使用附带的nmcli工具在命令行上获取此信息。

您可以使用以下命令检索特定网络接口的网络管理器信息:

nmcli dev list iface eth0

(替换eth0为您要连接的接口)。输出将包括有关接口以及该接口上当前活动连接的信息:

GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           802-3-ethernet
...
IP4.DNS[1]:                             192.168.0.1
...

从这个输出中提取您想要的信息应该不太困难。

如果您需要一种不依赖于输出的编程方法来访问这些数据nmcli,那么这些信息也应该可以从网络管理器的 D-Bus 接口获得。

答案2

Ubuntu 开发人员应该在 中记录这些变化/etc/resolv.conf,但是他们却没有。

以下是一些可帮助您入门的快捷命令列表。

  1. 显示当前的 DNS 服务器

    nm-tool | grep DNS
    
  2. 在 中定义静态 DNS 服务器/etc/dhcp/dhclient.conf。添加以下行,然后重新启动本地解析器:

    supersede domain-search "sub.mydomain.com", "domain.com";
    prepend domain-name-servers 192.168.0.1;
    

    从命令提示符中:

    invoke-rc.d network-manager restart
    

答案3

请注意,使用 nmcli 可能并不总能为您提供完整的答案。例如,如果您使用 openconnect(或 vpnc,大概)启动 VPN,并且安装了 resolvconf 包(用于自动管理 /etc/resolv.conf),您会发现它仍然可以自动将 VPN 的 DNS 设置插入到 /etc/resolv.conf 中的 127.0.0.1 之前。在这种情况下,仅检查(例如)“nmcli -f IP4 dev list”不会为您提供真正的当前 DNS 列表。不确定这种情况是否会影响您,但认为值得一提。

相关内容