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

Mar*_*ied 14 network-manager dns resolv.conf 12.04

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

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

nameserver 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*dge 17

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

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

nmcli dev list iface eth0
Run Code Online (Sandbox Code Playgroud)

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

GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           802-3-ethernet
...
IP4.DNS[1]:                             192.168.0.1
...
Run Code Online (Sandbox Code Playgroud)

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

如果您需要一种不依赖于 输出的编程方法来访问此数据,则nmcli此信息也应可从网络管理器的 D-Bus 界面获得。

  • `nmcli dev list iface` 对我不起作用,但 `nmcli dev show` 对我有用 [ubuntu 15.04] (4认同)

cmc*_*nty 10

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

这是一个快速命令列表,可让您继续前进。

  1. 显示当前的 DNS 服务器

    nm-tool | grep DNS
    
    Run Code Online (Sandbox Code Playgroud)
  2. /etc/dhcp/dhclient.conf. 添加以下行,并重新启动本地解析器:

    supersede domain-search "sub.mydomain.com", "domain.com";
    prepend domain-name-servers 192.168.0.1;
    
    Run Code Online (Sandbox Code Playgroud)

    从命令提示符:

    invoke-rc.d network-manager restart
    
    Run Code Online (Sandbox Code Playgroud)