DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,DHCP 协议主要是用来自动为局域网中的客户机分配 TCP/IP 信息的网络协议,并完成每台客户机的 TCP/IP 协议配置。当我们将局域网中客户机IP地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户机自动分配IP地址,使得客户机能够使用这个IP地址。
DHCP的前身是BOOTP协议(Bootstrap Protocol),BOOTP被创建出来为连接到网络中的设备自动分配地址,后来被DHCP取代了,DHCP比BOOTP更加复杂,功能更强大。所有的IP网络参数(包括IP地址、网关和DNS服务器地址等)都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配的IP网络参数。
减少管理员的工作量;
避免IP冲突;
减少收入错误的可能;
能方便地更改网络的IP网段;
移动计算机后不用重新配置网络信息;
提高IP地址的利用率。
客户端在局域网广播发送 DHCP discovery包,寻找DHCP服务器,即向255.255.255.255发送特定的广播信息,每一台安装了TCP/IP协议的主机都会有这个广播地址,但只有DHCP服务器才会做出回应。
第2步:(提供IP地址)
服务器收到DHCP discovery包后,向客户机发送一个包含分配的IP地址和其它设置的 DHCP offer 包,目的告诉客户机,我能为你提供IP地址。
第3步:(选择IP地址)
客户机收到DHCP offer提供信息包后,(如果客户机在一段时间内没有接收到DHCP服务器发出dhcp offer包,则会重新发送dhcp discover。如果广播区域内不止一台dhcp服务器,则由客户机决定使用哪个)客户机选择第一个接收到的提供信息包,以广播的方式再发送一个DHCP request请求信息包,客户机向服务器请求IP地址。
第4步:(IP地址提供确认)
服务端收到客户机回应的DHCP request 请求信息包之后,便向客户机发送一个DHCP ack 确认信息包,告诉客户机可以使用它提供的IP地址。
第5步:(重新登录)
以后DHCP客户机每次使用此IP地址时,就不需要再发送DHCP discovery包了,而是直接发送一个包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息以后,它会继续让客户机使用此IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的客户机使用时,则DHCP服务器给客户机回答一个DHCP nack否认信息。当原来的客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discovery寻找信息来请求新的IP地址。
第6步:(更新租约)
DHCP服务器向客户机出租的IP地址都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果客户机要延长其IP租约,必须更新其IP租约。客户机启动时和IP租约期限过一半时,客户机都会自动向DHCP服务器发送更新其IP租约的信息。
IP | dhcpd | CentOS | 默认主从 |
---|---|---|---|
172.16.159.142 | isc-dhcpd-4.1.1-P1 | CentOS release 6.6 (Final) | primary |
172.16.159.143 | isc-dhcpd-4.1.1-P1 | CentOS release 6.6 (Final) | secondary |
安装dhcp
# yum -y install dhcp
需要保持172.16.159.142,与172.16.159.143时间一致。请参考《Keepalived + ntp高可用时间同步服务器》:https://blog.csdn.net/CleverCode/article/details/101017183
定时任务更新时间
[root@localhost etc]# crontab -l
0 * * * * /usr/sbin/ntpdate 172.16.159.140
[root@localhost etc]#
在172.16.159.142上面
vi /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# dhcp不会自动更新dns服务器
ddns-update-style none;
# 默认租约时间。客户机通过DHCP获取IP后,这个IP使用时间是多久。单位秒
default-lease-time 7200;
# 最大租约时间。分钟
max-lease-time 14400;
# 默认dns域名称。
option domain-name "clevercode.com";
failover peer "dhcp" {
# 是主服务器还是辅助服务器
primary;
#本地监听failover的IP
address 172.16.159.142;
#本地监听failover的端口
port 520;
#secondary服务器的IP
peer address 172.16.159.143;
#secondary服务的监听端口
peer port 519;
#同步信息最大时间延迟
max-response-delay 60;
#在未收到 PARTNER 回复时,BNDUPD 消息的最多重发次数
max-unacked-updates 10;
#Maximum Client Lead Time. 在灾备方案中,该时间延迟保证 PARTNER 上的 IP 租约已经过期。
#该参数只能定义在主服务器中。
mclt 7200;
#主辅服务器的地址分割,通常是各一半
split 128;
#关于负载均衡的参数
load balance max seconds 3;
}
#DHCP作用域
subnet 172.16.159.0 netmask 255.255.255.0
{
#设置路由器的IP(网关)
option routers 172.16.159.2;
#DNS
option domain-name-servers 172.16.159.140,114.114.114.114;
pool {
failover peer "dhcp";
# 地址池范围
range 172.16.159.10 172.16.159.240;
#failover不支持bootp客户端,必须拒绝
deny dynamic bootp clients;
}
#指定MAC地址和IP地址的绑定
host clevercode{
hardware ethernet 00:0C:29:DB:6F;
# 保留地址必须是range范围内的
fixed-address 172.16.159.101;
}
}
在172.16.159.143上面
vi /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# dhcp会不会自动更新dns服务器
ddns-update-style none;
# 默认租约时间。客户机通过DHCP获取IP后,这个IP使用时间是多久。单位秒
default-lease-time 7200;
# 最大租约时间。分钟
max-lease-time 14400;
# 默认dns域名称。
option domain-name "clevercode.com";
failover peer "dhcp" {
# 是主服务器还是辅助服务器
secondary;
#本地监听failover的IP
address 172.16.159.143;
#本地监听failover的端口
port 519;
#primary服务器的IP
peer address 172.16.159.142;
#primary服务的监听端口
peer port 520;
#同步信息最大时间延迟
max-response-delay 60;
#在未收到 PARTNER 回复时,BNDUPD 消息的最多重发次数
max-unacked-updates 10;
#关于负载均衡的参数
load balance max seconds 3;
}
#DHCP作用域
subnet 172.16.159.0 netmask 255.255.255.0
{
#设置路由器的IP(网关)
option routers 172.16.159.2;
#DNS
option domain-name-servers 172.16.159.140,114.114.114.114;
pool {
failover peer "dhcp";
# 地址池范围
range 172.16.159.10 172.16.159.240;
#failover不支持bootp客户端,必须拒绝
deny dynamic bootp clients;
}
#指定MAC地址和IP地址的绑定
host clevercode{
hardware ethernet 00:0C:29:DB:6F;
# 保留地址必须是range范围内的
fixed-address 172.16.159.101;
}
}
# /etc/init.d/iptables stop
# setenforce 0
# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
如果,不关闭selinux。发现只能监听67端口。自己定义的520,519端口不会监听。关闭之后就发现有端口监听了。
在172.16.159.142,172.16.159.143都启动dhcpd
/etc/init.d/dhcpd start
查看日志
cat /var/log/messages
查看监听端口
netstat -anp | grep dhcp
在一个新开的机器上,使用dhclient获取ip
没有使用dhclient之前
# dhclient
可以看到分配了IP:172.16.159.125
查看dns配置
cat /etc/resolv.conf
在 172.16.159.142查看日志。可以看到四个过程(DHCPDISCOVER,DHCPOFFER,DHCPREQUEST,DHCPACK)
[root@localhost ~]# cat /var/log/messages
Sep 27 11:31:05 localhost dhcpd: DHCPDISCOVER from 00:50:56:34:c0:f4 via eth0
Sep 27 11:31:06 localhost dhcpd: DHCPOFFER on 172.16.159.125 to 00:50:56:34:c0:f4 via eth0
Sep 27 11:31:06 localhost dhcpd: DHCPREQUEST for 172.16.159.125 (172.16.159.142) from 00:50:56:34:c0:f4 via eth0
Sep 27 11:31:06 localhost dhcpd: DHCPACK on 172.16.159.125 to 00:50:56:34:c0:f4 via eth0
Sep 27 11:31:07 localhost named[34936]: client 172.16.159.125#34949: RFC 1918 response from Internet for 125.159.16.172.in-addr.arpa
[root@localhost ~]#
查看高可用,现在关闭172.16.159.142的dhcp
# /etc/init.d/dhcpd stop
在172.16.159.143查看日志,发现有failover信息
[root@localhost dhcp]# cat /var/log/messages
Sep 27 11:42:28 localhost dhcpd: peer dhcp: disconnected
Sep 27 11:42:28 localhost dhcpd: failover peer dhcp: I move from normal to communications-interrupted
[root@localhost dhcp]#
释放客户端ip信息
# 释放使用的ip信息
# dhclient -r
端重新获取ip。发现获取IP还是可以获取成功的。只是IP可能发生变化。
# dhclient
主要是修改BOOTPROTO=dhcp
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:50:56:34:C0:F4
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
《CentOS 7.3 搭建DHCP服务器》:
https://blog.51cto.com/13525470/2054001
《DHCP服务——服务端 和 客户端 配置》:
https://www.cnblogs.com/kelamoyujuzhen/p/9520341.html
《Centos6.5 DHCP配置》:
https://blog.csdn.net/qq_43419662/article/details/83099021
《 DHCP FailOver 主备故障转移+多网段网络环境系统部署》:
https://www.iyunv.com/thread-342324-1-1.html
《Linux 下 DHCP 服务器的灾难备份》:
https://www.oschina.net/question/12_10623
《Centos 7.4 DHCP 双机热备》:
https://download.csdn.net/download/xiaoke1234567890/10558996