dhcpd 與此 mac 地址不匹配
在我的小網路上,我有一個簡單的設備,它顯然只使用
bootp
(而不是 bootp 的 dhcp 擴展)來獲取其地址。我的 dhcpd.conf 文件看起來像這樣class "user" { match if substring(hardware, 1, 3) = 00:01:02; log(info, "matched to a 3com"; } class "controller" { # tried matching based on two different styles I've seen on the net #match if substring(hardware, 1, 3) = 00:a0:45; match if (binary-to-ascii(16, 8, ":", substring(hardware, 0, 4)) = "1:00:a0:45"); log(info, "found a controller"); } subnet 192.168.0.0 netmask 255.255.0.0 { pool { allow members of "user"; range 192.168.0.20 192.168.0.99; log(info, "A user just attached"); } pool { allow members of "controller"; # never more than 1 on the network at a time range 192.168.1.240; log(info, "Allocated to a pwr user"); } }
dhcp 伺服器根本不匹配它應該匹配的池。從日誌
BOOTREQUEST from 00:a0:45:95:ce:14 via eth1: BOOTP from dynamic client and no dynamic leases
該設備在這兩個類別中均被拒絕。使用 tcpdump 和 wireshark 比較來自筆記型電腦和控制器設備的數據包轉儲(我暫時為 HP 筆記型電腦創建了一個類,將該類添加到用於“控制器”的池中,並將範圍擴大 2 個地址),這似乎是唯一的不同之處在於控制器設備實際上是一個 bootp 數據包(即它缺少標識 dhcp 類型的強制選項 53),並且僅攜帶選項 255。筆記型電腦是通過
dhcpd
不使用binary-to-ascii
轉換來匹配的。此外,奇怪的是,控制器客戶端 IP 標頭使用首先分配的 IP 地址 192.168.1.240,但在數據包的 bootp 部分,該ciaddr
欄位為 0。如果它認為它有一個有效的租約,它不應該反映這一點在ciaddr
?為什麼 dhcpd 無法匹配此設備的 MAC 地址?
我已經找到了這個問題的答案,我想發布它。事實證明,這與模式的匹配方式無關。實際上,
class "user" { match if substring(hardware, 1, 3) = 00:01:02; log(info, "matched to a 3com"; }
這是在硬體上匹配的正確語法。
然而,這是一個事實導致我得出錯誤結論的案例。在查看了幾個關於 bootp 和 dhcp 的 RFC 之後,很明顯,有問題的設備缺少RFC 1541第 3 節中的強制 DHCP 類型選項,使其成為僅 bootp 的客戶端。因此,修復來自我沒想到需要的東西。該
range
語句包括dynamic-bootp
說明 IP 範圍用於 dhcp 或 bootp 客戶端的修飾符。但是,我還需要allow dynamic bootp clients;
在池中如下:pool { allow dynamic bootp clients; allow members of "controller"; # never more than 1 on the network at a time range dynamic-bootp 192.168.1.240; log(info, "Allocated to a pwr user"); }
我原以為這個修飾符就足夠了,但事實並非如此。我需要兩者來完成任務。
我希望這對某人有所幫助。