udhcpc:如果 DHCP 伺服器提供 IP 地址而不是主機名,則 DHCP 選項 66 變數 tftp 包含“錯誤”
我正在開發一個嵌入式 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說明了這一點:
抽象的
本備忘錄記錄了“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。