从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
说明
如果你有时间,我可以解释上面的大笨蛋:
-
nmcli dev show
有点像旧的
nm-tool
命令。 它详细说明了当前的网络信息。您还可以通过添加接口名称来学习某个接口的设置。 例如,要了解
eth0
的信息,您可以使用nmcli dev show eth0
。 -
grep DNS
显然只grep其中包含文本“DNS”的行。
-
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.conf
行dns=dnsmasq
,然后重新启动。 对于大多数人来说,除了实际的DNS服务器现在将在resolv.conf
显示之外,这应该没有区别。 如果您是引入更改的极端情况之一,这应该很快就会显现出来,您可以通过再次取消注释该行来恢复默认行为。