在大型企业网络中,一般会有大量的主机等终端设备。每个终端都需要配置IP地址等网络参数才能接入网络。在小型网络中,终端数量很少,可以手动配置IP地址。但是在大中型网络中,终端数量很多,手动配置IP地址工作量大,而且配置时容易导致IP地址冲突等错误。
DHCP可以为网络终端动态分配IP地址,解决了手工配置IP地址时的各种问题。
报文类型 | 含义 |
---|---|
DHCP DISCOVER | 客户端用来寻找DHCP服务器。 |
DHCP OFFER | DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。 |
DHCP REQUEST | 客户端请求配置确认,或者续借租期。 |
DHCP ACK | 服务器对REQUEST报文的确认响应。 |
DHCP NAK | 服务器对REQUEST报文的拒绝响应。 |
DHCP RELEASE | 客户端要释放地址时用来通知服务器。 |
DHCP协议主要协议报文有8种:
发送
报文时采用68端口号
,DHCP服务器向DHCP客户端发送报文时采用67端口号
。DHCP的报文格式:
Hops:表示当前的DHCP报文经过的DHCP中继的数目
。该字段由客户端或服务器设置为0,每经过一个DHCP中继时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP中继数目。服务器和客户端之间的DHCP中继数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃。
flags:0:客户端请求服务器以单播形式
发送响应报文
1:客户端请求服务器以广播形式
发送响应报文
Giaddr: 表示第一个DHCP中继的IP地址
。若在到达DHCP服务器前经过了多个DHCP中继,该字段作为客户端所在的网段的标记,填充了第一个DHCP中继的IP地址后不会再变更。
Options字段的格式:
中继代理信息选项(Option82)
Option 141表示为DHCP客户端分配的FTP/SFTP用户名。
Option 142表示为DHCP客户端分配的FTP/SFTP用户密码。
为了获取IP地址等配置信息,DHCP客户端需要和DHCP服务器进行报文交互。
1、 首先,DHCP客户端发送DHCP发现报文来发现DHCP服务器。为了学习到DHCP服务器的IP地址,DHCP客户端以广播方式发送DHCP DISCOVER报文(目的IP地址为255.255.255.255)给同一网段内的所有设备(包括DHCP服务器或中继)。
DHCP DISCOVER报文中携带了客户端的MAC地址(chaddr字段)、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。
2、DHCP服务器会选取一个未分配的IP地址,向DHCP客户端发送DHCP提供报文DHCP OFFER。此报文中包含分配给客户端的IP地址和其他配置信息。如果存在多个DHCP服务器,每个DHCP服务器都会响应。
3、如果有多个DHCP服务器向DHCP客户端发送DHCP提供报文,DHCP客户端将会选择收到的第一个DHCP提供报文,然后发送DHCP请求报文,报文中包含请求的IP地址。
4、收到DHCP请求报文后,提供该IP地址的DHCP服务器会向DHCP客户端发送一个DHCP确认报文,包含提供的IP地址和其他配置信息。
5、DHCP客户端收到DHCP确认报文后,会发送免费ARP报文,检查网络中是否有其他主机使用分配的IP地址。如果指定时间内没有收到ARP应答,DHCP客户端会使用这个IP地址。如果有主机使用该IP地址,DHCP客户端会向DHCP服务器发送DHCP拒绝报文,通知服务器该IP地址已被占用。然后DHCP客户端会向服务器重新申请一个IP地址。
DHCP的租约过程,有租期的。windows的租期是8天,不同设备租期不一样。
IP租约期限到达50%时,DHCP客户端会请求更新IP地址租约。
申请到IP地址后,DHCP客户端中会保存三个定时器
,分别用来控制租期更新,租期重绑定和租期失效。DHCP服务器为DHCP客户端分配IP地址时会指定三个定时器的值。如果DHCP服务器没有指定定时器的值,DHCP客户端会使用缺省值,缺省租期为1天
。
默认情况下,还剩下50%的租期时,DHCP客户端开始租约更新过程,DHCP客户端向分配IP地址的服务器发送DHCP请求报文来申请延长IP地址的租期。DHCP服务器向客户端发送DHCP确认报文,给予DHCP客户端一个新的租期。
DHCP客户端在租约期限到达87.5%时,还没收到服务器响应,会申请重绑定IP。
DHCP客户端发送DHCP请求报文续租时,如果DHCP客户端没有收到DHCP服务器的DHCP应答报文。默认情况下,重绑定定时器在租期剩余12.5%的时候超时。
超时后,DHCP客户端会认为原DHCP服务器不可用,开始重新发送DHCP请求报文。网络上任何一台DHCP服务器都可以应答DHCP确认或DHCP非确认报文。
如果DHCP客户端在租期失效定时器超时前没有收到服务器的任何回应,DHCP客户端必须立刻停止使用现有IP地址,发送DHCP Release报文,并进入初始化状态。然后,DHCP客户端重新发送DHCP发现报文,申请IP地址。
DHCP服务器的地址池是用来定义分配给主机的IP地址范围,有两种形式。
接口地址池的优先级比全局地址池高
。配置了全局地址池后,如果又在接口上配置了地址池,客户端将会从接口地址池中获取IP地址。在X7系列交换机上,只能在VLANIF逻辑接口上配置接口地址池。
DHCP接口配置:
[Huawei]dhcp enable //启用DHCP
[Huawei]interface g0/0/0
[Huawei-GigabitEthernet0/0/0]dhcp select interface //选择DHCP接口地址池
[Huawei-GigabitEthernet0/0/0]dhcp server dns-list 8.8.8.8 //指定DNS服务器地址
排除10.1.1.2这个地址,不能给客户端使用
[Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 10.1.1.2
#DHCP的租期是3天,默认是一天
[Huawei-GigabitEthernet0/0/0]dhcp server lease day 3
配置实例:
[Huawei]sysname DHCP
[DHCP]dhcp enable
[DHCP]int g0/0/0
[DHCP-GigabitEthernet0/0/0]ip add 192.168.1.1 255.255.255.0
[DHCP-GigabitEthernet0/0/0]dhcp select int //选择DHCP接口地址池
[DHCP-GigabitEthernet0/0/0]dhcp server dns-list 4.4.4.4
[DHCP-GigabitEthernet0/0/0]dhcp server excluded-ip-add 192.168.1.2 192.168.1.10 //把1.2到1.10排除
[DHCP-GigabitEthernet0/0/0]dhcp server lease day 5
[DHCP-GigabitEthernet0/0/0]dis this
interface GigabitEthernet0/0/0ip address 192.168.1.1 255.255.255.0 dhcp select interfacedhcp server excluded-ip-address 192.168.1.2 192.168.1.10 dhcp server lease day 5 hour 0 minute 0 dhcp server dns-list 4.4.4.4
google的DNS:4.4.4.4&8.8.8.8
阿里的公共DNS:223.5.5.5&223.6.6.6
PC端:
PC>ipconfig
Link local IPv6 address...........: fe80::5689:98ff:fe8c:d6a
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 192.168.1.254
Subnet mask.......................: 255.255.255.0
Gateway...........................: 192.168.1.1
Physical address..................: 54-89-98-8C-0D-6A
DNS server........................: 4.4.4.4
dis ip pool
Pool-name : GigabitEthernet0/0/0Pool-No : 0Position : Interface Status : UnlockedGateway-0 : 192.168.1.1 Mask : 255.255.255.0VPN instance : --IP address StatisticTotal :253 //地址池一共有253个地址Used 使用的:1 Idle 空的:243
Expired :0 Conflict :0 排除的地址 Disable :9
[Huawei]sysname DHCP
#开启DHCP
[DHCP]dhcp enable
[DHCP]ip pool R1 //创建R1的地址池
[DHCP-ip-pool-R1]net 192.168.2.0 mask 24 //网段是多少?
[DHCP-ip-pool-R1]gateway-list 192.168.2.1 //网关
[DHCP-ip-pool-R1]dns-list 8.8.8.8 4.4.4.4 //主DNS地址和副DNS地址
#排除的网段
[DHCP-ip-pool-R1]excluded-ip-address 192.168.2.200 192.168.2.210
[DHCP-ip-pool-R1]lease day 10 //租期
[DHCP]int g0/0/0 //在接口上启用
[DHCP-GigabitEthernet0/0/0]ip add 192.168.2.1 24
[DHCP-GigabitEthernet0/0/0]dhcp select global
PC>ipconfig
[DHCP]dis ip pool -------------------------------------------------------------------Pool-name : R1 地址池名称Pool-No : 0Position : Local Status : UnlockedGateway-0 : 192.168.2.1 Mask : 255.255.255.0IP address StatisticTotal :253 总共地址Used使用地址 :1 空闲地址 Idle :241
Expired :0 Conflict :0 排除的地址Disable :11
DHCP Relay组网场景如下图:把用户的上线请求报文转发给DHCP Server
为每个网段安装一台DHCP服务器,但这种方式的弊端是:资源浪费与不利于管理;
当DHCP服务器与客户端不在同一网络内,这时候客户端的所发的广播包不能被服务器端口接收,这时我们采用中继代理,让收到客户端收到的广播转换为到服务器的单播包,转送给DHCP服务器。
DHCP服务器收到DHCP DISCOVER,回应DHCP OFFER广播包,中继代理将广播包转换成单播包
传送给客户端。
DHCP客户端利用DHCP中继代理来从DHCP客户端那里获取IP地址等配置参数时,DHCP中继代理必须与DHCP客户端位于同一个二层广播域,但DHCP Server可以与DHCP Relay位于同一个二层广播域,也可以与DHCP Relay位于不同的二层广播域。DHCP Client与DHCP Relay之间是以广播方式交换DHCP消息的,但DHCP Relay与DHCP Server之间是以单播方式交换DHCP消息的(这就意味着,DHCP Relay必须事先知道DHCP Server的IP地址)。
第一步:发现阶段
DHCP中继接收到DHCP客户端广播发送的DHCP DISCOVER报文后,进行如下处理:
1.检查DHCP报文中的hops字段,如果大于16,则丢弃DHCP报文;否则,将hops字段加1(表明经过一次DHCP中继),并继续下面的操作。
2.检查DHCP报文中的giaddr字段。如果是0,将giaddr字段设置为接收DHCP DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。
3.将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
如果DHCP客户端与DHCP服务器之间存在多个DHCP中继,后面的中继接收到DHCP DISCOVER报文的处理流程同前面所述。
第二步:提供阶段
DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中giaddr字段为同一网段的地址池,并为客户端分配IP地址等参数,然后向giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。
DHCP中继收到DHCP OFFER报文后,会进行如下处理:
1.检查报文中的giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。
2.DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端。
第三步:选择阶段
中继接收到来自客户端的DHCP REQUEST报文的处理过程同“第三步:选择阶段”。
第四步:确认阶段
中继接收到来自服务器的DHCP ACK报文的处理过程同“第四步:确认阶段”。
DHCP Relay配置实现:
配置DHCP-Server:
(以基于全局地址池分配地址为例)
dhcp enable //使能DHCP
ip pool DHCP-relay //地址池DHCP-relaygateway-list 192.168.1.1 //网关192.168.1.1network 192.168.1.0 mask 24 //network表明了DHCP服务中的Client可用地址池dns-list 10.1.1.1 //DNS
interface g0/0/0ip address 10.1.1.1 24 dhcp select global //全局应用
ip route-static 192.168.1.0 24 10.1.1.2
配置DHCP中继(GW):
dhcp server group DHCP //创建一个DHCP服务器组
dhcp-server 10.1.1.1 //DHCP服务器地址
dhcp enable
interface g0/0/1ip address 192.168.1.1 24dhcp select relay //使能DHCP中继功能dhcp relay server-select DHCP //配置DHCP中继所对应的DHCP服务器组。
interface g0/0/0ip address 10.1.1.2 24
配置案例:
基本配置
[Huawei]sysname SW1
[SW1]undo info en
[SW1]vlan batch 2 3
[SW1-GigabitEthernet0/0/2]port link-ty access
[SW1-GigabitEthernet0/0/2]port default vlan 2
[SW1-GigabitEthernet0/0/2]int g0/0/3
[SW1-GigabitEthernet0/0/3]port link-ty access
[SW1-GigabitEthernet0/0/3]port default vlan 3
[SW1-GigabitEthernet0/0/3]dis vlan
2 common UT:GE0/0/2(U)
3 common UT:GE0/0/3(U)
配置网关:
[SW1]int vlanif 1
[SW1-Vlanif1]ip add 12.1.1.1 24
[SW1-Vlanif1]int vlanif 2
[SW1-Vlanif2]ip add 192.168.2.1 24 //Vlan 2的网关
[SW1-Vlanif2]int vlanif 3
[SW1-Vlanif3]ip add 192.168.3.1 24 // Vlan 3的网关
[SW1]dis ip rout
Routing Tables: PublicDestinations : 8 Routes : 8
Destination Proto Pre Cost Flags NextHop Interface12.1.1.0/24 Direct 0 0 D 12.1.1.1 Vlanif1
12.1.1.1/32 Direct 0 0 D 127.0.0.1 Vlanif1
127.0.0.0/8 Direct 0 0 D 127.0.0.1 lo 0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 lo 0
192.168.2.0/24 Direct 0 0 D 192.168.2.1 Vlanif2
192.168.2.1/32 Direct 0 0 D 127.0.0.1 Vlanif2
192.168.3.0/24 Direct 0 0 D 192.168.3.1 Vlanif3
192.168.3.1/32 Direct 0 0 D 127.0.0.1 Vlanif3
配置OSPF路由
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]ip add 12.1.1.2 24
[AR1]ospf 100
[AR1-ospf-100]area 0
[AR1-ospf-100-area-0.0.0.0]net 12.1.1.0 0.0.0.255
[AR1-ospf-100-area-0.0.0.0]net 192.168.2.0 0.0.0.255
[AR1-ospf-100-area-0.0.0.0]net 192.168.3.0 0.0.0.255[SW1]ospf 100
[SW1-ospf-100]area 0
[SW1-ospf-100-area-0.0.0.0]net 12.1.1.0 0.0.0.255
[SW1-ospf-100-area-0.0.0.0]net 192.168.2.0 0.0.0.255
[SW1-ospf-100-area-0.0.0.0]net 192.168.3.0 0.0.0.255
[AR1-ospf-100]dis ospf peer
OSPF Process 100 with Router ID 12.1.1.2Neighbors Area 0.0.0.0 interface 12.1.1.2(GigabitEthernet0/0/0)'s neighborsRouter ID: 12.1.1.1 Address: 12.1.1.1 State: Full Mode:Nbr is Slave Priority: 1DR: 12.1.1.2 BDR: 12.1.1.1 MTU: 0 Dead timer due in 34 sec Retrans timer interval: 5 Neighbor is up for 00:09:55
配置DHCP服务器全局配置
[AR1]ip pool vlan2 // vlan2地址池
[AR1-ip-pool-vlan2]net 192.168.2.0 mask 255.255.255.0
[AR1-ip-pool-vlan2]gateway-list 192.168.2.1 //网关
[AR1-ip-pool-vlan2]dns-list 4.4.4.4 //DNS
[AR1-ip-pool-vlan2]lease day 2 //租期
[AR1-ip-pool-vlan2]q
[AR1]ip pool vlan3
Info: It's successful to create an IP address pool.
[AR1-ip-pool-vlan3]net 192.168.3.0 mask 255.255.255.0
[AR1-ip-pool-vlan3]gateway-list 192.168.3.1
[AR1-ip-pool-vlan3]dns-list 4.4.4.4
[AR1-ip-pool-vlan3]lease day 3
[AR1]dhcp en
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]dhcp select global
配置中继代理
[SW1]dhcp enable
[SW1]int vlanif 2
[SW1-Vlanif2]dhcp select relay //启用中继代理
[SW1-Vlanif2]dhcp relay server-ip 12.1.1.2 //DHCP地址
[SW1-Vlanif2]int vlanif 3
[SW1-Vlanif3]dhcp select relay //启用中继代理
[SW1-Vlanif3]dhcp relay server-ip 12.1.1.2 //DHCP地址
PC>ipconfig
Link local IPv6 address...........: fe80::5689:98ff:fe2b:33fc
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 192.168.2.254
Subnet mask.......................: 255.255.255.0
Gateway...........................: 192.168.2.1
Physical address..................: 54-89-98-2B-33-FC
DNS server........................: 4.4.4.4
查看所有接口上DHCP中继的配置信息
[SW1]display dhcp relay configuration
DHCP relay agent running information of interface vlan2 : Server IP address [00] : 12.1.1.2 Gateway address in use : 192.168.2.1 Anycast gateway re-route: disable
查看接口地址池的分配情况
[SW1]display ip pool interface vlanif2
Pool-name : vlan2Pool-No : 0Lease : 2 Days 0 Hours 0 MinutesDNS-server0 : 4.4.4.4NBNS-server0 : -Netbios-type : -Position : InterfaceStatus : UnlockedGateway-0 : 192.168.2.1Network : 192.168.2.0Mask : 255.255.255.0
DHCP在设计上未充分考虑到安全因素,从而留下了许多安全漏洞,使得DHCP很容易受到攻击。实际网络中,针对DHCP的攻击行为主要有以下三种:
攻击原理:攻击者持续大量地向DHCP Server申请IP地址,直到耗尽DHCP Server地址池中的IP地址,导致DHCP Server不能给正常的用户进行分配。
漏洞分析:DHCP Server向申请者分配IP地址时,无法区分正常的申请者与恶意的申请者。
配置防止DHCP报文泛洪攻击。
DHCP饿死攻击是攻击者通过持续大量地向DHCP Server申请IP地址来实现的,其目的是耗尽DHCP Server地址池中的IP地址,导致DHCP Server没有IP地址分配给正常的用户。DHCP消息中有一个名叫CHADDR(Client Hardware Address)的字段,该字段是由DHCP客户端填写的,表示的是客户端的硬件地址(也就是客户端的MAC地址)。DHCP Server是针对CHADDR来分配IP地址的,对于不同的CHADDR,DHCP Server会分配不同的IP地址;DHCP Server无法区分什么样的CHADDR是合法的,什么样的CHADDR是非法的。利用这个漏洞,攻击者每申请一个IP地址时,就在DHCP消息的CHADDR字段中填写一个不同的值,以此来冒充是不同的用户在申请IP地址。
攻击原理:攻击者仿冒DHCP Server,向客户端分配错误的IP地址及提供错误的网关地址等参数,导致客户端无法正常访问网络。
漏洞分析:DHCP客户端接收到来自DHCP Server的DHCP消息后,无法区分这些DHCP消息是来自仿冒的DHCP Server,还是来自合法的DHCP Server。
仿冒DHCP Server和合法的DHCP Server都能够收到该DHCP Discover消息,并且都会回应DHCP Offer消息。如果客户端最先收到的DHCP Offer消息是来自仿冒DHCP Server,那么客户端就会继续向仿冒DHCP Server(而不是合法的DHCP Server)请求获得IP地址等参数,而仿冒DHCP Server就会乘机向客户端分配错误的IP地址及提供错误的网关地址等参数。
攻击原理:攻击者利用ARP机制,让PC-A学习到IP-S与MAC-B的映射关系,又让Server学习到IP-A与MAC-B的映射关系。如此一来,PC-A与Server之间交互的IP报文都会经过攻击者中转。
漏洞分析:从本质上讲,中间人攻击是一种Spoofing IP/MAC攻击,中间人利用了虚假的IP地址与MAC地址之间的映射关系来同时欺骗DHCP的客户端和服务器。
为阻止饿死攻击,DHCP Snooping技术支持在端口下对DHCP Request报文的源MAC地址与CHADDR(客户端的MAC地址)进行一致性检查:如果二者相同,则转发报文;如果二者不相同,则丢弃。如果要在某端口下实施源MAC地址与CHADDR的一致性检查,可以在该端口下使用命令dhcp snooping check dhcp-chaddr enable。
配置:
int g0/0/0dhcp snooping check dhcp-chaddr enable
还可能存在这样一种饿死攻击,就是攻击者不断同时变换MAC地址和CHADDR,并且每一次变换时,都让CHADDR与MAC地址相同,如此一来,便可以躲过上述源MAC地址与CHADDR的一致性检查!
配置:
Int g0/0/0dhcp snooping trusted
int g0/0/1undo dhcp snooping trusted
运行了DHCP Snooping的交换机会“侦听(Snooping)”往来于用户与DHCP Server之间的DHCP消息,并从中收集用户的MAC地址(这里的MAC地址是指DHCP消息中CHADDR字段的值)、用户的IP地址(这里的IP地址是指DHCP Server分配给相应CHADDR的IP地址)等信息,这些信息会集中存放在一个数据库中,该数据库也被称为DHCP Snooping绑定表。运行了DHCP Snooping的交换机会建立并动态维护DHCP Snooping绑定表,绑定表中除了包含了用户的MAC地址、用户的IP地址外,还包括IP地址租用期、VLAN-ID等等信息。
如图所示,假设DHCP Server给PC-A分配了IP地址IP-A,给PC-B分配了IP地址IP-B,那么IP-A与MAC-A就形成了绑定关系,IP-B与MAC-B也形成了绑定关系,这种绑定关系都存放于DHCP Snooping绑定表中。攻击者为了让Server学习到IP-A与MAC-B的映射关系,会发送ARP请求报文(将ARP报文中的源IP地址填为IP-A,源MAC地址填为MAC-B)。交换机接收到ARP请求报文后,会检查该ARP请求报文中的源IP地址和源MAC地址,发现该IP/MAC(IP-A/MAC-B)映射关系不能匹配DHCP Snooping绑定表中的条目,于是会丢弃该ARP请求报文,这样就有效地防止了Spoofing IP/MAC攻击。
如果需要使用上面所描述的防止Spoofing IP/MAC攻击(进而防止中间人)的方法,就必须在交换机的系统视图下执行配置命令arp dhcp-snooping-detect enable。
配置:
sys
[SW1]arp dhcp-snooping-detect enable
关键配置命令:在交换机的端口视图下或VLAN视图下执行配置命令ip source check user-bind enable。
配置
[SW1]int g0/0/8
ip source check user-bind enable
由于Option82记录的是客户端的位置信息,建议在靠近用户侧的设备上配置。如果DHCP中继下面有DHCP Snooping设备,建议在DHCP Snooping设备上配置Option82。