第十二章、DHCP服务
一、DHCP概述
1、DHCP(Dynamic Host Configuration Protocol)全称是动态主机配置协议
2、目的
福原爱为什么会说中文
减轻TCP/IP网络的规划、管理和维护的负担
波西塔诺
解决IP地址空间缺乏问题
300字美文摘抄3、租约
提供了自动在TCP/IP网络上安全地分配和租用IP地址的机制,实现IP地址的集中式管理,基本上不需要网络管理人员的人为干预
4、四线会话
DHCP DISCOVER    客户端在网络中广播此消息,请求IP地址。
DHCP OFFER    服务器应答此消息,提供一个地址池选择。
DHCP REQUEST    客户端选择一个地址,向服务器发送此消息。
DHCP ACK        服务器发送此消息批准该租约。
租借过程中DHCP客户机状态
1、初始化状态——
客户机还没有向DHCP服务器请求IP地址。向网络中的所有计算机,通过其的UDP端口(68或67)发送一个DHCPDiscover消息,此消息包含该计算机的MAC地址和主机名。
2、选择状态——
客户机进入一个选择状态,客户机选择一个(DHCPDiscover)    是服务器发过来的。
3、请求状态——
客户机已经知道了自己想要租借的地址。向所有DHCP服务器广播一个(DHCPRequest)
的请求信息。DHCP服务器以成功(DHCPACK)、不成功(DHCPNACK)作应答。当客户机收到(DHCPNACK)消息后,返回到初始化状态,重新开始租借过程。
4、绑定状态——
金星的孩子
当DHCP客户机收到(DHCPACK)消息时,它完成TCP/IP栈的初始化。
5、更新状态——
当租约时间过去50%时,客户机向该服务器发送一个(DHCPRequest)消息,请求更新租约。
6、重绑定状态——
当DHCP客户机不能与提供租约的DHCP服务器通信,时间过了87.5%,它就试图连接到任何可提供IP的DHCP服务器,回到初始化开始新的租借过程。
5、续租过程——
保持租借过程的后3个状态。
二、配置DHCP服务
安装软件包    (dhcp-3.0.5-3.el5)
# rpm  -ivh  dhcp-3.0.5-3.el5.i386.rpm
用下面命令可以简单的获得到DHCP服务的所有配置文件存在的位置。其中包括主配置文件、租约文件和启动服务的脚本。
# rpm  -qlc  dhcp
1、主配置文件
默认的主配置文件是 /f
第一次打开此文件是一个空文件,只有一条信息:
这条信息告诉用户DHCP提供了一个模板。
# cp  /usr/share/doc/dhcp-3.0.f.sample  /f
用这条命令,可以把那块模板的内容覆盖空的主配置文件,也可以自己手工直接编辑 /f。
DHCP服务器的的配置文件是一个文本文件,DHCP里有一个语法分析器,能对这个文件进行语法分析,获得配置参数。f格式是递归下降的,关键字大小写敏感。
下图是一个简单的f的配置文件:
f文件主要分为3个主要区域:(全局配置、地址池配置、保留配置)。
、全局配置文件:
ddns-update-style interim; 
——动态dns更新,(interim开启/nore关闭)
ignore client-updates;
——挂起客户端更新,这样如果客户端把IP地址释放了,IP地址没有到期,且没有被别人获取,等客户再次申请IP的时候,还是这个IP地址。张家界风景
、地址池配置:
subnet 192.168.1.0 netmask 255.255.255.0 {
——地址池所在的网络为和网络掩码。
option routers  192.168.1.0;
——指明在客户子网内的路由器地址,可以有多个,用逗号隔开。
option subnet-mask  255.255.255.0;
——指定设置本地的子网掩码。
option domain-name  baidu;
——提供给客户机的域名。
option domain-name-servers  192.168.1.200;
——提供给客户机的DNS地址。
range dynamic-bootp  192.168.1.10 192.168.1.20;
——设定地址范围。
default-lease-time  86400
——指定默认租约时间,这里的time是以秒为单位的。如果DHCP在请求一个租约,但没有指定租约的失效时间,租约时间就是默认的租约时间。
max-leasse-time  172800
——最大的租约时间。如果DHCP在请求租约时间时有发出特定的租约失效时间的请求,则用最大租约时间。
3、保留配置文件:
host  jingli
刘嘉玲——对于单台主机的固定地址。此处的“jingli”名字是给管理员方便自己看的,也可以是客户端的真正主机名,都无所谓。
hardware ethernet  00:0C:29:2D:98:D3;
——要绑定的客户端主机的MAC地址。
fiked-address  192.168.1.8; } }
——指给定客户端的固定地址。
2、租约文件
dhcpd.leases是DHCP客户租约的数据库文件,默认是放在目录 /var/lib/dhcpd/下的,文件包含租约声明,每次一个租约被获取、更新或释放,它的新值就被记录在文件末尾。每一个记录包含一个提供给客户的IP地址,括号里是租约信息。具体的租约信息因客户发出不同的DHCP请求而稍有差别。下图就是一个示例:(starts:起始时间、ends:结束时间)
需要注意的是:dhcpd.leases的时间记录采用UTC时间,不是本地时区的时间。要查看本地的UTC时间可以执行“date –u”命令。
3、控制DHCP服务
启动、停止和重启DHCP服务:
# service  dhcpd  start
# servise  dhcpd  stop
# service  dhcpd  restart 
# /etc/rc.d/init.d/dhcpd  start
# /etc/rc.d/init.d/dhcpd  stop
# /etc/rc.d/init.d/dhcpd  restart
启动时,DHCP默认是监听在eth0上的,如果DHCP要从另外一块网卡eth1上启动DHCP服务监听,可以使用下面命令:
# /usr/sbin/dhcpd  eth1
4、检查DHCP服务的启动情况
、检查进程
# ps  ax  |grep  dhcpd
另一种简单的方式是通过service命令获得信息:
# service  dhcpd  status
从输出结果中得知DHCP的守护进程dhcpd在运行中,且PID为3484。
、检查端口
DHCP服务端使用UDP协议的67端口。根据这条线索,我们可以使用netstat命令显示出端
口列表,并寻67号端口。
# netstat  -naup  |grep  67
从输出的结果中可以了解到DHCP的服务启动情况。这个输出不仅体现出了监听端口,并且更详细的说明这个端口是由PID为3484的dhcpd进程开启的。
5、DHCP服务的日志信息
默认情况下,DHCP服务的日志信息被记录到 /var/log/messages文件,便于管理员对系统的维护和解决安全问题及调试服务中出现的问题进行排查。
但是为了让管理员更方便的管理,DHCP服务的日志信息也可以记入到单独的文件里:在f配置文件的主配置文件里,加上(log-facility local(0~7))具体步骤,后面有实例。
6、DHCP客户端的配置
、修改接口配置文件 /etc/sysconfig/network-scripts/ifcfg-ethN
将BOOTPROTO=后的参数设置成dhcp。就是由DHCP服务器来获得IP地址。
再用命令(# sercice  network  restart)重启network服务就获得到DHCP服务器提供的IP地址了。
、dhclient
# dhclient         (获得IP地址)
# dhclient  -r      (释放IP地址)
# dhclient  eth0    (只让eth0第一块网卡获得IP地址)
# dhclient  -r  eth0  (只释放第一块网卡eth0)
DNS服务的配置实例
环境为内部局域网提供DHCP服务,网段为192.168.1.0/24、DNS服务器为192.168.1.200、网关为192.168.1.1。
实例一:
最基本的配置如下:
ddns-update-style interim;
ignore  client-updates;
subnet 192.168.1.0 netmask 255.255.255.0  {
        option routers            192.168.1.1;
        option subnet-mask      255.255.255.0;
        option domain-name      baidu;
        option domain-name-servers    192.168.1.200;
        range dynamic-bootp 192.168.1.10 192.168.1.20;
        default-lease-time  86400;
        max-lease-time  172800;
}
这个例子将会网络中的主机分配192.168.1.10——192.168.1.20这个范围的IP地址,并且为每台主机提供统一的网关、掩码、域名、DNS服务器这类网络参数。
如果打算为不同的地址范围的主机分配不同的网络参数,可以使用pool语句,这个语句可以为不同的地址段指定相同或不同的网关、DNS服务器IP、网络掩码、租约时间等参数,但pool语句需要被包含在subnet语句之中,不能单独使用。下面我们再给地址池加一个网段:192.168.1.110——192.168.1.120,其DNS服务器指向192.168.1.119。
ddns-update-style interim;
ignore  client-updates;
subnet 192.168.1.0 netmask 255.255.255.0  {
        option routers            192.168.1.1;
        option subnet-mask      255.255.255.0;
        option domain-name      baidu;
  pool {
        option domain-name-servers    192.168.1.200;
        range dynamic-bootp 192.168.1.10 192.168.1.20;
        default-lease-time  86400;
        max-lease-time  172800; }
  pool {
        option domain-name-servers    192.168.1.119;
        range dynamic-bootp 192.168.1.110 192.168.1.120;
        default-lease-time  86400;
        max-lease-time  172800; }
}
如果用户的局域网有多条出口到通向internet,那么可以在每个pool语句中指定“option routers”参数,是不同地址范围的主机有不一样的网关,实现负载均衡。