![路由器上禁用 dhcp 服务器会阻止客户端获取地址](https://linux22.com/image/724743/%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E7%A6%81%E7%94%A8%20dhcp%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BC%9A%E9%98%BB%E6%AD%A2%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%8E%B7%E5%8F%96%E5%9C%B0%E5%9D%80.png)
我的本地网络出现了一个奇怪的问题,导致某些客户端有时会从真正的 dhcp 服务器 (xxx3) 获取 IP 地址。dhcp 服务器是运行 isc-dhcp 服务器的 CentOS VM,用于 ipv4。我的 ISP(Sagemcom)的路由器禁用了 dhcp 服务器 (xxx1)。
但是,当客户端直接连接到 Sagemcom 路由器时,我有时会看到这样的响应:
The server offers address x.x.x.181 from x.x.x.3
NACK: Requested address not available from x.x.x.1
(不完全是那样...)那么,为什么路由器在应该关闭的情况下给出 NACK 呢?dhcpd.conf 中的指令“authoritive”在这里到底起什么作用?
所以我最重要的问题是,我该如何解决这个问题?
如果我在自己的 dhcp 服务器处于不活动状态时运行nmap --script broadcast-dhcp-discover
,则我不会收到回复。
答案1
dhcpd.conf 中的指令“authoritive”在这里到底起什么作用?
来自 dhcpd 手册:
DHCP 服务器通常会假设给定网段的配置信息不知道是否正确,并且不具有权威性。这样,如果新手用户在不完全了解如何配置 DHCP 服务器的情况下安装了该服务器,它不会向已从网络上的合法 DHCP 服务器获取地址的客户端发送虚假的 DHCPNAK 消息。
因此,这意味着如果 dhcp 服务器收到对其未知地址的请求,它将发送 NACK。就您而言,是其他 dhcp 服务器发送了 NACK,因此在这种情况下,您服务器上的“权威”并不重要,但如果客户端请求属于其他 dhcp 服务器的地址,则重要。
您可以使用 -e 选项运行 tcpdump 来查看哪个以太网主机发送了 NACK。它可能是路由器,也可能是配置为转发到路由器的代理。根据潜在代理的配置,如果它没有收到来自 dhcp 服务器的答复,它可能会用 NACK 进行答复。
答案2
可能您在网络的某个地方配置了 dhcp 中继/dhcp 辅助程序,它指向“已禁用”的 dhcp 服务器。请求将包含中继设备的 ip 地址,当该地址与 dhcp 子网不匹配时,将发出 NACK。您可以通过进行一些数据包跟踪来了解详细信息。
请看这里:https://documentation.meraki.com/zGeneral_Administration/Tools_and_Troubleshooting/DHCP_NAK
DHCP NAK 是来自 DHCP 服务器的否定确认。服务器将在以下情况下发送 DHCP NAK:
请求的地址可能来自同一子网,但不在服务器的地址池中。这可能是故障转移场景,其中
2 个 DHCP 服务器为同一子网提供服务,因此当其中一个服务器发生故障时,另一个服务器不应该向从 第一个服务器
获取 IP 的客户端发送 NAK 消息。请求的地址位于不同的子网。
请求的地址已被另一个客户端使用。
对于您的其他问题:
那么,为什么路由器应该关闭,却给出 NACK 呢?dhcpd.conf 中的指令“authoritive”在这里到底起什么作用?
看来 dhcp 服务器并没有真正关闭。
引自https://linux.die.net/man/5/dhcpd.conf:
权威声明
权威性;
不具有权威性;
DHCP 服务器通常会假设给定网段的配置信息不知道是否正确,并且不具有权威性。这样,如果新手用户在不完全了解如何配置 DHCP 服务器的情况下安装了该服务器,它不会向已从网络上的合法 DHCP 服务器获取地址的客户端发送虚假的 DHCPNAK 消息。
为其网络设置权威 DHCP 服务器的网络管理员应始终在其配置文件顶部写入权威;以指示 DHCP 服务器应向配置错误的客户端发送 DHCPNAK 消息。如果不这样做,客户端在更改子网后将无法获得正确的 IP 地址,直到其旧租约到期,这可能需要相当长的时间。
通常,在文件的顶层写入 authoritative; 就足够了。但是,如果要设置 DHCP 服务器,使其知道哪些网络是其授权的,哪些网络不是,则按网络段声明授权可能更合适。
请注意,权威概念最具体的范围是物理网络段 - 共享网络语句或未包含在共享网络语句中的子网语句。指定服务器对共享网络中的某些子网具有权威性,但对其他子网不具有权威性是没有意义的,指定服务器对某些主机声明具有权威性,而对其他主机声明不具有权威性也是没有意义的。
所以我最重要的问题是,我该如何解决这个问题?
答案是数据包追踪。 https://www-01.ibm.com/support/docview.wss?uid=swg21175744