1、概述
DHCP(动态主机分配协议)基于BootTP的协议,主要用于简化IP配置管理的TCP/IP标准。
当一台DHCP客户端启动时,该客户端将在网络中请求IP地址,DHCP服务器接收到客户端的申请IP请求后,将从他的地址池中选择一个IP分配给DHCP客户端。
客户端除了从DHCP服务器得到IP地址外,还能得到子网掩码,默认网关,DNS等信息,一般这些信息不会永久使用,而是有一定的使用期限,称为租约。
租约的产生有点类似租房子:
1)客户端请求IP租约。DHCP客户端首先在网络中广播一个DHCP DISCOVER的数据包(采用UDP67端口,源IP0.0.0.0,目标地址:255.255.255.255),此数据包中还包含客户端的MAC地址和计算机名,可以使DHCP服务器能够确定到底是哪个客户端发出的请求。
2)服务器响应,当DHCP服务器接收到客户端的请求后,首先检查自己的地址库中是否有可用的IP,如果存在,此时DHCP服务器同样广播一个数据包,DHCP OFFER的包,该数据使用UDP68端口源IP地址为dhcp服务器的地址,目标IP地址为255.255.255.255,还包含DHCP客户端的MAC地址,DHCP服务器产生的合法IP地址,子网掩码,租约期限,服务器IP地址等信息。
3)客户端选择。DHCP客户端接收到第一个DHCP offer后,选择地址,并向DHCP服务器发送DHCP request包,同样广播出去,此包同样适用UDP67端口,源地址为0.0.0.0,目标地址为255.255.255.255。
4)服务器确认。DHCP服务器收到客户端的DHCP REQUEST后,会以DHCP ACK包广播出去,确认成功,此时的包使用的是UDP 68 端口,源IP为DHCP服务器的IP,目标IP为255.255.255.255,当客户端收到DHCP ACK信息后,得到IP地址,完成整个租约
5)租约更新,当客户端重启或租约达到50%的时候,需要更新租约,客户端直接向DHCP服务器发送DHCP REQUEST包,要求更新现有的租约,如果DHCP服务器接到此请求,则向客户端发送DHCP ACK确认包,如果客户端无法与DHCP服务器通讯,则客户端再次等到租约到87.5%的时候,重新进行租约更新,但此时DHCP客户端回想网络上所有的DHCP服务器广播以更新租约。
6)中继代理。在整个DHCP租约产生的过程中,DHCP客户端和DHCP服务器都是通过广播的形式,如果在同一个子网中不会产生问题,如果跨子网的话,就需要中继代理转发DHCP客户端与服务器之间的广播包。
2、配置文件
安装dhcp服务器软件,中继代理也是使用此软件,只是使用的服务不同而已。
默认的配置文件是:/etc/dhcpd.conf,记录租约的文件时/var/lib/dhcpd/dhcpd.leases
默认情况下,/etc/dhcpd.conf无内容,但是可以使用模板文件进行修改,/usr/share/doc/dhcp*/dhcpd.conf.sample。
文件的格式与配置:
单作用域:
subnet 192.168.0.0 netmask 255.255.255.0{
}
多作用域:
subnet 192.168.0.0 netmask 255.255.255.0{
}
subnet 192.168.1.0 netmask 255.255.255.0{
}
group域:
如果两个字网段有相同的配置,比如说DNS信息,NIS信息,ntp信息等,没有必要在每个作用域中都写入这些相同信息,这样就引入了group作用域。
group{
option domain-name-servers 202.102.152.3;
subnet 192.168.0.0 netmask 255.255.255.0{
}
subnet 192.168.1.0 netmask 255.255.255.0{
}
}
这样,0网段和1网段的主机都可以都是用相同的DNS信息了。
超级作用域:
如果网络环境更复杂,可以引入超级作用域,方便管理:
shared-network my-name{
group{
subnet ....
}
subnet ....
}
中继代理:
中继代理的配置比较简单,仅仅是修改中继代理服务器下的/etc/sysconfig/dhcpd文件即可