如何找出我的 wlan0 正在使用哪个 DNS 服务器 Kubuntu 15.04

如何找出我的 wlan0 正在使用哪个 DNS 服务器 Kubuntu 15.04

背景

我试图找出当我使用 wlan0 设备连接到互联网时正在使用哪个 DNS 服务器。我正在运行 Kubuntu 15.04。

我搜索了一番,尝试了一些解决方案,但都不起作用。以下是我尝试过的方法:

1.使用 nmcli 命令

nmcli dev list | grep DNS

根据对类似问题的回答这里。

这被标记为 OP 的答案,但对我来说,我只得到以下输出:

错误:“dev”命令“list”无效。

2.读取resolv.conf:

cat /etc/resolv.conf

这并没有给我提供我的连接的 DNS 信息。

  1. 使用 nm-tool

nm-tool 似乎没有安装在我的系统上。所以这对我来说不是正确的答案。

  1. 使用 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    

相关内容