我正在尝试通过 PXE 启动一台机器。在系统日志中,我可以看到:
dhcpd[28030]: DHCPDISCOVER from 98:90:96:bc:fc:e3 via 10.65.240.2
dhcpd[28030]: none: host unknown.
dhcpd[28030]: DHCPOFFER on 10.65.240.111 to 98:90:96:bc:fc:e3 via 10.65.240.2
我无论如何也解决不了这个问题。子网有效且存在,机器有租约,而且这台机器之前构建得很好!
一些谷歌搜索表明“主机未知”意味着与 DNS 有关:服务器具有此框所在的正向和反向区域的区域文件。
答案1
DHCP 服务器必须能够向没有 IP 的客户端发送 DHCPOFFER 数据包,然后它们使用广播目标 MAC 地址 (FF:FF:FF:FF:FF:FF) 和广播目标 IP 地址 (255.255.255.255) 广播其 DHCPOFFER。不幸的是,Linux 坚持将 255.255.255.255 目标 IP 更改为本地子网广播地址;这会导致违反 DHCP 协议。
虽然许多 DHCP 客户端不会注意到此问题,但有些(例如所有 Microsoft DHCP 客户端)会注意到。存在此问题的客户端似乎看不到来自服务器的 DHCPOFFER 消息。
前面引用的页面所做的是“欺骗”Linux 网络引擎,使其能够通过涉及创建路由或添加带有 255.255.255.255 IP 的主机名等多种方法使用 255.255.255.255 IP 作为 DHCPOFFER 的目标 IP。
编辑:DHCP 客户端位于网络的哪个位置并不重要;问题是,如果目标 IP 不是 255.255.255.255,一些挑剔的 DHCP 客户端会忽略 DHCP 请求。请考虑,如果您通过 PXE 启动 PC,PXE 固件是“第一个”DHCP 客户端,接下来,如果您加载 Linux 内核/initrd,您将收到由启动 Linux 内核发出的“第二个”DHCP 请求。在这种情况下,在单个 PXE 启动会话中,您会得到 2 个连续的完全不同的 DHCP 客户端,并且可能会发生这种情况:虽然第一个客户端可以容忍所描述的 DHCP 协议违规,但第二个客户端可能无法容忍。如果您只启动“宽容”的 DHCP 客户端,那么同一台 PXE 启动 PC 以前可以很好地工作。
为了“了解”发生了什么,我建议获取一些 Wireshark 流量捕获并查看数据包级别的问题。
答案2
所以我找到了这个页面(http://www.tldp.org/HOWTO/DHCP/x369.html) 中提到添加一个条目/etc/hosts
。
我补充道:
255.255.255.255 none
到最后,这似乎已经解决了问题。不确定为什么我以前不需要这个,因为它似乎很基本。有人知道为什么会发生这种情况吗?