一、DHCP服务概述

在一个计算机较多的网络中,如果要为整个企业每个部门的上百台机器逐一进行ip地址的配置绝不是一件轻松的工作。为了方便、简洁地完成这项工作,很多时候会才用动态主机配置协议(Dynamic Host Configuration Protocal,DHCP)来自动为客户端配置ip地址。

DHCP基于客户/服务器模式,当DHCP客户端启动时,它会自动与DHCP服务器通信,要求提供自动分配ip地址的服务,而安装DHCP服务的服务器则会响应要求。

DHCP是一个简化主机ip地址分配管理的TCP/IP标准协议,用户可以利用DHCP服务器管理动态的ip地址分配及其他相关的环境配置工作,如DNS服务器、Gateway的设置。

在DHCP机制中分为服务器和客户端两个部分,分别监听的UDP的67、68端口

二、DHCP工作过程

wKioL1WP_-iBBW9DAACiBUuiY6s735.jpg

DHCP客户端和服务器端申请ip地址、获得ip地址的过程一般分为4个阶段,如上图所示。

1、DHCP客户端发送ip租约请求

当客户端启动网络时,由于ip网络中的每台机器都需要一个地址,因此,此时的计算机TCP/IP地址与0.0.0.0绑定在一起。他会发送一个“DHCP Discover(DHCP发现)”广播信息包到本地子网,该信息包发送给UDP端口67,即DHCP/BOOTP服务器端口的广播信息包。

2、DHCP服务器提供ip地址

本地子网的每一个DHCP服务器都会接受“DHCP Discover”信息包。每个接受到请求的DHCP服务器都会检查它是否有提供给请求客户端的有效空闲地址,如果有,则以“DHCP Offer(DHCP提供)”信息包作为响应,该信息包包括有效的ip地址、子网掩码、DHCP服务器的ip地址、租用期限,以及其他的有关DHCP范围的详细配置。所有发送DHCP Offer信息包的服务器将保留他们提供的这个ip地址(该地址暂时不能分配给其他的客户端)。“DHCP Offer”信息包广播发送到UDP端口68,即DHCP/BOOTP客户端端口。

3、DHCP客户端进行ip租用选择

客户端通常对第一个提议产生响应,并以广播的方式发送“DHCP Request(DHCP请求)”信息包作为回应。该信息包告诉服务器“是的,我想让你给我提供服务,我接受你给我的租用期限。”而且,一单信息包以广播方式发送以后,网络中所有的DHCP服务器都可以看到该信息包,那些提议没有被客户端承认的DHCP服务器将保留的ip地址返回给她的可用地址池。客户端还可利用DHCP Request询问服务器其他的配置选项,如DNS服务器或网关地址。

4、DHCP服务器ip租用认可

当服务器接受到“DHCP Request”信息包时,它以一个“DHCP Acknowledge(DHCP确认)”信息包作为响应,该信息提供了客户端请求的任何其他信息,并且也是以广播的方式发送的,该信息包告诉客户端“一切准备好。记住你只能在有限时间内租用该地址,而不能永久占据。以下是你询问的其他信息。

三、ip地址租用和更新

(1)ip地址租约

DHCP服务器是以地址租约的方式为DHCP客户端提供服务的,它主要提供以下两种方式的地址租约。

i、限定租期。当DHCP客户端向DHCP服务器租用到ip地址后,DHCP客户端只是暂时使用这个地址一段时间。如果客户端在租约到期时,没有更新租约,则DHCP服务器会收回该ip地址,并将ip地址提供给其他的DHCP客户端使用。如果原DHCP客户端又需要ip地址,它可以向DHCP服务器重新租用另一个ip地址。ii、永久租用。当DHCP客户端向DHCP服务器租用到ip地址后,这个地址就永远分派给这个DHCP客户端使用。

(2)租约更新

i、更新。当客户端注意到她的租用期到了50%以上时,就要跟新该租用期。这时它发送一个直接UDP信息包(单播)给它所获得原始信息的服务器,该信息包是一个DHCP Request信息包,用来询问是否能够保持TCP/IP配置信息并更新它的租用期。如果服务器是可用的,则它通常发送一个DHCP Acknowledge信息包给客户端,统一客户端请求。

ii重新绑定。当租用期到达期满时间的近87.5%时,客户端如果在前一次请求中没能更新租用期的话,它会再次试图更新租用期。如果这次更新失败的话,客户端就会尝试与任何一个DHCP服务器联系以获得一个有效的ip地址。如果另外的DHCP服务器能够分配一个新的ip地址,则改客户端再次进入捆绑状态。如果客户端当前的ip地址租用期期满,则客户端必须放弃该ip地址,并重新进入初始化状态,然后重复整个过程。

(3)解约条件

既然客户端就ip地址的分配与DHCP服务器建立了一个有效租约,那么这个租约什么时候解除了?

i、客户端租约到期

DHCP服务器分配给客户端的ip地址是有使用期限的。如果客户端使用此ip地址达到了这个有效期限的终点,并且没有再次向DHCP服务器提出租约更新,DHCP服务器就会将这个ip地址回收,客户端就会造成断线。

ii、客户端离线

除了客户端租约到期会造成解除外,当客户端离线,DHCP服务器都会将ip地址回收。

四、DHCP服务器分配给客户端的ip地址类型

(1)动态ip地址

客户端从DHCP服务器取得的ip地址一般都不是固定的,而是每次都可能不一样。在ip地址有限的单位内,动态ip地址可以最大化地达到资源的有效利用。它利用并不是每个员工都会同时上线的原理,优先为上线的员工提供ip地址,离线后收回。

(2)固定ip地址

有的单位除了员工计算机外,还有服务器,这些服务器用动态ip地址,不但不利于管理,而且客户端访问起来也不方便。所以DHCP服务器记录特定计算机的MAC地址,然后为每个MAC地址分配一个固定的ip。

小技巧:查询MAC地址

i、查询本地MAC地址:使用ifconfig命令

ii、查询远程主机MAC地址

TCP/IP最终用到MAC地址,那么使用ping命令就可以获取对方的MAC地址信息,但不会显示出来,所以借助arp工具

第一步:ping -c 1 ip

第二部:arp -n查询缓存在本地的远程计算机中的MAC地址


环境:centos6.5_x86_64

安装:

yum install -y dhcp

查看启动并开机自动启动

[root@school ~]# chkconfig --list dhcpd
dhcpd   0:off1:off2:off3:off4:off5:off6:off
[root@school ~]# chkconfig dhcpd on
[root@school ~]# chkconfig --list dhcpd
dhcpd   0:off	1:off	2:on	3:on	4:on	5:on	6:off

查看生成的文件

[root@school ~]# rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf   #ipv4的配置文件
/etc/dhcp/dhcpd6.conf   #ipv6的配置文件
/etc/openldap/schema/dhcp.schema
/etc/portreserve/dhcpd
/etc/rc.d/init.d/dhcpd      #ipv4的服务脚本   
/etc/rc.d/init.d/dhcpd6   #ipv6的服务脚本 
/etc/rc.d/init.d/dhcrelay   #ipv4中继的服务脚本 
/etc/rc.d/init.d/dhcrelay6   #ipv6中继的服务脚本
/etc/sysconfig/dhcpd   #ipv4的配置文件
/etc/sysconfig/dhcpd6   #ipv6的配置文件
/etc/sysconfig/dhcrelay   #ipv4中继的配置文件
/etc/sysconfig/dhcrelay6   #ipv6中继的配置文件
/usr/bin/omshell
/usr/sbin/dhcpd   #ipv4和ipv6的启动程序
/usr/sbin/dhcrelay   #中继的启动程序
/usr/share/doc/dhcp-4.1.1     #这些是文档
/usr/share/doc/dhcp-4.1.1/3.0b1-lease-convert
/usr/share/doc/dhcp-4.1.1/IANA-arp-parameters
/usr/share/doc/dhcp-4.1.1/README.ldap
/usr/share/doc/dhcp-4.1.1/api+protocol
/usr/share/doc/dhcp-4.1.1/dhclient-tz-exithook.sh
/usr/share/doc/dhcp-4.1.1/dhcpd-conf-to-ldap
/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
/usr/share/doc/dhcp-4.1.1/dhcpd6.conf.sample
/usr/share/doc/dhcp-4.1.1/draft-ietf-dhc-ldap-schema-01.txt
/usr/share/doc/dhcp-4.1.1/ms2isc
/usr/share/doc/dhcp-4.1.1/ms2isc/Registry.perlmodule
/usr/share/doc/dhcp-4.1.1/ms2isc/ms2isc.pl
/usr/share/doc/dhcp-4.1.1/ms2isc/readme.txt
/usr/share/doc/dhcp-4.1.1/sethostname.sh
/usr/share/doc/dhcp-4.1.1/solaris.init
/usr/share/man/man1/omshell.1.gz
/usr/share/man/man5/dhcpd.conf.5.gz
/usr/share/man/man5/dhcpd.leases.5.gz
/usr/share/man/man8/dhcpd.8.gz
/usr/share/man/man8/dhcrelay.8.gz
/var/lib/dhcpd   #运行产生的数据存放目录
/var/lib/dhcpd/dhcpd.leases   #ipv4数据文件
/var/lib/dhcpd/dhcpd6.leases   #ipv6数据文件

配置文件:复制模板并修改

[root@school ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
cp: overwrite `/etc/dhcp/dhcpd.conf'? y
[root@school ~]# vim /etc/dhcp/dhcpd.conf

DHCP工作流程;

1、客户端发送广播向服务器申请ip

2、服务器收到请求后查看主配置文件dhcpd.conf,先根据客户端的MAC地址查看是否为客户端设置固定ip

3、如果为客户端设置了固定ip则将该ip地址发送给客户端。否则将地址池中的ip发送给客户端

4、客户端收到服务器回应后,客户端给予服务器回应,告诉服务器已使用了该ip

5、服务器将相关租约信息存入数据库


主配置文件dhcpd.conf

(1)dhcpd.conf主配置文件组成部分

paramenters(参数)

declarations(声明)

option(选项)

(2)dhcpd.conf主配置文件整体框架

dhcpd.conf包括全局配置和局部配置。

全局配置可以包括参数或选项,该部分对整个DHCP服务器生效。

局部配置通常由声明部分来表示,仅对局部生效,

dhcpd.conf文件格式:

#全局配置

参数或选项;

#局部配置

声明{

   参数或选项;

   }

当一行内容结束时,以;结束,大括号所在行除外


常用参数介绍

(1)ddns-update-style ({none|interim|ad-hoc})

作用:定义所支持的DNS动态更新类型

none:不支持动态更新

interim:DNS互动更新

ad-hoc:特殊DNS更新

这个参数必需在第一行

(2)ignore client-updates

忽略客户端更新,只能在服务器端使用

(3)default-lease-time #定义默认ip租约时间

(4)max-lease-time #定义作用时间最大值

常用声明介绍

声明一般用来指定ip作用域、定义为客户端分配的ip地址池等

格式:

声明{

    选项或参数;

}

(1)subnet 网络号 netmask 子网掩码 {......}

作用:定义作用域、指定子网

(2)range dynamic-bootp 起始ip 结束ip

作用:指定动态ip地址范围

常用选项介绍

选项通常用来配置客户端的可选参数,如DNS地址、默认网关等。

(1)option routers ip地址 #为客户端指定默认网关

(2)option subnet-mask 子网掩码 #设置客户端的子网掩码

(3)option domain-name-servers ip地址 #为客户端指定DNS服务器

选项可在全局中配置,也可在局部配置

租约数据库文件:包含客户端主机名、MAC、分配ip、ip有效期。

cat /var/lib/dhcpd/dhcpd.leases

ip绑定用于给客户端分配固定ip地址。通过MAC地址与ip地址的对应关系为指定的物理地址计算机分配固定ip

(1)host 主机名 {...} #用于定义保留地址

(2)hardware 类型 硬件地址 #定义网络接口类型和硬件地址。常用类型为以太网(ethernet),地址为MAC地址。

(3)fixed-address ip地址 #定义DHCP客户端指定的ip

(1)通常搭配subnet声明使用(2)(3)只能用于host声明中

service dhcpd configtest配置文件语法测试

dhclient客户端工具

    -d前台工作


CENTOS7:服务控制机制

systemctl is-enabled daemon.service查看是否开机启动

systemctl enable daemon.service开机自动启动

systemctl disable daemon.service禁止开机自动启动

systemctl {start|stop|restart|status} daemon.service启动、停止、重启、状态

总结:

    dhcpd.conf

        option domain-name

        option domain-name-servers

        option routers

        

        subnet NETWORK netmask MASK{

            range START_IP END_IP;


            host HOSTID{

                hardware ethernet 0:11:22;

                fixed-address ip;

            }   

        }

题外:/etc/resolv.conf 

“search domainname.com”表示当提供了一个不包括完全域名的主机名时,在该主机名后添加domainname.com的后缀;