我的动态 DNS 和 DHCP 设置出现问题,客户端在没有可用租约时请求租约会导致级联故障,现有客户端的正向和反向 DNS 记录将被删除。我在 Ubuntu 14.04 服务器上使用 isc-dhcp-server 和 bind9。在这种情况下,客户端运行的是 OS X。
我为 DHCP 服务器分配了一系列 IP,并将其连接到 bind 以进行动态 DNS 更新。发出 IP 时 bind 会更新,一切正常。但是,当 DHCP 租约池耗尽时,DHCP 服务器开始分发现存的租约给请求租约的客户端,然后立即撤销租约。不幸的是,这也会触发 DNS 更新,该 IP 的正向和反向记录也会被删除,这意味着 DNS 无法再找到该 IP 上的系统。这会在整个范围内按顺序继续,删除所有 DNS 条目,直到再次循环。
我翻遍了手册页,但无法解释这种行为。我尝试了 isc-dhcp-server 配置中的共享网络、子网和池,现在它们都表现出相同的行为。如果客户端返回租约,它会被分发给下一个请求租约的系统,DNS 也会更新,但是下一个请求租约的客户端在没有可用租约的情况下又会开始循环。
您对导致此行为的原因有何想法? DHCP 服务器似乎没有检查自己的 dhcpd.leases 文件以查看是否已发出这些 IP。
答案1
问题归结为 OS X 在 DHCP 规范方面行为不当。正如所讨论的这里OS X 在尝试通过 DHCP 进行通信之前会自行制作 ARP 数据包。如果DHCP 客户端 ID是填写的并且不是唯一的 OS X 用这些信息填充 ARP 数据包,从而引发 DHCP 耗尽攻击。
要纠正这个问题,您不能使用DHCP 客户端 ID场地或者它必须是唯一的。在我的例子中,我们创建了这个“[DHCP 租约池][主机名]”,它提供了一个唯一的客户端 ID,仍然可以使用 DHCP 服务器中的子字符串检索该 ID,以确定将系统分配给哪个租约池。