Centos

dhcpd 與此 mac 地址不匹配

  • November 8, 2021

在我的小網路上,我有一個簡單的設備,它顯然只使用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");
}

我原以為這個修飾符就足夠了,但事實並非如此。我需要兩者來完成任務。

我希望這對某人有所幫助。

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