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秒。

DHCP服务器_第1张图片

从客户端看效果:

DHCP服务器_第2张图片

DHCP服务器_第3张图片

可以看到获得的IP为指定地址,租约时间为作用参数指定时间而非全局配置时间,网关为保留设置指定的网关,而非作用域指定的网关。可以看出优先级:全局配置<作用域<保留配置。

4、DHCP高级配置