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

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

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

 nameserver 127.0.0.1 

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

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

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

 nmcli dev list iface eth0 

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

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

从此输出中提取您所需的信息应该不会太困难。

如果您需要一种不依赖于nmcli输出的编程方法来访问此数据,则还应从Network Manager的D-Bus接口获取此信息。

Ubuntu开发人员应该在/etc/resolv.conf记录这些更改,但是没有。

这是一个快速命令列表,可以帮助您前进。

  1. 显示当前的DNS服务器

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

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

    从命令提示符:

     invoke-rc.d network-manager restart 

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