(跟进12.04 的类似问题。
在 Ubuntu 12.04 之前,您可能会在 中看到活动的 DNS /etc/resolv.conf
。在 Ubuntu 12.04 中,NetworkManager 不再与该文件配合使用。您必须直接查阅命令行工具nm-tool
。
有趣的是,nm-tool
在 14.04 及更高版本中不再默认安装。尽管您仍可以通过 安装apt-get install
,但您不能假设所有 Ubuntu 都具有该功能。
所以问题仍然存在。在默认安装中,您如何知道通过命令行使用的 DNS?
答案1
快速回答
现在默认安装了一个新的 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
使用多个空格)。sed
将原始输出中的空格转换为 TAB。
答案2
数据包分析是一种替代方法,无论您使用 NetworkManager 还是其他网络连接工具,它都可以工作。基本思路是发送 DNS 查询,nslookup
然后在第二个终端检查数据包的去向。
为此,我们需要首次连接到网络,以便没有任何东西干扰连接,然后运行以下命令:
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 地址,可以使用-n
带有的标志tcpdump
。
例如:
$ 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)
答案3
如果有人对 Ubuntu 18.04LTS 有与我相同的疑问:
列出通过网络管理器管理的所有网络设备:
networkctl list
显示特定设备的配置:
networkctl status eth0
您必须输入之前列表中显示的网络设备名称,而不是 eth0。如果没有 DNS 条目,则您的卡没有配置名称服务器
答案4
由于它与网络管理器捆绑在一起,因此在 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获取完整报告。点击延伸测试获得完整报告。