我正在开发一个嵌入式Linux,它使用忙碌盒和乌兹别克斯坦(部分忙碌盒)作为其 DHCP 客户端。
如果我将 DHCP 服务器配置为在 DHCP 选项 66 中提供 FTP 服务器,只要该选项包含主机名(可能是有效的 DNS 名称?!),一切都很好(即,tftp
变量中包含配置的值)。/etc/udhcpc.script
如果选项包含 IP 地址,则变量tftp
包含值“bad”。
这种行为的原因和意义是什么?
我在 udhcpc 文档中找不到有关此行为的任何信息(https://udhcp.busybox.net/README.udhcpc,https://udhcp.busybox.net/)我在谷歌上也没有得到任何有用的搜索结果。
RFC2132不包含任何禁止此选项中的 IP 地址的限制(据我了解)。
有什么方法可以从udhcpc中的选项66获取IP地址吗?
答案1
更新:使用单独的 TFTP 服务器通常不需要选项 150(或 66),原来的西亚地址场地如果可以在 DHCP 服务器上进行配置,应该就足够了,请参阅末尾。
RFC 5859告诉我们:
抽象的
本备忘录记录了“TFTP 服务器地址”
选项的现有用法。当前使用的选项编号为 150。[...]
有两种普遍接受的方法可以通过 DHCP 发现此服务器; DHCP 标头中的“sname”字段[RFC2131]和“TFTP 服务器名称”选项 (66)[RFC2132]。然而,这两个信息源都包含 TFTP 服务器的主机名。然后必须将该主机名转换为 IP 地址。实现此目的的常用方法是 DNS [RFC1034]。
[...]
- TFTP 服务器地址选项定义
TFTP 服务器地址选项是一个 DHCP 选项 [RFC2132]。该选项包含客户端可以使用的一个或多个 IPv4 地址。该选项当前的用途是通过 TFTP 从 VoIP 服务器下载配置;然而,该选项可以用于联系 VoIP 配置服务器以外的目的。
该选项的格式为:
Code Len IPv4 Configuration Server Address(es) +-----+-----+-----+-----+-----+-----+ | 150 | n | IPv4 address | ... +-----+-----+-----+-----+-----+-----+ Figure 1
选项最小长度 (n) 为 4。
[...]
所以我只能告诉你的问题的答案是:不,你根本不能使用选项 66 为此,你应该支持 DHCP 选项 150或者这西亚地址字段是指向 TFTP 服务器的“下一个服务器”配置,但此 RFC 提到一些有限的 DHCP 服务器只会在此字段中返回自己。
更新(澄清解决方案可能比想象的更简单):
如果提供正确的西亚地址(即与DHCP服务器本身不同)是由DHCP服务器支持的(例如:ISC dhcp,或者busybox自己的乌兹别克斯坦),那么它当然已经被支持了乌兹别克斯坦客户:
环境变量的参数如下:
$HOME - The set $HOME env or "/"
[...]
siaddr - The bootp next server option
[...]
西亚地址到目前为止,我一直在使用它通过 DHCP 使用单独的 TFTP 服务器启动 x86 系统,例如直接启动 Debian 网络安装。我不知道也不需要选项 66 或 150。