DHCP特定供应商vci 选项的解释和揭秘
(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
[ubuntu] DHCP Scope 43 [Archive] - Ubuntu Forums
[ubuntu] what is the default vendor class identifier ?
DHCP Options 43, 55, and 60 and Other Customized Options
Linux 中的 dhcp 客户端如何发送 dhcp 选项 60 - 指定供应商 ID? - 服务器故障
LM 20.1 - Setting up DHCP client Option 60 (vendor-class-identifier) - Linux Mint Forums
网络 - 选项 60(供应商类别标识符)在 DHCPv4 中有何用途? - 服务器故障