从14.04开始,如何知道我在Ubuntu中使用的DNS

(跟进12.04的类似问题 。)

在Ubuntu 12.04之前,您可能会在/etc/resolv.conf看到活动的DNS。 在Ubuntu 12.04中,NetworkManager不再使用该文件。 您必须直接咨询命令行工具nm-tool

有趣的是,默认情况下,14.04及更高版本不再安装nm-tool 。 虽然您仍然可以通过apt-get install ,但您不能假设所有Ubuntu都具有开箱即用的function。

所以问题仍然存在。 默认情况下,您如何通过命令行知道您正在使用的DNS?

快速回答

现在默认安装新的NetworkManager工具nmcli 。 命令行工具非常强大,但有点难学。 坚持我们的问题,简短的回答是:

 nmcli dev show | grep DNS 

或者,要有更清洁的输出

 nmcli dev show | grep DNS | sed 's/\s\s*/\t/g' | cut -f 2 

说明

如果你有时间,我可以解释上面的大笨蛋:

  1. nmcli dev show

    有点像旧的nm-tool命令。 它详细说明了当前的网络信息。

    您还可以通过添加接口名称来学习某个接口的设置。 例如,要了解eth0的信息,您可以使用nmcli dev show eth0

  2. grep DNS

    显然只grep其中包含文本“DNS”的行。

  3. sed 's/\s\s*/\t/g' | cut -f 2

    这只是为了清理输出。 cut可以按列选择输出,但它只需要1个字符作为分隔符(而nmcli使用MANY SPACE)。 sed将原始输出中的空格转换为TAB。

无论您使用NetworkManager还是其他网络连接工具,数据包分析都是一种可行的替代方法。 基本思想是使用nslookup发送dns查询,并在第二个终端中检查数据包的去向。

为此,我们需要首次连接到网络,这样就不会使连接混乱,并运行以下命令:

 sudo tcpdump -vv -i wlan0 -W 1200 | grep google.com 

在另类终端运行中:

 nslookup google.com 

tcpdump获取数据包列表后,请检查它们从您的IP地址到哪里。

例如,

 $ sudo tcpdump -vv -i wlan0 -W 1200 | grep google.com tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes eagle.29862 > b.resolvers.Level3.net.domain: [udp sum ok] 64057+ [1au] A? google.com. ar: . OPT UDPsize=4096 (39) b.resolvers.Level3.net.domain > eagle.29862: [udp sum ok] 64057 q: A? google.com. 11/0/0 google.com. A 173.194.115.64, google.com. A 173.194.115.65, google.com. A 173.194.115.72, google.com. A 173.194.115.66, google.com. A 173.194.115.69, google.com. A 173.194.115.78, google.com. A 173.194.115.70, google.com. A 173.194.115.71, google.com. A 173.194.115.68, google.com. A 173.194.115.67, google.com. A 173.194.115.73 (204) eagle.16429 > b.resolvers.Level3.net.domain: [udp sum ok] 38822+ A? google.com. (28) 

如你所见,我的笔记本电脑eagle将数据包发送到我大学的dns, b.resolvers.Level3.net.domain 。 如果要查看IP地址,可以在tcpdump使用-n标志。

例如:

 $ sudo tcpdump -n -vv -i wlan0 -W 1200 | grep google.com tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes 10.10.87.145.56474 > 4.2.2.2.53: [udp sum ok] 15606+ A? google.com. (28) 

检查您的网络连接:

 ls /etc/NetworkManager/system-connections/ 

并选择要配置的连接。

  sudo cat /etc/NetworkManager/system-connections/Internet | grep dns 

没有您的连接名称替换“Internet”


使用仍然可以使用nm-tool

 nm-tool | grep DNS 

使用安装它为U14.04及更高版本

 sudo apt-get install nm-tool 

例:

 nm-tool | grep DNS DNS: 192.168.1.1 DNS: 192.168.10.1 DNS: 192.168.11.1 

默认情况下,它仍然可以在版本14.04上使用,因为它与网络管理器捆绑在一起。 它已从网络管理器(版本15.04及更高版本)中删除,甚至不能通过apt-get获得。

目前,在15.04版本上,您可以手动从旧包中下载并提取nm-tool。 运行以下命令。

首先,创建一个临时目录来工作:

 cd mkdir APTGET;cd APTGET 

然后,下载旧版本并解压缩文件:

 wget 'http://us.archive.ubuntu.com/ubuntu/pool/main/n/network-manager/network-manager_0.9.8.8-0ubuntu7.1_amd64.deb' ar xvf * tar xvf dat* 

创建一个新目录:

 mkdir ~/bin 

(如果它说file already exists ,只需忽略该消息并继续)。

将文件复制到新目录:

 cp ./usr/bin/nm-tool ~/bin 

返回主目录并删除临时目录:

 cd .. rm -R APTGET 

现在,为nm-tool设置别名:

 cp ~/.bashrc ~/.bashback echo 'alias nm-tool="~/bin/nm-tool"' | tee -a ~/.bashrc;. ~/.bashrc 

现在的用户现在应该能够从终端运行nm-tool。


此外,这可能仍然无法准确提供您正在使用的所有实际 DNS解析器。

您可以访问DNSleaktest.com获取完整报告。 单击“ 扩展测试”以获取完整报告。

nmcli开发列表| grep DNS

它会输出类似的东西;
IP4.DNS[1]: 8.8.8.8 IP4.DNS[1]: 8.8.8.8 IP4.DNS[2]: 8.8.4.4

上面的命令在Ubuntu 16.04之前有效
对于Ubuntu 16.04使用:
nmcli dev show | grep DNS

实际上,NetworkManager确实使用了/etc/resolv.conf 。 但是,在默认设置下, resolv.conf列出的DNS服务器是127.0.0.1 ,因为NetworkManager使用自己的内部DNS服务是出于某些模糊的技术原因 ,这些原因与许多人无关。 这就是为什么你必须使用nmcli来查看NetworkManager在内部使用的DNS服务器的原因。

但是,也可以禁用此行为并返回到resolv.conf列出正在使用的实际DNS服务器的旧行为。 为此,只需在/etc/NetworkManager/NetworkManager.conf/etc/NetworkManager/NetworkManager.confdns=dnsmasq ,然后重新启动。 对于大多数人来说,除了实际的DNS服务器现在将在resolv.conf显示之外,这应该没有区别。 如果您是引入更改的极端情况之一,这应该很快就会显现出来,您可以通过再次取消注释该行来恢复默认行为。