DCHP(Dynamic Host Configuration Protocol)
3.1 DHCP工作流程
3.1.1客户端发送请求
用户端电脑的网卡设置为自动获取(DHCP)的方式,当用户端电脑开机或重新启动网卡时,用户端电脑会发出一个DHCPDISCOVER广播包(目标IP:255.255.255.255),搜索DHCP服务器在哪儿,这个广播包,只有DHCP服务器才会响应,其它主机收到后直接丢弃。
3.1.2 DHCP服务器回应
DHCP服务器收到客户端的广播包后,会进行下面3个操作:
(1)查看自动分配记录,根据有没有该用户(MAC地址)的记录,如果有,并且对应的IP地址目前还没有分配出去,就把该IP及相关信息分配给该用户
(2)查看绑定记录,如果有该客户端的MAC地址绑定记录,就把对应的IP分配给客户端。
(3)如果没有记录,就从IP地址池中找一个还没有分配的IP,加上租期等相关信息,向客户端发送一个DHCPOFFER包,并做好记录。
3.1.3 客户端选择
如果有多台DHCP服务器,都收到了客户端请求,并且都为该客户端分配了IP,客户端只会接受最先收到的那一个。然后再发送一个DHCPREUQEST广播包,向整个网络宣告自己接受的DHCP服务器是哪个。当其它DHCP服务器收到这个包后,就收回向该客户端发送的IP租约。
3.1.4 服务器确认
当被客户端接受的DHCP服务器收到客户端发送的DHCPREQUEST包后,会再给客户端发送一个包含IP地址及相关信息的DHCPACK确认包,并告知客户端,从现在开始计算租约时间。
3.1.5 客户端配置
客户端收到确认包后,就用收到的IP地址及相关信息来配置自己的网络
3.1.6 客户端重新登陆
客户端处于离线状态(关机、重启、禁用网卡)时,DHCP服务器会收回该客户端的IP。
当客户端重新登录时,不需要发送DHCP discover信息,而是直接发送包含前一次所分配的IP地址的DHCP request信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户端继续使用原来的IP地址,并回答一个DHCP ACK信息。如果此IP地址已无法再分配给原来的DHCP客户端使用(比如该IP地址已分配给其他DHCP客户端使用),则DHCP服务器给DHCP客户端回答一个DHCP NACK信息。当客户端收到此信息后,必须重新发送DHCP discover信息来请求新的IP地址。
3.1.7 续租
为了防止一些用户长期占用IP,所以需要设定一个租约时间,租约时间有两种方式:
1.DHCP服务器分配IP时指定
2.客户端发送请求的时候,自己指定
如果在这个期限到达之前,客户端没有重新提出申请,DHCP服务器就会收回该IP,这时,客户端就会断线。所以客户端需要定时发送续约申请,并且必须在租约到期之前。
默认,DHCP客户端会在租约时间一半时就去重新申请了。
3.2配置DHCP服务器
3.2.1装包
yum install -y dhcp
3.2.2修改配置文件
#默认配置文件里是空的,可拷贝模板文件,再进行修改
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
ddns-update-style none; # DHCP和DNS服务器同步更新,也就是动态DNS,如果要开启,将none改成interim
default-lease-time 259200; # 默认租约为3天,以秒为单位
max-lease-time 518400; # 最大租约为6天,客户端申请租约限制,如果客户端请求未明确租约时间,采用默认租约
option routers 10.0.0.1; # 网关
option domain-name “example.com”; # 域名
option domain-name-servers 8.8.8.8,8.8.4.4; # DNS,以逗号分隔
#以上为全局设置,如果不想在全局使用,也可在下面subnet设置里面局部设置。
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.10 10.0.0.20; # 设置动态分配IP地址范围
host tt { # 设置静态绑定
hardware ethernet 00:0c:29:38:ae:a6; # MAC地址
fixed-address 10.0.0.100; # 绑定的IP
}
}
注意:做静态分配的IP要和动态分配的IP段分开,否则会引起冲突。
3.2.3 重启DHCP服务,并开机启动
systemctl restart/enable dhcpd
3.3客户端设置
vim /etc/sysconfig/network-scripts/ifcfg-eth0 # 配置网卡
BOOTPROTO=dhcp
systemctl restart network # 重启网络
cat /etc/resolv.conf # 查看DNS
cat /var/lib/dhclient/dhclient-eth0.leases # 查看DHCP相关信息
3.4在DHCP服务器查看分配状态
cat /var/lib/dhcpd/dhcpd.leases # 查看服务器已经自动分配的IP信息
systemctl status dhcpd -l
dhcp的log日志跟messages在一起: tail -f /var/log/messages
dhcp的租约信息放在: /var/lib/dhcpd/dhcpd.leases
# 换了网线后上不了网,清空dhcpd.leases租约信息
配置文件的示例文件:/usr/share/doc/dhcp-*/dhcpd.conf.sample