DHCP服务
DHCP的全称是动态主机配置协议,用来自动给客户机分配TCP/IP信息的网络协议。每个DHCP客户机都连接到中央位置的DHCP服务器,该服务包括IP地址、网关、DNS服务器信息的客户网络配置
UDP 67:客户端向服务器发送请求
UDP 68:服务器向客户端确认
1、DHCP租约请求(四部曲)
①IP租用请求(DISCOVER)
当DHCP客户机启动后,会向网络内广播一个DHCP请求信息,所有机器都会收到,但不是DHCP服务器的机器会把信息丢掉
发送端 | 内容 | 接收端 |
客户机IP:0.0.0.0 | 客户机MAC地址 | 广播:255.255.255.255 |
如果没有DHCP服务器响应DHCP客户端
- 有些Linux发行版将没有IP地址
- 客户端等待间隔:客户机等待1秒,每隔时间重发广播,若仍未收到,使用私有IP:169.254.0.0/16同时每隔五分钟试一次
- 有些Linux发行版本默认使用169.254.0.0/16的地址,但将会每5分钟向本地址网络广播一次寻求有效的DHCP分配IP
②IP租用提供(OFFER)
DHCP服务器回应客户机,提供一个网内没有的IP地址,以offer包广播
所有机器都会收到,但其他的机器发现MAC地址不是自己会把信息丢掉
发送端 | 内容 | 接收端 |
服务器IP:192.168.88.10 | 服务器IP:192.168.88.10 服务器MAC 客户机IP:192.168.88.5 客户机MAC 子网掩码、网关、租期 DNS服务器IP | 广播:255.255.255.255 |
③IP租用选择(REQUEST)
如果DHCP服务器有多个,谁快选则谁,选择第一个回应的信息,然后向网络中广播一个消息,表明自己已经接收一个DHCP服务器的IP,那些多余的DHCP OFFER被拒绝,则DHCP服务器会取消提供并保留其IP地址以用于下一个IP租约请求
发送端 | 内容 | 接收端 |
客户端IP:0.0.0.0 | 服务端IP:192.168.88.10 客户端IP:192.168.88.5 客户端MAC | 广播:255.255.255.255 |
④IP租约确认(ACK)
DHCP服务器接受到客户端的选择信息之后,会返回给客户端一个消息包,客户机按照服务器的信息配置机器IP,服务器记录客户机的IP地址
发送端 | 内容 | 接收端 |
服务器IP:192.168.88.10 | 服务器IP:192.168.88.10 服务器MAC 客户机IP:192.168.88.5 客户机MAC 子网掩码、网关、租期 DNS服务器IP | 广播:255.255.255.255 |
服务器拒绝租约:DHCP NACK(DHCP NAK)如果DHCP REQUEST不成功,例如客户机试图租约先前的IP地址,但该IP地址不再可用,或者因为客户机移到其他子网,该IP无效时,DHCP服务器将广播否定确认消息DHCP NACK。当客户机接收到不成功的确认时,它将重新开始DHCP租约过程。
注1:如果DHCP客户机无法找到DHCP服务器,它将从TCP/IP的B类网段169.254.0.0/16中挑选一个IP地址作为自己的IP地址,继续每隔5分钟尝试与DHCP服务器进行通讯,一旦与DHCP服务器取得联系,则客户机放弃自动配置的IP地址,而使用DHCP服务器分配的IP地址。
注2:DHCP客户机收到DHCP服务器回应的ACK报文后,通过地址冲突检测(arp)发现服务器分配的地址冲突或者由于其他原因导致不能使用,则发送DECLINE报文,通知服务器所分配的IP地址不可用
2、DHCP租约续租
(1)客户端租期已过去 50%时客户机直接向 DHCP 服务器发送REQUEST消息包,如果收到服务器的回应ACK消息包客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成;如无回应,则继续使用当前的 IP。
(2)当租期过去 87.5%时客户端再次向给其提供 IP 的 DHCP 服务器发送请求包,如果成功,则重新开始 IP 租用过程。
(3)到达 100%时如果在 87.5%没有服务器应答,则继续使用租约,租约到达 100%时向整体子网发送广播完成新租约生成过程。如果此时无DHCP服务器可用,DHCP客户机会使用169.254.0.0/16中随机的一个地址,并且每隔5分钟再进行尝试。
(4)如果 DHCP 客户机重新启动时将尝试更新上次关机时的 IP 租用,主动与租期列表中的默认 DHCP 服务器联系,如果租期没到期并且得到服务器回应,客户机会仍使用上次关机时的 IP;否则,会每隔 5 分钟尝试一次 IP 租用
3、DHCP服务搭建
DHCP 所能分配客户端信息
为网络中的计算机自动分配 IP 地址等相关 TCP/IP 参数:
IP地址、子网掩码、缺省网关、DNS 服务器、WINS 服务器
实验环境:
两台机器,网络连接模式设为自定义VMnet8模式
防护的关闭:
iptables -L #防火墙
getenforce #SELinux
关闭Vmware 虚拟网络编辑器的DHCP功能,切记
DHCP服务配置
安装软件:yum install -y dhcp
DHCP配置文件目录:/etc/dhcp
通过模板生成DHCP配置文件:
cp /usr/share/doc/dhcp-版本号/dhcpd.conf.example /etc/dhcp/dhcpd.conf
编辑DHCP文件:vim /etc/dhcp/dhcp.conf
DHCP配置文件详解
subnet 192.168.88.0 netmask 255.255.255.0{ #声明要分配的网段和子网掩码
range 192.168.88.3 192.168.88.254; #声明可用IP地址池
option domain-name "kernel.org"; #设置DNS域
option domain-name-servers 8.8.8.8; #设置DNS服务器地址
option routers 192.168.88.2; #默认网关的地址
option broadcast-address 192.168.88.255; #广播地址(可不写)
default-lease-time 600; #默认租约(s)
max-lease-time 7200; #最大租约(s)
}
租约实验
编辑
客户机端修改网卡
重启DHCP服务,重启客户端网卡
保留地址(固定地址分配)
获取客户端的mac地址
ifconfig
arp -a #查看客户机的mac地址
修改/etc/dhcp/dhcpd.conf文件
host 标签名{ #名字随便取
hardware ethernet mac地址; #客户机的mac地址
fixed-address IP地址; #固定分配给客户机的ip地址
}
重启DHCP服务
systemctl restart dhcpd
重启客户机网卡验证IP获取是否成功
ifdown ens33;ifup ens33
修改客户端网卡
重启DHCP服务和客户端网卡
DHCP超级域
1、三台虚拟机同一网络模式,一个DHCP服务器,两个客户机
2、临时添加IP
ip address add 192.168.99.100 dev ens33
3、开启内核转发
[root@localhost dhcp]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@localhost dhcp]# sysctl -p
net.ipv4.ip_forward = 1
为了显示效果,每个分配IP范围值给一个
重启两个主机的网卡
DHCP中继
DHCP服务器:ens33(192.168.10.10)VMnet10
DHCP中继:ens33(192.168.10.20)VMnet10
ens37(100.100.100.20)VMnet11
外网客户机:ens33(IP地址自动获取)VMnet1
配置DHCP服务器
配置中继器
网卡配置
一块网卡ip=192.168.10.20
一块网卡ip=100.100.100.20
软件安装yum -y install dhcp
内核转发 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
配置客户机
修改网卡配置文件
改为自动获取IP
开启中继命令
dhcrelay 192.168.10.10
Dhcrelay 服务器IP
重启客户机网卡