背景
我试图找出当我使用 wlan0 设备连接到互联网时正在使用哪个 DNS 服务器。我正在运行 Kubuntu 15.04。
我搜索了一番,尝试了一些解决方案,但都不起作用。以下是我尝试过的方法:
1.使用 nmcli 命令
nmcli dev list | grep DNS
根据对类似问题的回答这里。
这被标记为 OP 的答案,但对我来说,我只得到以下输出:
错误:“dev”命令“list”无效。
2.读取resolv.conf:
cat /etc/resolv.conf
这并没有给我提供我的连接的 DNS 信息。
- 使用 nm-tool
nm-tool 似乎没有安装在我的系统上。所以这对我来说不是正确的答案。
- 使用 dnsmasq
有几个答案涉及使用 dnsmasq。但在所有情况下,我都对答案的理解还不够深入,无法使用它,而且我不知道 dnsmasq 是什么。
问题
如何使用 Kubuntu 15.04 通过命令行或 GUI 找出连接正在使用的 DNS?
[编辑]
看来我很难清楚地表达这个问题,因为很多人给出的答案虽然正确,但并不完全是我心中问题的答案。以下是我试图澄清的:
到目前为止提供的答案只是给我路由器的地址,因为我的路由器负责提供互联网连接。但我真正想到的问题是;互联网当我在互联网浏览器中输入“www.google.com”等时,会使用 DNS 服务器吗?
我认为这相对容易找到,主要是因为我可以很容易地自己指定使用哪个互联网 DNS 服务器。例如,我可以调出我的连接设置并告诉它使用 8.8.8.8 作为 DNS,这是 Google 的公共 DNS 服务器。那么我的问题是:如果我不指定任何特定的 DNS 服务器,让路由器使用分配给它的服务器,我如何找出它正在使用哪个 DNS 服务器?
答案1
使用 nmcli 你可以检查 dnsmasq 配置了哪些 dns 服务器:
nmcli dev show wlan0 | grep -i dns
例如:
$ nmcli dev show wlan0 | grep -i dns
IP4.DNS[1]: 10.11.12.1
IP4.DNS[2]: 10.11.13.1
答案2
更新:正如问题下方的评论所揭示的,OP 想知道路由器使用的 DNS 服务器。如果您使用自动连接,这里给出的所有答案都会告诉您路由器的地址,这意味着请求首先发送到您的路由器。路由器反过来有自己的设置,它会将您发送的任何 DNS 请求转发到路由器的 DNS。
只有访问路由器的设置(通常对于家用路由器而言),才有可能找出路由器上使用的 DNS 服务器192.168.0.1
。
总结:版本 1 - 检查系统日志。版本 2 - 使用nslookup
或发送数据包dig
并查看它们去往何处;更高级和技术性的答案,但绝对更有趣,而且在我看来更可靠。
上面发布的其他答案都很棒,99% 的时间都有效。在这个答案中,我想提供一个替代的、更技术性的解决方案nslookup
。另一个更简单的解决方案是检查/var/log/syslog
。
syslog 方法
简单的方法是使用grep
工具using nameserver
在中搜索字符串/var/log/syslog/
:
$ sudo grep 'using nameserver' /var/log/syslog
Aug 6 02:25:34 ******** dnsmasq[1487]: using nameserver 208.67.220.220#53
tcpdump 和 nslookup 方法
这里的方法并不那么简单,但可能更可靠。由于观察 DNS 请求的去向将告诉我们哪个是真正的 DNS 服务器,因此我们可以做到这一点。有这样的工具tcpdump
。它用于分析互联网适配器发送的数据包。通常,此工具用于渗透测试。对于我们确定 DNS 的适度目的,我们只需要做两件事 - 同时运行tcpdump
并使用另一个工具nslookup
(实际上有助于使用系统的 DNS 服务器查找域名)。具体来说,我们想要查找前往.domain
目的地的数据包。例如,我运行sudo tcpdump -c 50 -i wlan0 > tcpdump-result.txt
以从我的无线适配器捕获 50 个数据包,然后立即转到另一个终端选项卡并运行nslookup google.com
。为方便起见,我还将tcpdump
结果输出到文件tcpdump-result.txt
grep
现在,利用诸如和之类的工具的一点知识awk
,我筛选出了关于的所需信息.domain
:
$ awk '/.domain/ {gsub("my-host-name","****");print}' tcpdump-result.txt
01:49:48.811363 IP ****.local.29258 > 192.168.0.1.domain: 11608+ PTR? 69.0.168.192.in-addr.arpa. (43)
01:49:49.095361 IP ****.local.44184 > google-public-dns.domain: 9560+ A? google.com. (28)
01:49:49.139361 IP google-public-dns.domain > ****.local.44184: 9560 1/0/0 A 216.58.217.46 (44)
如您所见,我的请求发送到 192.168.0.1,这是我的家庭路由器。因此,这意味着您正在使用 Internet 服务提供商分配给您的 DNS 服务器。
现在,如果我们改变 DNS 并重新执行所有操作会怎样?
$ awk '/.domain/ {gsub("my-hostname","****");print}' tcpdump-result2.txt
02:05:35.885670 IP ****.local.51056 > resolver2.opendns.com.domain: 2511+ A? google.com. (28)
02:05:36.189665 IP ****.local.5503 > 192.168.0.1.domain: 63991+ PTR? 220.220.67.208.in-addr.arpa. (45)
02:05:36.237664 IP 192.168.0.1.domain > ****.local.5503: 63991 1/0/0 PTR resolver2.opendns.com. (80)
02:05:36.241664 IP ****.local.27776 > 192.168.0.1.domain: 58334+ PTR? 69.0.168.192.in-addr.arpa. (43)
现在我的请求转到 opendns!但具体是哪个 IP?
ping resolver2.opendns.com
PING resolver2.opendns.com (208.67.220.220) 56(84) bytes of data.
64 bytes from resolver2.opendns.com (208.67.220.220): icmp_seq=1 ttl=57 time=59.9 ms
64 bytes from resolver2.opendns.com (208.67.220.220): icmp_seq=2 ttl=57 time=55.9 ms
^C
--- resolver2.opendns.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 55.999/57.999/59.999/2.000 ms
正如你所看到的208.67.220.220
答案3
有两种方法:
$ 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.1.1 **<--Server**
search localdomain
或者
$ dig localhost
; <<>> DiG 9.9.5-3ubuntu0.4-Ubuntu <<>> localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47070
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;localhost. IN A
;; ANSWER SECTION:
localhost. 0 IN A 127.0.0.1
;; Query time: 1 msec
;; SERVER: 127.0.1.1#53(127.0.1.1) **<--Server**
;; WHEN: Wed Aug 05 11:30:10 EDT 2015
;; MSG SIZE rcvd: 54
原来问题是“我想知道当我使用我的互联网连接将主机名解析为 IP 时使用哪些 DNS 服务器。例如,当我使用我的互联网浏览器浏览 www.amazon.com 时,哪个 DNS 服务器将其转换为 IP”。
现在,答案是:
对于现有连接,您不能这样做。在打开连接之前,DNS 地址解析已经发生并结束。
要查看使用哪些名称服务器来解析 DNS 查询,您可以dig +trace @$( grep nameserver /etc/resolv.conf| awk '{print $2}' | head -n1 ) amazon.com
dig
来自dnsutils
包裹。
答案4
显示每个网络设备的所有 DNS,但以下情况除外lo
:
for i in /sys/class/net/*; do \
awk -F/ '! /lo/ {system("nmcli dev show "$(NF)" | grep \"DNS\|DEVICE\"")}' <<< "$i"; \
done
示例输出
GENERAL.DEVICE: eth0
IP4.DNS[1]: 192.168.20.1