1、DHCP原理
(1)客户端请求IP租约
DHCP Client 使用UDP 67端口广播DHCP Discover包,数据包源IP为0.0.0.0,目的IP为255.255.255.255
还包含客户端的MAC地址和计算机名,以便DHCP服务器可以确定是哪个客户端发出的请求
(2)服务器响应
服务器收到客户端请求,从地址池中查找一个可用IP,并使用UDP 68端口广播DHCP Offer包,数据包源IP为DHCP服务器
IP,目的IP为255.255.255.255,还包含DHCP客户端的MAC地址(用来正确标识客户端)、DHCP服务器提供的合法IP地址,
子网掩码、租约期限和服务器IP地址。
(3)客户端选择
客户端会从接收到的第一个DHCP Offer包中选择IP地址,如果网络中有多台DHCP服务器,客户端会使用收到第一个DHCP Offer包的
DHCP服务器DHCP服务器提供的IP地址,而会忽略后面到达的DHCP Offer包即不使用后面的DHCP服务器提供的IP。客户端使用UDP 67端口
广播DHCP Request包,以表明使用哪一台DHCP服务器提供的IP地址,数据包源IP为0.0.0.0,目的IP为255.255.255.255。
(4)服务器确认
DHCP服务器收到DHCP Request包后,会使用UDP 68端口广播DHCP ACK包向客户端确认请求成功,数据包源IP为DHCP服务器IP地址,目的IP为
255.255.255.255。客户端收到DHCP ACK包后,就会使用得到的IP地址,整个租约请求至此完成。
(5)客户端确认IP是否有效
客户端得到DHCP服务器提供的IP后,并不会马上使用,而是会向网络发送一个ARP请求,如果有回应则表示从DHCP服务器得到IP已经在使用,
客户端就会放弃从DHCP服务器得到的IP,并重新开始新一轮IP地址申请。
(6)DHCP Offer无回应
如果客户端的DHCP Offer包没有得到回应,默认情况下会随机选择一个169.254.0.0/16网段的IP地址,然后每隔5分钟再次发DHCP Offer包。
(7)租约过期
当租约到达50%时,客户端直接向提供租约的DHCP服务器发送DHCP Request包,要求更新现在地址租约。如果DHCP服务器收到请求会发送DHCP ACK给
客户端确认更新租约。如果客户端无法与提供租约的DHCP服务器通信,则会等待租约到达87.5%时,会向网络上所有DHCP服务器广播更新现有租约,
而不单是向提供DHCP服务器发送更新租约请求。客户端会使用第一个回应请求的DHCP服务器提供的地址信息更新现有租约,如果租约终止或者没有其他DHCP服务器
响应,客户端将无法使用现有的IP地址租约,而会随机选择一个169.254.0.0/16地址使用。
2、DHCP安装
#安装dhcp、dhcp-devel、dhcp-common和dhclient包
yum -y install dhcp*
3、DHCP配置
(1)配置文件
/etc/dhcpd.conf:主配置文件
/usr/share/doc/dhcp-4.1.1//dhcpd.conf.sample:dhcpd.conf配置模板,数字为dhcp版本
/etc/sysconfig/dhcpd:配置监听的网络接口,有多张网卡时可能会用到
/var/lib/dhcpd/dhcpd.leases:记录租约信息文件
(2)全局配置和作用域配置
全局配置参数对整个DHCP服务器的所有作用域生效,作用域参数只对当前作用域生效,作用域参数优先级比全局配置参数高,当作用域参数与全局配置参数冲突时,
冲突部分参数以作用域参数生效而忽略全局配置参数。如要全局配置参数配置了DNS服务器为192.168.50.1,在作用域配置了DNS服务器为192.168.50.1和192.168.50.2,
那么作用域内的客户端获取的DNS就会以作用域为准,获取到192.168.50.1和192.168.50.2。或者作用域配置了DNS服务器为192.168.50.2,那么客户端就会获得192.168.50.2.
全局配置参数全局生效,作用域配置参数作用域内生效,当发生冲突时范围越小优先级越高。
(3)常用选项简略说明
#默认租约时间
default-lease-time 600;
#最长租约时间
max-lease-time 7200;
#是否允许客户端动态恪遵
ddns-update-style none;
#指定作用域,对应网段192.168.50.0/24
subnet 192.168.50.0 netmask 255.255.255.0
{
#地址池,IP地址可以不连续
range 192.168.50.10 192.168.50.11;
range 192.168.50.20 192.168.50.21;
#子网掩码
option subnet-mask 255.255.255.0;
#dns服务器IP或者域名,可以多个,逗号分隔
option domain-name-servers 192.168.50.100;
#指定dns后缀
option domain-name "internal.example.org";
#指定网关地址
option routers 192.168.50.1;
#指定广播地址
option broadcast-address 10.5.5.31;
#指定最短和最长租约时间,全局配置已经配置,但是作用域参数优先级高,所以作用域参数生效
default-lease-time 300;
max-lease-time 600;
}
#指定MAC地址为00:15:5d:00:c0:04 客户端获取固定IP(192.168.50.12)以及其他选项
host clientname
{
#客户端MAC地址
hardware ethernet 00:15:5d:00:c0:04;
#指定获取的固定IP
fixed-address 192.168.50.12;
#指定其他选项,获取网关为192.168.50.100
option routers 192.168.50.100;
}
(4)配置示例
指定客户端(MAC:00:15:5d:00:c0:04)获取固定IP:192.168.50.12,网关:192.168.50.100,最短和最长租约分别为300和600秒。
从客户端看效果:
可以看到获得的IP为指定地址,租约时间为作用参数指定时间而非全局配置时间,网关为保留设置指定的网关,而非作用域指定的网关。可以看出优先级:全局配置<作用域<保留配置。