如何在 Linux 和 Windows 上调试不使用远程 DNS 服务器进行主机名查找的 DHCP 客户端

如何在 Linux 和 Windows 上调试不使用远程 DNS 服务器进行主机名查找的 DHCP 客户端

我在设置 DHCP/DNS 解决方案时遇到了一些问题 - 具体来说,让客户端使用路由器提供的 DNS 服务。

我有一个“EdgeRouter”,我已将其设置为交换机(接口switch0),带有 DHCP 服务器,以及 Dnsmasq 服务,以根据以下要求提供 DHCP 主机名解析本指南

# show service dhcp-server
 disabled false
 hostfile-update disable
 shared-network-name my-dhcp {
     authoritative disable
     subnet 192.168.7.0/24 {
         default-router 192.168.7.1
         dns-server 192.168.7.1
         domain-name local
         lease 86400
         start 192.168.7.100 {
             stop 192.168.7.240
         }
     }
 }
 static-arp disable
 use-dnsmasq enable

我有两个客户端 - 一台 Ubuntu 18.04 Linux 笔记本电脑(称为ubuntu)和一台 Windows 10 笔记本电脑(称为windows),两者都连接到交换机并通过 DHCP 获取 IP 地址。我可以在每个客户端和交换机管理接口之间以及彼此之间完全 ping 通。我还检查了每个客户端收到的 DHCP 记录,并验证它们收到的 DNS 服务器地址为 192.168.7.1,这是正确的。

在交换机上我可以使用以下命令确认这些租约:

$ cat /var/run/dnsmasq-dhcp.leases
1420222142 ec:8e:b5:94:bd:8f 192.168.7.175 ubuntu *
1420219707 c8:d3:ff:6f:42:15 192.168.7.100 windows 01:c8:d3:ff:6f:42:15

ubuntu还可以验证交换机上的 DNS 服务器是否正常工作:

$ dig @192.168.7.1 ubuntu

; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> @192.168.7.1 ubuntu
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15747
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ubuntu.            IN  A

;; ANSWER SECTION:
ubuntu.     43200   IN  A   192.168.7.175

;; Query time: 0 msec
;; SERVER: 192.168.7.1#53(192.168.7.1)
;; WHEN: Tue Nov 03 12:21:15 NZDT 2020
;; MSG SIZE  rcvd: 53

对于挖掘的类似回应windows

如果我通过 ssh 进入路由器,我可以ping ubuntu或者ping windows没有问题——名称可以解析。

问题是,当我从 Windows ping 时,Linux 和 Windows 笔记本电脑似乎都无法解决问题:

> ping ubuntu
Ping request could not find host ubuntu. Please check the name and try again.

或者从 Linux:

$ ping windows
ping: windows: Name or service not known

Linux 客户端同样如此:

$ nslookup windows
Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find windows: SERVFAIL

据我所知,我的 Linux 笔记本电脑正在运行自己的 dnsmasq,/etc/resolv.conf如下所示:

nameserver 127.0.0.53
options edns0
search local

我不确定如何检查 dnsmasq 状态以查看它是否正在转发到/从 DHCP 获取的 DNS 服务器地址。

在 Windows 方面,我不知道如何调试这个问题。

而且奇怪的是,就在写完这篇文章之后,Linux 方面的事情突然开始工作了:

$ nslookup windows
Server:     127.0.0.53
Address:    127.0.0.53#53

Non-authoritative answer:
Name:   windows.local
Address: 192.168.7.100

我什么都没改!也许 10-20 分钟后问题就解决了。但 Windows 端不起作用。

解决这一问题的最佳下一步是什么?

相关内容