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源端的信息。

Linux上搭建支持OPTION 82功能的 DHCP服务器_第1张图片

这些子选项在报文中的格式是这样的

代码    长度  代理信息字段

+------+------+------+------+------+------+--...-+------+

|   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可以查看日志信息

Linux上搭建支持OPTION 82功能的 DHCP服务器_第2张图片

配置tw自研交换机的option82功能

首先开启全局和端口的dhcp snooping功能

Linux上搭建支持OPTION 82功能的 DHCP服务器_第3张图片

设置连接dhcp服务器的端口为信任端口

Linux上搭建支持OPTION 82功能的 DHCP服务器_第4张图片

启用端口的option82功能

Linux上搭建支持OPTION 82功能的 DHCP服务器_第5张图片

pc是否能根据不同的option82信息获取到不同的地址

pc连接交换机的端口3,抓到的完整报文如下

Linux上搭建支持OPTION 82功能的 DHCP服务器_第6张图片

pc连接到端口1获到192.168.1.1网段的地址。

Linux上搭建支持OPTION 82功能的 DHCP服务器_第7张图片

pc连接交换机的端口1,抓到的完整报文如下

Linux上搭建支持OPTION 82功能的 DHCP服务器_第8张图片

pc连接到端口1获到192.168.2.1网段的地址。

Linux上搭建支持OPTION 82功能的 DHCP服务器_第9张图片

由此可见,不同端口可以获取到同一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。

Linux上搭建支持OPTION 82功能的 DHCP服务器_第10张图片

option82最基本的功能就介绍到这儿了。

你可能感兴趣的:(Linux上搭建支持OPTION 82功能的 DHCP服务器)