Linux上搭建支持OPTION 82功能的 DHCP服务器
新年伊始,我们要尽快调整好心态投入到工作当中去。
DHCP Snooping是预防dhcp攻击的一种手段,通过设置信任端口和非信任端口让非法的dhcp服务器无法攻击客户端,同时它还提供对dhcp报文的检查,如dhcp报文中的chaddr字段和以太帧头中的源mac是否匹配。
DHCP Snooping中还涉及到一个重要的概念是OPTION 82,通过在非信任端口上启用OPTION 82功能,让客户端发出的dhcp报文携带option82字段,然后支持dhcp Snooping option82功能的服务器再根据客户端携带的option82信息分配地址。tw自研交换机的option82支持两个子选项(1)Agent Circuit ID和(2)Agent RemoteID。
sub-option 1,为代理电路id(即circuitid)子项。子选项通常在dhcp中继设备上配置,定义了在传输报文的时候要携带dhcp客户端所连接交换机端口的vlan-id及二层端口号。通常sub-option 1与sub-option 2子选项要共同使用来标识dhcp源端的信息。
sub-option 2,为代理远程id(即remoteid)子项。该子选项也通常在dhcp中继设备上配置,定义了在传输报文的时候要携带中继设备的mac地址信息。通常与sub-option1子选项要共同使用来标识dhcp源端的信息。
这些子选项在报文中的格式是这样的
代码 长度 代理信息字段
+------+------+------+------+------+------+--...-+------+
| 0 | N | s1 | s2 | s3 | s4 |.......| sN |
+------+------+------+------+------+------+--...-+------+
DHCP OPTION82功能的测试
1、搭建支持option82功能的DHCP服务器
2、配置tw自研交换机的option82功能
3、pc是否能根据不同的option82信息获取到不同的地址
搭建支持option82功能的DHCP服务器
这里我用的是centos系统下面yum命令安装的dhcp服务器,找到/etc/dhcp/dhcpd.conf文件,进行编辑。
普通的dhcpd.conf文件
ddns-update-style interim; #表示dhcp服务器和dns服务器的动态信息更新模式
ignore client-updates; #忽略客户端更新
subnet 192.168.1.0
netmask 255.255.255.0 { #意思是我所分配的ip地址所在的网段为192.168.145.0 子网掩码为255.255.255.0
range 192.168.1.200 192.168.1.210; #租用IP地址的范围
option domain-name-servers ns.example.org;
option domain-name "example.org";
option routers 192.168.1.1; #路由器地址,这里是当前 dhcp 服务器的IP地址
option subnet-mask 255.255.255.0; #子网掩码
default-lease-time 600; #默认租约时间
max-lease-time 7200; #最大租约时间
}
带有option82功能的dhcpd.conf文件
ddns-update-style interim; #表示dhcp服务器和dns服务器的动态信息更新模式 ignore client-updates; #忽略客户端更新
class "port1" { match if option agent.circuit-id=00:04:00:01:00:03; }
class "port2" { match if option agent.circuit-id=00:04:00:01:00:01; }
subnet 192.168.1.0 netmask 255.255.255.0 {
pool {
allow members of "port1";
default-lease-time 600;
max-lease-time 7200;
range 192.168.1.3 192.168.1.100;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8; } }
subnet 192.168.2.0 netmask 255.255.255.0 {
pool {
allow members of "port2";
default-lease-time 600;
max-lease-time 7200;
range 192.168.2.101 192.168.2.199;
option routers 192.168.2.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8; } }
选择第二个文件,因为它支持根据option82的circuit id去分配不同的IP地址。
linux系统下面启用dhcp服务器的命令为service dhcpd restart,通过cat /var/log/messages可以查看日志信息
配置tw自研交换机的option82功能
首先开启全局和端口的dhcp snooping功能
设置连接dhcp服务器的端口为信任端口
启用端口的option82功能
pc是否能根据不同的option82信息获取到不同的地址
pc连接交换机的端口3,抓到的完整报文如下
pc连接到端口1获到192.168.1.1网段的地址。
pc连接交换机的端口1,抓到的完整报文如下
pc连接到端口1获到192.168.2.1网段的地址。
由此可见,不同端口可以获取到同一DHCP服务器不同网段的地址。
pc连接端口1携带的circuit id为000400010001,dhcpd.conf文件中
class "port2" {match if option agent.circuit-id=00:04:00:01:00:01;}
匹配到的是"port2",该网段为192.168.2.1,地址池为range 192.168.2.101 192.168.2.199
pc连接端口3携带的circuit id为000400010003,dhcpd.conf文件中
class "port1" {match if option agent.circuit-id=00:04:00:01:00:03;}
匹配到的是"port1",该网段为192.168.1.1,地址池为range 192.168.1.3 192.168.1.100
这是dhcp snooping option82的一个应用场景,通过编辑dhcp.conf文件来获取不同网段的地址。其中还需要注意一个问题,因为dhcp服务器只有一张网卡,要想同时分配两个网段的ip地址也需要网卡支持两个网段的ip,所以我们给网卡配置了一个静态ip后有配了一个虚拟ip。
option82最基本的功能就介绍到这儿了。