我正在开发一个嵌入式 Linux,它使用BusyBox和udhcpc(BusyBox的一部分)作为其 DHCP 客户端。
如果我将 DHCP 服务器配置为在 DHCP 选项 66 中提供 FTP 服务器,那么只要选项包含主机名(可能是有效的 DNS 名称?!),一切都很好(即其中的tftp
变量包含配置的值)。/etc/udhcpc.script
如果选项包含 IP 地址,则变量tftp
包含值“bad”。
这种行为的原因和意义是什么?
我在udhcpc文档中找不到有关此行为的任何信息(https://udhcp.busybox.net/README.udhcpc、https://udhcp.busybox.net/ ) ,也没有在 Google 上获得任何有用的搜索结果。
RFC2132不包含在此选项中不允许 IP 地址的任何限制(据我了解)。
有什么方法可以从 udhcpc 中的选项 66 获取 IP 地址?
更新:使用单独的 TFTP 服务器通常不需要选项 150(或 66),如果在 DHCP 服务器上可配置,原始siaddr字段应该足够了,见最后。
RFC 5859说明了这一点:
所以我只能告诉你问题的答案是:不,你不能为此使用选项 66,你应该支持 DHCP 选项 150或指向 TFTP 服务器的“下一个服务器”配置的siaddr字段,但是这个 RFC 提到一些有限的 DHCP 服务器只会在这个字段中返回自己。
更新(澄清解决方案可能比想象的要简单):
如果 DHCP 服务器(例如:ISC dhcp,或者 busybox 自己的udhcpd )支持提供正确的siaddr(即不同于 DHCP 服务器本身),那么它当然已经被udhcpcd客户端支持:
到目前为止,我一直在使用siaddr来通过 DHCP 使用单独的 TFTP 服务器启动 x86 系统,例如直接安装到 Debian 网络安装。我不知道也不需要选项 66 或 150。