如何检查我的 DNS 服务器是否正常工作?

如何检查我的 DNS 服务器是否正常工作?

这个案例场景适用于带有嵌入式 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

接受第三方工具。首选命令行和开源。

答案1

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 实用程序,还有nslookup和命令。getent hosts这些功能不如 或非常弱dig,但如果您只需要检查特定主机的查找是否返回特定 IP,则可能就足够了。

答案2

今天我遇到了一个非常奇怪的问题。事实上,我的 DNS 服务器适用于除一个域之外的所有域。由于它适用于我的所有其他域,因此显然不是防火墙问题。不仅如此,我有一段时间没有更改防火墙了。

进一步查看,我终于找到了一个页面,提到了该区域的缓存版本。那个缓存就是罪魁祸首。我删除了它并重新启动服务器,它又工作了。我刚刚在失败之前对该域进行了更改,但仍然如此。这不是预期的行为。

$ dig NS www.example.com

; <<>> DiG 9.11.3-1ubuntu1.12-Ubuntu <<>> NS www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62918
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.example.com.           IN  NS

;; Query time: 605 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Fri Jun 05 13:20:25 PDT 2020
;; MSG SIZE  rcvd: 42

重置文件的命令:

$ sudo rm /var/lib/bind/example.com.zone.jnl
$ sudo systemctl restart bind9

之后,它按预期工作。

一个有趣的方面是:该named-checkzone工具不会返回错误,因为源文件很好......

$ sudo named-checkzone example.com /etc/lib/bind/example.com.zone

正如我上面提到的,该文件很好。只是日记偶尔会欺骗我们。

来源:日志前滚失败,不同步。有区域

相关内容