这种情况适用于带有嵌入式 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
Run Code Online (Sandbox Code Playgroud)
可以看出,有来自 Internet ( 8.8.8.8
)的响应,但没有来自域名 ( www.google.es
,对于www.google.com
)的响应。
DNS 服务器 ( 80.58.61.250
) 响应 ping。
所以我想知道问题是否出在那个 DNS 服务器上。
是否有某种方法,例如 telneting 或类似方法,可以检查给定的 DNS IP 是否正常工作(即:在请求域名时使用 IP 地址进行回答)?
例如,在测试 SSH 服务器时,一个可能的技巧是:
C:\Users\Luis>telnet Midnighter- 22
SSH-2.0-OpenSSH_6.7p1 Debian-5
Run Code Online (Sandbox Code Playgroud)
接受第三方工具。命令行和开源首选。
thr*_*rig 15
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
$
Run Code Online (Sandbox Code Playgroud)
$ 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
$
Run Code Online (Sandbox Code Playgroud)
$ dig +short @8.8.4.4 A www.example.org
93.184.216.34
$ dig +short @8.8.4.4 CNAME www.example.org
$
Run Code Online (Sandbox Code Playgroud)
# 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
$
Run Code Online (Sandbox Code Playgroud)
如果您不想安装 BIND 实用程序,也可以使用nslookup
和getent hosts
命令。这些比 功能弱或非常弱dig
,但如果您只需要检查对特定主机的查找是否返回特定 IP,则可能就足够了。