(Microsoft) 供應商特定 DHCP 選項的解釋和揭祕 – Ingmar Verheij
DHCP 服務器可以向客戶端發送供應商特定選項以精細地控制配置。Microsoft 客戶端開箱即可接收Microsoft Windows 特定選項,而 Microsoft DHCP 服務器能夠發送僅由 Windows 客戶端接收的 DHCP 選項。
某些應用程序使用DHCP 選項的內容來接收配置數據,例如Microsoft Lync或RES Workspace Manager。由於此應用程序僅在 Microsoft Windows 上運行,因此僅將此選項發送到 Windows 客戶端是合乎邏輯的。
在本文中,我將解釋此機制的工作原理以及如何從非 Microsoft DHCP 服務器(如 Linux 或 Lucent-Alcatel VitalQIP 設備)發送 Microsoft Windows 特定的 DHCP 選項。
供應商類別
DHCP 客戶端使用供應商類別來選擇性地識別供應商和配置。供應商類別的示例有:
- 適用於Cisco Unified IP 電話 7940G的“Cisco Systems, Inc. IP 電話 CP-7940”
- “alcatel.noe.0”代表阿爾卡特 IP 觸摸電話
- 適用於所有 Windows 2000 客戶端(及更高版本)的“MSFT 5.0”
- 適用於所有 Windows 98 和 Me 客戶端的“MSFT 98”
- “MSFT”適用於所有 Windows 98、Me 和 2000 客戶端
正如您所看到的,供應商類沒有命名約定或規定,但實現似乎很清楚。微軟聲稱在三個供應商類別中,“MSFT 5.0”使用最多,因爲它推翻了“MSFT” ( Windows 98 的市場份額約爲0.01%)。
微軟DHCP服務器
在Microsoft DHCP 服務器中,Windows Windows 計算機的供應商類別是內置的,其他類別可以通過協議棧(IPv4 或 IPv6)的上下文菜單並選擇“定義供應商類別”來添加。
Microsoft Windows DHCP 客戶端
在 DHCP 請求的第一階段(即DHCP Discover) 中,客戶端在 DHCP 選項 60(或供應商類別標識符)中添加預定義的供應商類別。
對於 Windows 2000 及更高版本(Vista / 7 / 8 / 等),發送“MSFT 5.0” 。由於這是一個廣播,所有 DHCP 服務器(以及其他嗅探數據包的計算機)都知道這是一個“Microsoft Windows 2000 客戶端”,並且只應發送該供應商的 DHCP 選項。
PS:您的 Microsoft Windows DHCP 客戶端中的默認供應商類別可以更改以混淆您的操作系統,但它不受支持 - 請參閱此鏈接。
DHCP 優惠
DHCP 服務器收到 DHCP Discover後,會 向 DHCP 客戶端 返回 包含 DHCP 租約的DHCP Offer 。租約包含 IP 信息(提供的 IP、中繼代理、DHCP 服務器)、MAC 地址、選項和其他一些內容。
有趣的是,DHCP 服務器僅返回 DHCP 客戶端通過其DHCP Discover數據包中的選項 55 請求的選項。默認情況下爲:1、3、6、15、31、33、43、44、46、47、121 和 249(有關說明,請參閱IANA)。
我們感興趣的 DHCP 選項是選項 43 Vendor Specific Information。如上所述,DHCP 選項的值僅發送到具有特定供應商類別(示例中爲 MSFT 5.0)的客戶端。
DHCP 選項 43 – 供應商特定信息
RFC2132中描述了DHCP選項43 ,它解釋了該選項的數據包需要如何發送。結構非常簡單:第一個字節包含選項代碼43 [或十六進制的 0x2B],第二個字節包含包的長度,後跟一個或多個選項。
每個選項 i n( i1、i2 等)具有相同的基本結構:第一個字節包含選項代碼,第二個字節包含包的長度,後跟選項的值。
RFC 中沒有(明確)記錄的是每個選項都以值爲 0 (0x00) 的字節(分隔符)結尾。這意味着每個選項 i n(i1、i2 等)實際上具有以下結構:
例子
以下是供應商特定 DHCP 選項圖的示例。
在示例中,我設置了三個供應商特定選項(供應商類別爲 MSFT 5.0,適用於 Windows 2000 客戶端)。
- 帶有字符串值Ingmar 的選項 10
- 帶有字符串值Verheij 的選項 11
- 帶有字符串值的選項 12 www.ingmarverheij.com
默認情況下,只有選項 001、002 和 003 可用於Microsoft Windows 2000 選項,但可以通過協議棧(IPv4 或 IPv6)的上下文菜單並選擇“設置預定義選項”來擴展這些選項。
供應商特定選項的值是通過範圍或服務器選項設置的,在本例中,我已在範圍選項中配置它們。
DHCP 優惠
DHCP 客戶端接收包含指定供應商特定選項的DHCP Offer(使用DHCP 客戶端工具):
收到的 DHCP 提供包含多個選項,包括子網掩碼 [1]、域名 [15]、域名服務器 [6] 和供應商特定選項[43],就像示例圖中所示的那樣。你看不到的是包含代碼[ 43]和長度[43字節]的DHCP選項數據包。Wireshark確實顯示了此信息。
在兩次捕獲中可以清楚地看到,每個選項(i1、i2 等)均以 0 (0x00) 字節結尾。儘管 RFC 中沒有提及這一點,但 DHCP 客戶端需要識別選項的結尾,從而允許客戶端分隔選項。
該值作爲十六進制字節值發送。可以在此處將十六進制值轉換爲字符串,也可以在此處將字符串轉換爲十六進制。
從註冊表中讀取 DHCP 選項
您還可以從註冊表中讀取客戶端收到的供應商特定 DHCP 選項:
我編寫了一個 PowerShell 腳本,它從註冊表中讀取收到的 DHCP 選項,併爲您格式化它們。該腳本可以在這裏找到。
非 Microsoft DHCP 服務器
如果您必須配置默認情況下不提供 (Microsoft) 供應商特定 DHCP 選項的非 Microsoft DHCP 服務器,則此信息尤其有價值。
Linux DHCP 服務器
如果您有 Linux DHCP 服務器,可以在/etc/dhcp/dhcpd.conf配置文件中設置供應商特定選項。這些選項可以在子類中設置,您可以在子類中根據供應商類標識符進行過濾。您可以在下面找到一個示例配置,其中顯示了與前面示例中相同的供應商特定選項。
dhcpd配置文件
ddns 更新樣式無;
默認租用時間 600;
最大租用時間 7200;
選項域名“domain.local”;
選項域名服務器 192.168.0.1;
選項路由器 192.168.0.1;
權威性;
日誌設施本地7;
子網 192.168.0.0 網絡掩碼 255.255.255.0 {
範圍 192.168.0.100 192.168.0.200;
}
類“MSFT 5.0”{
如果選項供應商類別標識符 = "MSFT 5.0" 則匹配;
選項供應商類別標識符“MSFT 5.0”;
選項供應商封裝選項0a:07:49:6e:67:6d:61:72:00:56:65:72:68:65:69;6a:00:77:77:77:2e:69: 6e:67:6d:61:72:76:75:72:68:65:69:6a:2e:63:6f:6d:00;
}
類“MSFT 98”{
如果選項供應商類別標識符 =“MSFT 98”則匹配;
選項供應商類別標識符“MSFT 98”;
選項供應商封裝選項0a:07:49:6e:67:6d:61:72:00:56:65:72:68:65:69;6a:00:77:77:77:2e:69: 6e:67:6d:61:72:76:75:72:68:65:69:6a:2e:63:6f:6d:00;
}
類“MSFT”{
如果選項供應商類別標識符=“MSFT”則匹配;
選項供應商類別標識符“MSFT;
選項供應商封裝選項0a:07:49:6e:67:6d:61:72:00:56:65:72:68:65:69;6a:00:77:77:77:2e:69: 6e:67:6d:61:72:76:75:72:68:65:69:6a:2e:63:6f:6d:00;
}
阿爾卡特朗訊 VitalQIP
由於供應商特定信息被認爲是不透明的數據類型,因此用戶必須以原始格式定義選項數據。對於 VitalQIP 設備,可以通過兩種方式提供供應商特定信息:
1. DHCP 選項模板 –可以在 DHCP 選項模板 - 修改頁面上提供供應商特定信息。在“活動選項”區域中,選擇“供應商特定信息”,然後在“值”字段中輸入信息。爲了將控制器 IP 地址包含在 DHCP 選項 43 消息中,請將信息作爲單個十六進制值輸入到 QIP 中的 DHCP 選項模板:[ip hex]。要使用 DHCP 選項 43 發送多個 IP 地址,請將信息作爲單個十六進制值輸入到 QIP 中的 DHCP 選項模板:[ip hex ip hex] 而不是 [ip hex]、[ip hex]。在這種情況下,中間的逗號會導致 DHCP 解析從 QIP 傳遞的字符串時出現問題。來源:cisco.com
2. 用戶退出腳本– 在供應商特定的 DHCP 選項模板中設置佔位符,例如 [VENDOR-SPECIFIC-OPT1],它通過用戶退出腳本 ( qipdhcpuserexit )被值替換。用戶出口腳本讀取託管文件(可通過DNS > 託管文件訪問),其中包含 [塊引號] 中的十六進制值。例如:
[供應商特定-OPT1]=[0a07496e676d617200566572686569;6a007777772e696e676d61727675726865696a2e636f6d00]
創建字符串
閱讀本文後,您現在瞭解了供應商特定的 DHCP 選項如何工作以及如何爲非 Microsoft DHCP 服務器配置它們。我可以想象您不想手動創建選項字符串(我也不想),因此創建了一個小型 .NET 應用程序來爲您執行此操作。
用法很簡單:只需添加選項,指定(或不指定)分隔符,然後單擊“生成”。
4.0 ice cream sandwich - How do I change my "Vendor Class ID"? - Android Enthusiasts Stack Exchange
[dhcp client] Tuning vendor-class-identifier - dhcp option 60 | Ubiquiti Community