DHCP Dynamic Host Configuration Protocol,是一种集中对主机进行 IP 地址动态管理配置的技术。
当网络规模不断扩大时,终端设备越来越多,需要上网的话就需要不断配置 IP 地址。手动配置虽然简单,但是加大了工作人员的工作量。
实现 IP 地址、子网掩码、网关、DNS 等参数的集中管理、自动分配,避免手工配置IP地址,提高工作效率,避免出错,且能快速适应网络的变化。
需要获取IP地址的设备,如:计算机、服务器、手机、IP电话等
负责为DHCP客户端分配IP地址等网络参数的设备
位于 DHCP 服务器和 DHCP 客户端之间,负责 他们俩之间的报文转发
什么时候需要用到 DHCP 中继?
当 DHCP 服务器和 DHCP 客户端不在相同网段时,需要使用 DHCP 中继。如果DHCP客户端和DHCP服务器不在同一个网段,DHCP服务器无法收到DHCP客户端发送的广播报文,此时,需要通过DHCP中继来转发DHCP报文

1.按照规划配置IP地址
2.开启路由器的DHCP功能
3.创建地址池
4.在池子里配置想要分配出去的网络参数
5.进入网关接口开启dhcp全局模式
6.客户端开启DHCP请求IP地址
system-view
sysname SEREVER
interface g0/0/0
ip address 192.168.1.254 24
quit
dhcp enable. //开启 dhcp 功能
ip pool wangduan1. //创建地址池,命名为wangduan1
gateway-list 192.168.1.254. //配置分配出去的网关
network 192.168.1.0 mask 24. //配置分配出去的网段和子网掩码
dns-list 8.8.8.8 //配置分配出去的 DNS
lease day 3 hour 20 minute 40 //修改租期为 3天 20 小时
//40 分钟
excluded-IP-address 192.168.1.67 192.168.1.250 //将这段范围内的IP 地址从池子里排除
quit
interface g0/0/0. //进入网关接口
dhcp select global. //开启 DHCP 的全局模式

1.按照规划配置IP地址
2.开启路由器的DHCP功能
3.进入网关接口开启dhcp接口模式
4.在接口模式下设置 DNS即可。
system-view
sysname SEREVER
dhcp enable //开启 dhcp 功能
interface g0/0/0 //进入网关接口
ip address 192.168.1.254 24 //给网关接口配置IP 地址
dhcp select interface //开启基于接口的 DHCP 功能
dhcp server dns-list 8.8.8.8 //配置分配出去的 DNS

DHCP 服务器
system-view
sysname SEREVER
interface g0/0/0
ip address 192.168.20.254 24
quit
dhcp enable. //开启 dhcp 功能
ip pool wangduan1. //创建地址池,命名为wangduan1
gateway-list 192.168.10.254. //配置分配出去的网关
network 192.168.10.0 mask 24. //配置分配出去的网段和子网掩码
dns-list 8.8.8.8 //配置分配出去的 DNS
quit
ip route-static 192.168.10.0 24 192.168.20.2. //写一条去往 20 网段的路由,方便发送报文
interface g0/0/0. //进入网关接口
dhcp select global. //开启 DHCP 的全局模式
DHCP 中继器命令:
system-view
sysname Relay
dhcp enable. //开启 dhcp 功能
interface g0/0/0
ip address 192.168.20.2 24
interface g0/0/1
ip address 192.168.10.254 24
dhcp select relay // 设置网关接口为中继模式
dhcp relay server-ip 192.168.20.254. //告诉他,服务器的真正地址是 20.254,帮我转发
quit

DHCP服务器配置
system-view
sysname server
dhcp enable
ip pool vlan10
gateway-list 192.168.10.254
network 192.168.10.0 mask 24
dns-list 8.8.8.8
quit
ip pool vlan20
gateway-list 192.168.20.254
network 192.168.20.0 mask 24
dns-list 6.6.6.6
quit
vlan batch 10 20
interface g0/0/1
port link-type trunk
port trunk allow-pass vlan all
q
interface g0/0/2
port link-type trunk
port trunk allow-pass vlan all
q
interface vlanif 10
ip address 192.168.10.254 24
dhcp select global
q
interface vlanif 20
ip address 192.168.20.254 24
dhcp select global
SW1 配置
system-view
vlan batch 10 20
interface g0/0/1
port link-type trunk
port trunk allow-pass vlan all
q
interface g0/0/3
port link-type access
port default vlan 10
q
interface g0/0/2
port link-type access
port default vlan 10
SW2 配置
system-view
vlan batch 10 20
interface g0/0/1
port link-type trunk
port trunk allow-pass vlan all
q
interface g0/0/3
port link-type access
port default vlan 20
q
interface g0/0/2
port link-type access
port default vlan 20
1.客户端以广播的方式,发送DHCP Discover报文,用于发现当前网络中所存在的 DHCP 服务器,请求 IP 地址。
2.服务器以单播的方式,发送 DHCP Offer 报文,offer 中包含了给你的网络参数(IP、网关、掩码、DNS 等)
3.客户端以广播的方式,发送 DHCP Request 报文,用于请求使用某个 offer 。
4.服务器以单播的方式,发送DHCP ACK报文,同意你使用该 offer

通过 DHCP 获取到的地址,默认使用时间只有 24H。过期后会被收回。
1)当IP 地址的租用时间达到 50% 的时候,客户端会以单播的方式,发送 dhcp request 请求报文,请求更新 IP 地址的租期
DHCP 服务器如果回复 ACK 确认报文,则代表租期更新成功,从 0开始。
2)如果 DHCP 一直没有回应,则当租期达到 87.5%的时候,客户端以广播的方式发送 request 报文,用于请求更新 IP 地址和租期,或寻找新的 DHCP 服务器。
DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文(源IP和目的IP都是自己的IP地址 )如果探测到这个IP地址绑定了别的MAC地址,就代表网络中有别的主机在使用这个IP地址,会产生冲突,此时客户端会发送Decline (拒绝报文) 告知服务器,让服务器重新分配IP地址。
<Server>reset ip pool name 1 //重置地址池 1,回收分发出去的 IP 地址
[server]display ip pool name 1 //查看名字为 1 的地址池的使用情况
display ip pool name 1 used. //查看池1 中已分发出去的 IP 地址

PC 端:
ipconfig /renew //重新通过 DHCP 获取 IP 地址
由于 DHCP 协议设计之初,没有加入任何的认证机制,所以在网络上随意添加一台 恶意的 DHCP 服务器,就可以为当前网络中的客户端分配 IP 地址(IP 地址可能是错误的),不仅会导致客户端无法上网,还会容易造成客户端的信息泄露。
因为DHCP客户端发送的DHCP Discover报文是以广播形式发送,无论是合法的DHCP 服务器,还是非法的DHCP Server都可以接收到DHCP Discover报文,如果此时非法的DHCP仿冒服务器,回应给DHCP 客户端,恶意的仿冒信息(如:错误的IP、错误的网关、错误的DNS),DHCP 客户端无法分辨这些信息,所以最终导致DHCP客户端无法上网和信息泄露
开启 DHCP snooping 的信任功能,确保客户端只能从合法的服务器获取 IP 地址。
DHCP Snooping 接口
信任接口
信任接口接收DHCP服务器回应的的 DHCP ACK、DHCP Offer,设备只会将DHCP客户端的请求报文通过信任接口发送给合法的DHCP服务器
非信任接口
非信任接口在接收到DHCP服务器响应的DHCP ACK、DHCP Offer报文后,会丢弃该报文 。
交换机配置:
dhcp enable //开启 dhcp 功能
dhcp snooping enable //系统视图下开启 dhcp snooping 功能
dhcp snooping trusted //进入连接合法服务器的接口,将该接口设置为信任接口
dhcp snooping enable //进入连接客户端的接口,开启dhcp snooping 功能

DHCP 饿死攻击也称 DHCP Server 服务拒绝攻击(拒绝服务攻击)
黑客机发送大量的恶意请求报文,不断的去请求 IP 地址,导致 DHCP 地址池资源耗尽,没有空闲的 IP 地址,所以无法为正常的主机分配地址。
饿死攻击如何实现?
DHCP 服务器仅根据 DHCP request 报文中的 CHADDR(主机源MAC 地址) 来分配 IP 地址,黑客采用某些工具(如 kali 下的dhcpstarv、yersinia 等),可以不断修改 request 中的 CHADDR 地址,从而实现不断请求地址

DHCP 饿死攻击如何防御?
开启 DHCP snooping 功能,检测数据帧中的 mac 地址和 request 中CHADDR 的 MAC地址是否一致,如果一致,则放行,不一致则丢弃

高端的黑客在发起DHCP饿死攻击的时候,不仅仅只修改DHCP报文中CHADDR(MAC地址),通常也会将帧头的源MAC地址和DHCP报文中的CHADDR(MAC地址)同时进行修改,每一个攻击报文中,两个MAC地址都是相同的,所以通过一致性检查,无法有效的防御此类攻击,所以,还需要其他手段进行辅助防御(如端口安全)

dhcp enable. //开启交换机的dhcp 功能
dhcp snooping enable. //开启 dhcp snooping 功能
port-group group-member g0/0/1 to g0/0/24. //进入所有接口(我们无法判断黑客机连接了那个接口)
dhcp snooping enable //开启接口的 dhcp snooping 功能
dhcp snooping check dhcp-chaddr enable. //开启 MAC 地址一致性检查