问题描述
有没有一个命令列出我的系统使用的DNS服务器?
我试过了
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
但它没有列出任何服务器,如果我去“网络管理器GUI工具”,在无线部分列出“DNS 192.168.1.1 8.8.8.8 8.8.4.4”
我能从命令行获得相同的信息吗?
我正在使用Ubuntu 12.04 LTS
最佳解决方案
resolv.conf实际上不再使用,除非你自己实现它。网络管理员现在就做。我创建了一个别名来列出我系统上的DNS服务器,因为我有时会从OpenDNS切换到Google的开放式DNS。
Ubuntu> = 15
nmcli device show <interfacename> | grep IP4.DNS
Ubuntu< = 14
nmcli dev list iface <interfacename> | grep IP4
在我的情况下,<interfacename>
是eth0
,这很常见,但并非总是如此。
看看这是你想要的。
编辑:
我认为resolv.conf实际上是间接使用的,因为网络管理器创建了在127.0.0.1上侦听的服务器,但我被告知这是一个不应该被忽视的实现细节。我认为如果你在这个入口之前输入DNS地址,他们可能会被使用,但我不确定这是如何工作的。如果可能,我认为在大多数情况下最好使用网络管理器。
次佳解决方案
这对Ubuntu 13.10及更早版本有效。对于Ubuntu 14.04及更高版本,请参阅Koala Yeung’s answer to: How to know what DNS am I using in Ubuntu from 14.04 onwards
使用
nm-tool
你会得到一个类似于的输出
NetworkManager Tool
State: connected (global)
- Device: eth0 [Wired connection 1] -------------------------------------------
Type: Wired
Driver: e1000e
State: connected
Default: yes
HW Address: 00:11:22:33:44:55
Capabilities:
Carrier Detect: yes
Speed: 1000 Mb/s
Wired Properties
Carrier: on
IPv4 Settings:
Address: 10.21.6.13
Prefix: 24 (255.255.255.0)
Gateway: 10.21.6.1
DNS: 10.22.5.133
DNS: 10.22.5.3
或者只看DNS就行
nm-tool | grep DNS
第三种解决方案
cat /etc/resolv.conf
应显示您的DNS服务器。
您不能直接用Ubuntu 12.04修改resolv.conf
。如果您需要更改它们,则可以通过添加以下内容在/etc/network/interfaces
文件中添加新的DNS服务器:
dns-nameservers x.x.x.x x.x.x.x
x
是您希望使用的DNS服务器。
如果我是你,我会卸载network-manager
。在我看来,这是一堆废话。
您可以完成手动执行的所有操作,而无需担心更改设置,尤其是在计算机上有多个NIC的情况下。
第四种方案
两个top-scoring答案,nmcli dev list iface <interfacename> | grep IP4
和nm-tool
都假定network-manager在控制范围内。它至少在大部分时间都是台式机。但更完整的答案是,有时network-manager不受控制。例如。 vpnc
直接与/etc/resolv.conf
混淆。
所以:首先检查是否使用127.0.0.1/localhost。这可以通过dig
完成:
> dig something.unknown | grep SERVER:
;; SERVER: 127.0.0.1#53(127.0.0.1)
现在你知道我们正在使用本地主机。继续提供一个受欢迎的答案。我喜欢:
> nm-tool | grep DNS:
DNS: 8.8.8.8
但是如果不使用127.0.0.1/localhost,那么nm-tool
和nmcli
的输出将会引起误解:
> dig something.unknown | grep SERVER:
;; SERVER: 172.22.216.251#53(172.22.216.251)
> nm-tool | grep DNS:
DNS: 8.8.8.8
在这里,dig
是正确的,nm-tool
的信息是误导性的。实际上,我已将VPN-ed转换为环境的本地地址已正确解析。所有Google的DNS 8.8.8.8
都不知道。
这是因为在使用vpnc
连接到VPN后,它会在/etc/resolv.conf
中放置一行,使其看起来像:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 1.2.3.4
nameserver 127.0.0.1
search MyDomain
第五种方案
nmcli 0.9.10版
您可以使用以下任一命令:
nmcli -t -f IP4.DNS device show eth0
IP4.DNS[1]:192.168.1.1
IP4.DNS[2]:8.8.8.8
nmcli -t -f IP4.DNS connection show conn-name
IP4.DNS[1]:192.168.1.1
IP4.DNS[2]:8.8.8.8
第六种方案
在Ubuntu 15.10中,你可以获得DNS
nmcli device show <interface name>