Dhcp

udhcpc:如果 DHCP 伺服器提供 IP 地址而不是主機名,則 DHCP 選項 66 變數 tftp 包含“錯誤”

  • January 11, 2020

我正在開發一個嵌入式 Linux,它使用BusyBoxudhcpcBusyBox的一部分)作為其 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說明了這一點:

抽象的

本備忘錄記錄了“TFTP 伺服器地址”

選項的現有用法。目前使用的選項編​​號為 150。

$$ … $$ 有兩種普遍接受的方法可以通過 DHCP 發現此伺服器;DHCP 標頭中的“sname”欄位$$ RFC2131 $$和“TFTP 伺服器名稱”選項 (66)$$ RFC2132 $$. 但是,這兩個資訊源都包含 TFTP 伺服器的主機名。然後必須將該主機名轉換為 IP 地址。完成此操作的常用方法是 DNS

$$ RFC1034 $$. $$ … $$ 3. 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 伺服器的“下一個伺服器”配置的siaddr欄位,但是這個 RFC 提到一些有限的 DHCP 伺服器只會在這個欄位中返回自己。


更新(澄清解決方案可能比想像的要簡單):

如果 DHCP 伺服器(例如:ISC dhcp,或 busybox 自己的udhcpd )支持提供正確的siaddr(即不同於 DHCP 伺服器本身),那麼它當然已經被udhcpcd客戶端支持:

環境變數的參數如下:

$HOME     - The set $HOME env or "/"

$$ … $$

siaddr        - The bootp next server option

$$ … $$

到目前為止,我一直在使用*siaddr來通過 DHCP 使用單獨的 TFTP 伺服器啟動 x86 系統,例如直接安裝到 Debian 網路安裝。*我不知道也不需要選項 66 或 150。

引用自:https://unix.stackexchange.com/questions/561407