我管理一个小企业的网络,它有一个IPCop防火墙盒,向网络(和其他各种服务)提供DHCP服务。IPCop中的DHCP服务器似乎是dhcpd,IPCop为编辑配置文件提供了一个基于web的前端。
我希望使用供应商封装选项选项将DHCP选项66和67的特定值发送到特定的供应商类别标识符。其目的是自动配置一些支持DHCP选项66/67和43/60的VoIP手机。
我已经找到了66个tftp服务器名和67个引导文件名来自动配置手机。当然,这些选项是全局的,并发送给所有DHCP客户端。我正在试验供应商级标识符和供应商封装选项DHCP选项,以将自动配置信息仅发送到手机。我意识到,对于一个小企业网络来说,这可能是过头了,但这一切都是为了扩大我的知识。
所以我开始阅读一些信息,我只是不知道如何在供应商封装的选项字符串中编码选项66/67。
这是相关的RFC..。https://www.rfc-editor.org/rfc/rfc2132#section-8节8.4,以下是dhcpd http://www.daemon-systems.org/man/dhcp-options.5.html在“供应商封装选项”下的手册页
这些文档似乎表明这些选项是用HEX格式编码的,但是看看供应商封装的选项的手册页面示例.
The value of this option can be set in one of two ways.
The first way is to simply specify the data directly,
using a text string or a colon-separated list of hexadecimal values.
For example:
option vendor-encapsulated-options
2:4:AC:11:41:1:
3:12:73:75:6e:64:68:63:70:2d:73:65:72:76:65:72:31:37:2d:31:
4:12:2f:65:78:70:6f:72:74:2f:72:6f:6f:74:2f:69:38:36:70:63;
当我尝试解码从HEX到ASCII的那批代码时,我得到以下信息:
????A?????????sundhcp-server17-1????????/export/root/i86pc
因此,我确信我没有正确地理解格式/编码。
这是IPCop的dhcpd.conf的片段
subnet 192.168.1.0 netmask 255.255.255.0 #GREEN
{
range 192.168.1.30 192.168.1.200;
option subnet-mask 255.255.255.0;
option domain-name "domain.com";
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
option ntp-servers 192.168.1.1;
option netbios-name-servers 192.168.1.3;
default-lease-time 43200;
max-lease-time 172800;
option vendor-encapsulated-options "hello";
option vendor-class-identifier "snom320";
option vendor-class-identifier "snom821";
option bootfile-name "voipsettings/firstboot.xml";
option tftp-server-name "http://username:password@intranet.domain.com";
} #GREEN
我已经根据VoIP电话(Snom)在DHCP请求中提交的值设置了供应商类标识符。引导文件名和tftp-服务器名称是我希望在供应商封装的选项中编码的选项(66/67)。
斯诺姆在这里有一个关于他们维基的向导..。
http://wiki.snom.com/Networking/DHCP/Options#Auto_Provisioning_Options
(对不起,我的名声太低了,不能在一个问题上发布>2个链接)
这个wiki似乎意味着我需要将供应商类标识符编码为“n个octets字符串”。
此外,在wiki文章中给出的供应商封装选项的示例在从HEX转换到ASCII时也会返回胡言乱语。所以有些关键的事情我还不明白。
有人能告诉我如何正确地格式化/编码这些DHCP选项吗?
发布于 2011-10-04 21:37:51
DHCP选项43是一个有点奇怪的野兽。供应商可以任意处理它-一些人期望选项号与DHCP选项号相匹配,另一些人则不这样认为。
基本结构是选项ID的1字节,选项数据(n)的长度为1字节,然后是实际选项数据的n字节,以及清洗和重复。
让我们以dhcp选项中的例子为例。他们把换行符插在战略位置上,以便于阅读。实际上,他们配置的设置就是:
02:04:AC:11:41:01:03:12:73:75:6e:64:68:63:70:2d:73:65:72:76:65:72:31:37:2d:31:04:12:2f:65:78:70:6f:72:74:2f:72:6f:6f:74:2f:69:38:36:70:63;
除非你知道你在找什么,否则就很难读懂。让我们把这些部分分解一下:
0x02
。这表明这个块是选项2的配置,如何解释取决于供应商。0x04
。这意味着选项2的数据将占用接下来的4个字节。0xAC114101
。这四个字节是实际数据。正如您所看到的,当您试图解码它时,它是不可读的数据。0x03
。整个链再次启动,这表明下面的配置是选项3的配置。另一个例子,来自snom页面:
42:0c:68:74:74:70:3a:2f:2f:74:65:73:74:00:43:12:73:6e:6f:6d:2f:73:65:74:74:69:6e:67:73:2e:70:68:70:00;
0x42
。42的十六进制是66,选择代码66。0x0c
。12字节的长度。0x687474703a2f2f7465737400
。这是http://test
,末尾有一个空字节(0x00
)。不知道他们为什么会在那里。0x43
。备选方案67.0x12
。18字节长0x736e6f6d2f73657474696e67732e70687000
.snom/settings.php
。同样,空字节在末尾。因此,假设您需要构造一个选项43,其中http://phone.example.com
作为选项66,phonesettings.txt
作为选项67。
0x42
http://phone.example.com
上的长度为24个字节,所以0x18
0x687474703a2f2f70686f6e652e6578616d706c652e636f6d
0x43
phonesettings.txt
上的字节28,长度为17字节,所以0x11
0x70686f6e6573657474696e67732e747874
因此,一个完整的配置字符串:
42:18:68:74:74:70:3a:2f:2f:70:68:6f:6e:65:2e:65:78:61:6d:70:6c:65:2e:63:6f:6d:43:11:70:68:6f:6e:65:73:65:74:74:69:6e:67:73:2e:74:78:74;
如果这不起作用,请尝试将空字节添加到数据字符串的末尾(并相应地增加长度字段),就像它们的示例一样--它们可能希望在每个选项的末尾使用空字节,也可能希望每个选项的长度为偶数字节。这是选项43的缺点--他们可以做任何他们想做的事!
发布于 2014-03-14 05:50:42
这无疑是配置选项43的最快捷的方式。相反,您应该使用ISC的“供应商选项空间”语法,该语法允许您对配置的内容进行人工读取,并避免错误:
option space db;
option db.db-server code 1 = ip-address;
option db.loginid code 2 = text;
option db.db-name code 3 = text;
让·伊夫·比西奥
发布于 2016-07-22 10:01:30
记住要使用本地封装:
option space cisco;
option cisco.wlc code 241 = array of ip-address;
option local-encapsulation code 43 = encapsulate cisco;
option cisco.wlc 10.7.3.6, 10.7.3.2;
https://serverfault.com/questions/318292
复制相似问题