有没有办法让 dig 报告实际的名称服务器而不是 127.0.0.1?

有没有办法让 dig 报告实际的名称服务器而不是 127.0.0.1?

使用 resolvconf 时,dig 总是显示环回地址。有没有什么办法可以查看哪个服务器实际上在应答?

答案1

dig 这一行只是告诉您 dig 在哪里寻找答案,而不是它的最终来源。

在您的系统上,假设它是 Ubuntu 12.04 或更高版本的桌面,并且您没有禁用本地名称服务器,dnsmasq 正在监听环回地址,端口 53。Dnsmasq 是一个轻量级名称服务器,它使用其他名称服务器来解析名称。

要查看其使用的服务器,请输入以下内容:

 fgrep dnsmasq /var/log/syslog* | fgrep using | fgrep -v 127.0.0.1

或者使用 aking1012 的好建议:

nmcli -f IP4 dev list | grep DNS

在我的情况下,那是我的路由器/调制解调器,还运行从我的路由器/调制解调器的 DHCP 服务器获得的轻量级服务器。我必须登录到路由器并使用特定于路由器的方法来找出它使用的 DNS 服务器。(它由我的 ISP 配置为转发到他们的域名服务器)。

您当然可以用 NetworkManager 覆盖系统使用的域名服务器,或者,如果您使用 ifup 而不是 NetworkManager,则可以在 ifup 的配置文件 /etc/network/interfaces 中覆盖。

假设请求被转发到您的 ISP,ISP 的名称服务器可能会进行递归查找以确定答案,或者,可能性较小,甚至进一步转发递归请求。此递归请求链将持续进行,直到找到愿意并能够进行完整递归查找的域名服务器。如果在找到愿意响应递归请求的服务器之前没有完整的域名服务器,则它可能过早结束。大多数域名服务器不会为您执行这些操作,但 ISP 会为其客户执行这些操作,而商业域名服务器会为其域执行这些操作。您可以在 Ubuntu 下自行安装一个。Google 的 8.8.8.8 开放域名服务也可以。

对于我输入的任何特定地址,如果 dnsmasq 的缓存中有答案,我可能会从 dnsmasq 获取答案;如果 dnsmasq 的缓存中有答案,我可能会从路由器/调制解调器获取答案;或者如果 dnsmasq 的缓存中有答案,我可能会从 ISP 或其他地方获取答案。

和 aking1012 一样,我认为你无法追溯挖掘返回的答案。


如果您想知道这些信息最终来自哪里,您可能想知道域名的权威信息来源保存在哪里。

举个例子:

dig @8.8.8.8 -t soa bing.com

返回:

; <<>> DiG 9.8.1-P1 <<>> @8.8.8.8 -t soa bing.com    
; (1 server found)    
;; global options: +cmd    
;; Got answer:    
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59757    
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0    

;; QUESTION SECTION:
;bing.com.          IN  SOA    

;; ANSWER SECTION:    
bing.com.       43199   IN  SOA ns1.msft.net. msnhst.microsoft.com. 2012081301 1800 900 2419200 3600    

;; Query time: 155 msec    
;; SERVER: 8.8.8.8#53(8.8.8.8)    
;; WHEN: Sat Aug 25 01:10:26 2012    
;; MSG SIZE  rcvd: 91      

因此,有关域 bing.com 的权威信息来源可以来自 ns1.msft.net 或 msnhst.microsoft.com。

您还可以使用完整域名服务器的递归算法来追踪信息:

dig @8.8.8.8 -t ns "."

返回:

; ANSWER SECTION:    
.           20616   IN  NS  h.root-servers.net.    
.           20616   IN  NS  m.root-servers.net.    
.           20616   IN  NS  j.root-servers.net.    
.           20616   IN  NS  f.root-servers.net.    
.           20616   IN  NS  a.root-servers.net.    
.           20616   IN  NS  k.root-servers.net.    
.           20616   IN  NS  l.root-servers.net.    
.           20616   IN  NS  i.root-servers.net.    
.           20616   IN  NS  b.root-servers.net.    
.           20616   IN  NS  d.root-servers.net.    
.           20616   IN  NS  g.root-servers.net.    
.           20616   IN  NS  e.root-servers.net.    
.           20616   IN  NS  c.root-servers.net. 

全域名服务器至少配置一台根服务器的地址。

 dig @c.root-servers.net. -t ns "com"

返回:

;; 授权部分:
co

m.          172800  IN  NS  a.gtld-servers.net.    
com.            172800  IN  NS  b.gtld-servers.net.    
com.            172800  IN  NS  k.gtld-servers.net.    
com.            172800  IN  NS  d.gtld-servers.net.    
com.            172800  IN  NS  j.gtld-servers.net.    
com.            172800  IN  NS  h.gtld-servers.net.    
com.            172800  IN  NS  f.gtld-servers.net.    
com.            172800  IN  NS  c.gtld-servers.net.    
com.            172800  IN  NS  m.gtld-servers.net.    
com.            172800  IN  NS  l.gtld-servers.net.    
com.            172800  IN  NS  g.gtld-servers.net.    
com.            172800  IN  NS  e.gtld-servers.net.    
com.            172800  IN  NS  i.gtld-servers.net.    

;; ADDITIONAL SECTION:    
a.gtld-servers.net. 172800  IN  A   192.5.6.30    
a.gtld-servers.net. 172800  IN  AAAA    2001:503:a83e::2:30    
b.gtld-servers.net. 172800  IN  A   192.33.14.30    
b.gtld-servers.net. 172800  IN  AAAA    2001:503:231d::2:30    
c.gtld-servers.net. 172800  IN  A   192.26.92.30    
d.gtld-servers.net. 172800  IN  A   192.31.80.30    
e.gtld-servers.net. 172800  IN  A   192.12.94.30    
f.gtld-servers.net. 172800  IN  A   192.35.51.30    
g.gtld-servers.net. 172800  IN  A   192.42.93.30    
h.gtld-servers.net. 172800  IN  A   192.54.112.30    
i.gtld-servers.net. 172800  IN  A   192.43.172.30    
j.gtld-servers.net. 172800  IN  A   192.48.79.30    
k.gtld-servers.net. 172800  IN  A   192.52.178.30    
l.gtld-servers.net. 172800  IN  A   192.41.162.30    
m.gtld-servers.net. 172800  IN  A   192.55.83.30    


dig @k.gtld-servers.net -t ns "google.com"

返回

;; AUTHORITY SECTION:
google.com.     172800  IN  NS  ns2.google.com.    
google.com.     172800  IN  NS  ns1.google.com.    
google.com.     172800  IN  NS  ns3.google.com.    
google.com.     172800  IN  NS  ns4.google.com.    

;; ADDITIONAL SECTION:    
ns2.google.com.     172800  IN  A   216.239.34.10    
ns1.google.com.     172800  IN  A   216.239.32.10    
ns3.google.com.     172800  IN  A   216.239.36.10    
ns4.google.com.     172800  IN  A   216.239.38.10    

    dig @ns1.google.com -t a www.google.com

;; ANSWER SECTION:    
www.google.com.     604800  IN  CNAME   www.l.google.com.    
www.l.google.com.   300 IN  A   74.125.225.209    
www.l.google.com.   300 IN  A   74.125.225.208    
www.l.google.com.   300 IN  A   74.125.225.210    
www.l.google.com.   300 IN  A   74.125.225.212    
www.l.google.com.   300 IN  A   74.125.225.211    

附加信息部分给出了域名服务地址提示,以便可以轻松找到名称服务器。

CNAME 记录表明正典名称为了别名www.google.com 是 www.l.google.com。

当然,像 google.com 和 msft.com 这样的网站会采取各种措施将查询分发到各个计算机。

答案2

据我所知没有。

您可以使用:
nmcli dev list iface *insert outbound interface name here* | grep IP4 | grep DNS正如建议的那样这里

这个对我有用。

不依赖于输入接口名称的更清晰的调用是:
nmcli -f IP4 dev list | grep DNS

相关内容