我正在尝试 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 有关:服务器具有此框所在的正向和反向区域的区域文件。
所以我找到了这个页面(http://www.tldp.org/HOWTO/DHCP/x369.html),其中提到了向
/etc/hosts
.我补充说:
到最后,这似乎解决了问题。不知道为什么我以前不需要这个,因为它看起来很基础。有谁知道为什么会这样?
DHCP 服务器必须能够向没有 IP 的客户端发送 DHCPOFFER 数据包,然后它们使用广播目标 MAC 地址 (FF:FF:FF:FF:FF:FF) 以及广播目标 IP 地址 ( 255.255.255.255)。不幸的是,Linux 坚持将 255.255.255.255 目标 IP 更改为本地子网广播地址;这会导致 DHCP 协议违规。
虽然许多 DHCP 客户端不会注意到问题,但有些(例如,所有 Microsoft DHCP 客户端)会。有此问题的客户端似乎看不到来自服务器的 DHCPOFFER 消息。
前面引用的页面所做的是“欺骗”Linux 网络引擎,使其能够通过涉及创建路由的几种方法使用 255.255.255.255 IP 作为 DHCPOFFER 的目标 IP,或者使用 255.255.255.255 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 流量捕获并查看数据包级别的问题。