Dns

如何檢查我的 DNS 伺服器是否正常工作?

  • June 6, 2020

此案例場景適用於具有嵌入式 linux 的路由器,但我認為任何 Linux 系統的答案都可能相同。

這是我的DNS 檢查

~ $ cat /etc/resolv.conf
nameserver 80.58.61.250
nameserver 80.58.61.254
~ $ ping 80.58.61.250
PING 80.58.61.250 (80.58.61.250): 56 data bytes
64 bytes from 80.58.61.250: seq=0 ttl=250 time=50.0 ms
64 bytes from 80.58.61.250: seq=1 ttl=250 time=40.0 ms
^C
--- 80.58.61.250 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 40.0/45.0/50.0 ms
~ $ ping www.google.es
PING www.google.es (2a00:1450:4007:808::101f): 56 data bytes
ping: sendto: Network is unreachable
~ $ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=57 time=50.0 ms
64 bytes from 8.8.8.8: seq=1 ttl=57 time=40.0 ms
64 bytes from 8.8.8.8: seq=2 ttl=57 time=40.0 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 40.0/43.3/50.0 ms

可以看出,有來自網際網路 ( 8.8.8.8) 的響應,但沒有來自域名 ( www.google.es,與www.google.com) 的響應。

DNS 伺服器 ( 80.58.61.250) 響應 ping。

所以我想知道問題是否可能出在那個 DNS 伺服器上。

是否有某種方式(例如遠端登錄或類似方式)來檢查給定的 DNS IP 是否可以正常工作(即:在請求域名時使用 IP 地址回答)?

例如,在測試 SSH 伺服器時,一個可能的技巧是:

C:\Users\Luis>telnet Midnighter- 22
SSH-2.0-OpenSSH_6.7p1 Debian-5

接受第三方工具。命令行和開源首選。

ICMP ping 是一個糟糕的測試,因為工作中的 DNS 伺服器可能會阻止此類請求。DNS-over-UDP 沒有 SSH-over-TCP 所做的“獲得連接”握手 (SYN/SYN+ACK/ACK),因此最好的辦法是向假定的 DNS 伺服器拋出 DNS 查詢,看看會發生什麼. 如果有防火牆,或者如果查詢執行違反 DNS 速率限制(在防火牆級別或在 DNS 伺服器本身,由於 DNS 放大攻擊,這些天更常見),或者取決於查詢或DNS 伺服器(例如,它是對非遞歸的遞歸查詢NS?還是 DNS 伺服器認為是非本地視圖中的客戶端?等等)

我通常使用dig(或Net::DNS在 Perl 程序中)進行 DNS 檢查。還要研究監控軟體,因為這些軟體應該支持在 DNS 上進行監控、繪圖和報告,但在嵌入式路由器上使用可能太重了。一些dig例子:

# possibly get server version info (unreliable)
$ dig +short @128.95.120.1 TXT CHAOS version.bind
"UW 3A7_3"
$ dig +short @8.8.8.8 TXT CHAOS version.bind
$ 
$ dig +short @8.8.8.8 NS example.org
b.iana-servers.net.
a.iana-servers.net.
$ dig +short @8.8.8.8 SOA example.org
sns.dns.icann.org. noc.dns.icann.org. 2015082419 7200 3600 1209600 3600
$ 
$ dig +short @8.8.4.4 A www.example.org
93.184.216.34
$ dig +short @8.8.4.4 CNAME www.example.org
$ 
# checking via TCP and via IPv6 might also be useful
$ dig +tcp +short @2001:4860:4860::8888 A www.example.org
93.184.216.34
$ 

如果您不想安裝 BIND 實用程序,還有nslookupand命令。getent hosts這些功能不如dig.

引用自:https://unix.stackexchange.com/questions/233527