udhcpc:如果 DHCP 服务器提供 IP 地址而不是主机名,则 DHCP 选项 66 变量 tftp 包含“错误”

udhcpc:如果 DHCP 服务器提供 IP 地址而不是主机名,则 DHCP 选项 66 变量 tftp 包含“错误”

我正在开发一个嵌入式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]。

[...]

  1. 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。

相关内容