1 DHCP原理
1.1 DHCP概述
      DHCP(Dynamic Host Configuration Protocal)就是动态主机配置协议哈,可以自动配置主机的IP地址、子网掩码、网关及DNS等TCP/IP信息。所以DHCP可以有效地降低客户端IP地址配置的复杂度和网络的管理成本。如果路由器能够转发DHCP请求,只需要在一个子网中配置DHCP服务器就可以向其他子网提供TCP/IP配置的服务支持哈~~
1.2 DHCP的应用环境
      DHCP主要应用在以下两个应用环境,一个就是局域网中存在大量主机,第二种就是局域网中存在比较多的移动办公设备。
1.3 DHCP术语
DHCP服务器:配置DHCP服务的计算机
DHCP客户端:启用DHCP设置的计算机
作用域:一个完整连续的可用IP地址范围,DHCP服务主要就是通过作用域来管理网络分布、IP地址分配及其他相关配置参数。
超级作用域:管理级的作用域集合,用于支持同一物理网络上的多个逻辑IP子网。超级作用域包含子作用域的列表,对子作用域进行统一管理。
排除范围:排除范围是作用域内从DHCP服务中排除的有限IP地址序列。排除范围确保在这些范围中的任何地址都不是由网络上的服务器提供给DHCP 客户机的。
地址池:在定义DHCP作用域并应用排除范围之后,剩余的地址在作用域内形成可用地址池,也就是作用域中包含的可用IP地址范围哈,地址池中的地址可以由DHCP服务器动态分配给DHCP客户机。
租约:客户计算机可以使用动态分配的IP地址的时间,这个时间可以由DHCP服务器设定哈。当向一台客户机发出租约后,此租约就被看作是活动的,在租约终止前,客户机可以向DHCP服务器更新其租约。当租约到期或被服务器删除后,它就变成不活动的了,租约持续时间决定了租约什么时候终止及客户机隔多久向DHCP服务器更新其租约。
预约:创建从DHCP服务器到客户机的永久地址租约指定,预约可以保证子网上的特定硬件设备总是使用相同的IP地址,这对于远程访问网关、DNS服务器等必须要配置IP地址的计算机非常有用。
选项类型:DHCP服务器向DHCP客户机提供租约服务时可以指定的其他客户机配置参数。典型地这些选项类型由各个作用域启用和配置。虽然大多数选项都是在RFC2132中预定义了,但若需要的话,我们还是可以使用DHCP管理器定义并添加自定义选项类型。
选项类别:DHCP服务用于进一步提供给客户机的选项类型的方法。选项类别可以在用户的DHCP服务器上配置以提供特定的客户机支持。当一个选项类别添加到服务器后,就可以为该类别的客户机配置提供特定类别的选项类型。
1.4 DHCP工作原理
我们来了解下DHCP的工作原理哈~~
(1)当DHCP客户机第一次登录网络时,如果客户机上没有任何IP信息设定,它会向网络发出DHCP DISCVER数据包,为保证服务器能够接收到请求,数据包源地址设定为0.0.0.0,而目的地址为255.255.255.255,以广播形式发送DHCP DISCOVER的信息。
(2)当DHCP服务器监听到客户端发出的DHCP DISCOVER广播后,它会从那些还没有租出的地址范围内选择可用的IP及其他TCP/IP设定以DHCP OFFER数据包的形式发送给客户机。
(3)如果客户端收到网络上多台DHCP服务器的响应,客户端会挑选最快的一个DHCP OFFER并向网络发送一个DHCP REQUEST广播封包,告诉所有DHCP服务器它将使用哪一台服务器提供的IP地址。同时,客户端还会向网络发送ARP广播数据包,查询网络上面有没有其他机器使用该IP地址,如果发现该IP地址已经被占用,客户端则会发送一个DHCP DECLINE数据包给DHCP服务器,拒绝接受其DHCP OFFER,并重新发送DHCP REQUEST信息。
注:实际上并不是所有DHCP客户端都会无条件接受DHCP服务器的响应,客户端可以保留自己的一些TCP/IP设定,比如网关、DNS地址等等哈~~~
(4)将地址分配给客户端后,DHCP服务器会发送一个DHCP ACK消息,以确认IP租约的正式生效,结束完整的DHCP工作过程。
(5)DHCP客户端成功地从服务器取得IP地址之后,一般不需要再发送DHCP DISCOVER信息了,除非其租约已经到期或者IP地址重新设定回0.0.0.0。此时客户端会直接使用已经租用到的IP地址向为其发此IP地址的DHCP服务器发出DHCP REQUEST信息,DHCP服务器会尽量让客户端使用原来的IP地址,如果没有特殊的情况,会直接响应DHCP ACK,允许客户端继续使用该IP地址。如果该地址已经失效或者已经被其他主机使用了,服务器则会响应一个DHCP NACK数据包给客户端,要求其重新执行DHCP DISCOVER。
注意:客户端执行DHCP DISCOVER后,如果没有DHCP服务器响应客户端的请求,客户端会随机使用169.254.0.0/16网段中的一个IP地址配置本机地址。
2 安装DHCP服务
2.1 DHCP所需软件
dhcp-3.0.5-7.el5.i386.rpm
这是DHCP主程序包,包括DHCP服务和中继代理程序,安装该软件包进行相应配置,即可以为客户机动态分配IP地址及其他TCP/IP信息。
dhcp-devel-3.0.5-7.el5.i386.rpm
这是DHCP服务器开发工具软件包,为DHCP开发提供库文件支持。
dhcpv6-0.10-33.el5.i386.rpm
这是DHCP的IPv6扩展工具,使DHCP服务器能够支持IPv6的最新功能,如IPv6地址的动态配置以及IPv6中继代理等等哈~~
dhcpv6_client-0.10-33.el5.i386.rpm
这是DHCP客户端IPv6软件包,帮助客户端获取动态IP地址。
2.2 DHCP的安装
我们先检测下系统是否已经安装了DHCP相关软件哈~:rpm -qa | grep dhcp
我们安装DHCP主程序包哈~
如果需要我们还可以安装DHCP服务器开发工具软件包和DHCP的IPv6扩展工具
安装完后我们再查询下哈~
3 DHCP常规服务器配置
基本的DHCP服务器搭建流程:
(1)编辑主配置文件dhcpd.conf,指定IP作用域(指定一个或多个IP地址范围)。
(2)建立租约数据库文件。
(3)重新加载配置文件或重新启动dhcpd服务使配置生效。
DHCP工作流程:
 
(1)客户端发送广播向服务器申请IP地址。
(2)服务器收到请求后查看主配置文件dhcpd.conf,先根据客户端的MAC地址查看是否为客户端设置了固定IP地址。
(3)如果为客户端设置了固定IP地址则将该IP地址发送给客户端。如果没有设置固定IP地址,则将地址池中的IP地址发送给客户端。
(4)客户端收到服务器回应后,客户端给于服务器回应,告诉服务器已经使用了分配的IP地址。
(5)服务器将相关租约信息存入数据库。
3.1 主配置文件dhcpd.conf
1)dhcpd.conf主配置文件组成部分
parameters(参数)
declarations(声明)
option(选项)
2)dhcpd.conf主配置文件整体框架
dhcpd.conf包括全局配置局部配置
全局配置可以包含参数或选项,该部分对整个DHCP服务器生效。
局部配置通常由声明部分来表示,该部分仅对局部生效,比如只对某个IP作用域生效哈~
dhcpd.conf文件格式:
#全局配置    
参数或选项;                     #全局生效    

#局部配置    
声明 {    
                参数或选项;            #局部生效    
}
当DHCP主程序包安装好后会自动生成主配置文件的范本文件/usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample
而在/etc目录下会建立一个空白的dhcpd.conf主配置文件。
现在我们将范本配置文件复制到/etc目录下替换掉空白dhcpd.conf主配置文件。
dhcp范本配置文件内容包含了部分参数、声明以及选项的用法,其中注释部分可以放在任何位置,并以“#”号开头,当一行内容结束时,以“;”号结束,大括号所在行除外哈~~~
可以看出整个配置文件分成全局和局部两个部分。但是并不容易看出哪些属于参数,哪些属于声明和选项哈~
3.2 常用参数介绍
参数主要用于设置服务器和客户端的动作或者是否执行某些任务,比如设置IP地址租约时间、是否检查客户端所用的IP地址等等哈~
常见参数使用如下:
(1)ddns-update-style (none|interim|ad-hoc)
作用:定义所支持的DNS动态更新类型。
none:表示不支持动态更新
interim:表示DNS互动更新模式
ad-hoc:表示特殊DNS更新模式
注意:这个选项是必选参数哈,配置文件中必须包含这一个参数并且要放在第一行。
(2)ignore client-updates
作用:忽略客户端更新
注意:这个参数只能在服务器端使用。
(3)default-lease-time number(数字)
作用:定义默认IP租约时间
(4)max-lease-time number(数字)
作用:定义客户端IP租约时间的最大值
注意:(3)、(4)都是以秒为单位的租约时间,该项参数可以作用在全局配置中,也可以作用在局部配置中。
3.3 常用声明介绍
声明一般用来指定IP作用域、定义为客户端分配的IP地址池等等哈~
声明格式如下:
声明 {    
                选项或参数;    
}
常见声明的使用如下:
(1)subnet 网络号 netmask 子网掩码 {......}
作用:定义作用域,指定子网
注意:网络号必须与DHCP服务器的网络号相同
(2)range 起始IP地址 结束IP地址
作用:指定动态IP地址范围
注意:可以在subnet声明中指定多个range,但多个range所定义IP范围不能重复哈~
3.4 常用选项介绍
 选项通常用来配置DHCP客户端的可选参数,比如定义客户端的DNS地址、默认网关等等。选项内容都是以option关键字开始滴~
常见选项使用如下:
(1)option routers IP地址
作用:为客户端指定默认网关
(2)option subnet-mask 子网掩码
作用:设置客户端的子网掩码
(3)option domain-name-servers IP地址
作用:为客户端指定DNS服务器地址
注意:(1)、(2)、(3)选项可以用在全局配置中,也可以用在局部配置中。
3.5 租约数据库文件
租约数据库文件用于保存一系列的租约声明,其中包含客户端的主机名、MAC地址、分配到的IP地址,以及IP地址的有效期等相关信息。这个数据库文件是可编辑的ASCII格式文本文件。每当发生租约变化的时候,都会在文件结尾添加新的租约记录。
DHCP刚安装好后租约数据库文件dhcpd.leases是个空文件。
当DHCP服务正常运行后就可以使用cat命令查看租约数据库文件内容了
3.9 应用案例II
技术部有200台计算机,采用192.168.8.0/24网段给技术部使用,路由器IP地址为192.168.8.1,DNS服务器IP地址为192.168.8.2,DHCP服务器为192.168.8.3,客户端地址范围为192.168.8.30-192.168.8.254,子网掩码为255.255.255.0,技术总监CIO使用的固定IP地址为192.168.8.88,部门经理使用的固定IP地址为192.168.8.66。
要保证使用固定IP地址的话,就要在subnet声明中嵌套host声明,目的是要单独为总监和经理的主机设置固定IP地址,并在host声明中加入IP地址和MAC地址绑定的选项以申请固定IP地址。
(1)编辑主配置文件dhcpd.conf
(2)大型网络DHCP服务器
如果网络存在较多计算机,为了管理和维护的方便,我们应该配置DHCP服务器来动态分配IP地址,对于大型网络DHCP搭建考虑的因素就要更加全面和周到。
1)DHCP服务器位置
客户端在第一次获取IP地址时发送DHCP DISCOVER消息采用广播形式,这样会造成网络带宽的浪费,并且如果在一段时间内没有接到DHCP服务器的回应,客户端会继续发送DHCP DISCOVER消息,这样会继续增加网络的负担。所以为了提高DHCP服务器的响应时间,搭建DHCP服务器要选择适当的接入位置,尽量使用服务器连接网络核心设置,在上图大型企业网络拓扑中DHCP服务器就直接连接企业网络中的核心交换机哈~
2)DHCP服务器作用域设置
企业中部门职能不同,相应的需求也不相同,管理员需要按照企业的实际需求,设计作用域并进行租约、网关及IP范围的划分。比如销售部人员就一般使用笔记本等移动设备,因业务需要会比较频繁地出差,那么销售部的计算机会不断接入或脱离企业网络,如果IP租约设置过长,移动设备申请并且暂不使用的IP地址无法得到释放,会导致网络中IP资源短缺,所以需要合理规划DHCP服务器的设置。关于大型网络的DHCP配置方法可以参考4.2 DHCP多作用域设置哈~
(3)跨路由网络DHCP服务器
对于大型网络来说DHCP服务器是不可或缺的,如果网络内部划分多个子网并采用路由器进行连接。因为广播数据包无法穿越路由器,所以默认情况下,一个子网内的客户机无法向其他子网的DHCP服务器发送请求,所以需要为每个子网搭建一台DHCP服务器,显然这样会增加硬件成本哈。因此我们可以搭建一台DHCP服务器,同时在连接多个子网的路由器上设置DHCP中继代理就可以利用路由器转发DHCP消息,所有计算机能够通过DHCP服务器获取TCP/IP信息,具体配置可以参考4.3 DHCP中继代理哈~~~
配置存在路由的网络需要注意两点:
1)存在DHCP服务器
一个物理网络被划分为多个逻辑子网,在所有子网中必须存在一台DHCP服务器能够提供TCP/IP信息分配服务。
2)路由器中继代理设置
路由器默认并不转发广播数据包,为了能够转送DHCP DISCOVER消息,必须要在路由器上配置DHCP中继代理。
(4)80/20规则
对于一个物理网络而言,搭建一台DHCP服务器已经可以实现动态IP地址分配,但还是存在不稳定因素,如果一旦仅有的DHCP服务器崩溃,那么客户机将无法获取IP地址。如果我们选择安装多台DHCP服务器,然而DHCP服务器之间没有监督机制,无法保证分配地址没有冲突。
因此我们需要合理划分DHCP服务器的地址池,防止为客户端分配重复的地址。考虑到网络的稳定性,可以选择两台DHCP服务器,采用80/20规则划分DHCP服务器的作用域,一台DHCP服务器作为主服务器,管理80%的网络IP地址,另一台DHCP服务器作为辅助服务器,包含剩余20%的网络地址。日常工作中,分配TCP/IP信息由主DHCP服务器完成,在该服务器不可用时,辅助DHCP服务器才开始工作。此规则适用于多子网的网络拓扑结构,我们可以根据具体需求进行服务器规划。
4.2 DHCP多作用域设置
DHCP服务器使用单一的作用域,大部分时间能够满足网络的需求,但是有些特殊情况下,按照网络规划我们需要配置多作用域。
网络中如果计算机和其他设备数量增加,IP地址需要进行扩容才能满足需求。小型网络可以对所有设备重新分配IP地址,其网络内部客户机和服务器数量较少,实现起来比较简单。但如果是一个大型网络,重新配置整个网络的IP地址是不明智的,如果操作不当,可能会造成通信暂时中断以及其他网络故障。我们可以通过多作用域的设置,即DHCP服务器发布多个作用域实现IP地址增容的目的。
公司IP地址规划为192.168.2.0/24网段,可以容纳254台设备,使用DHCP服务器建立一个192.168.2.0网段的作用域,动态管理网络IP地址,但网络规模扩大到500台机器,显然一个C类网的地址无法满足要求了。这时,可以再为DHCP服务器添加一个新作用域,管理分配192.168.3.0/24网段的IP地址,为网络增加254个新的IP地址,这样既可以保持原有IP地址的规划,又可以扩容现有的网络IP地址。
(1)简单实现DHCP多作用域
对于多作用域的配置,必须保证DHCP服务器能够侦听所有子网客户机的请求信息,下面将讲解配置多作用域的基本方法,为DHCP添加多个网卡连接每个子网,并发布多个作用域的声明。
注意:划分子网时,如果选择直接配置多作用域实现动态IP分配的任务,则必须要为DHCP服务器添加多块网卡,并配置多个IP地址,否则DHCP服务器只能分配与其现有网卡IP地址对应网段的作用域。
采用双网卡实现两个作用域
1)网卡配置IP地址
DHCP服务器有多块网卡时,需要使用ifconfig命令为每块网卡配置独立的IP地址,但要注意,IP地址配置的网段要与DHCP服务器发布的作用域对应哈~
ifconfig eth0 192.168.2.1 netmask 255.255.255.0
ifconfig eth1 192.168.3.1 netmask 255.255.255.0
2)编辑dhcpd.conf主配置文件
当DHCP服务器网络环境搭建完毕后,我们可以编辑dhcpd.conf主配置文件完成多作用域的设置。
ddns-update-style none;
ignore client-updates;
subnet 192.168.2.0 netmask 255.255.255.0 {
# --- default gateway
        option routers                  192.168.2.1;
        option subnet-mask              255.255.255.0;
        option nis-domain               "domain.org";
        option domain-name              "domain.org";
        option domain-name-servers      192.168.2.2;
        option time-offset              -18000; # Eastern Standard Time
#       option ntp-servers              192.168.1.1;
#       option netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;
        range dynamic-bootp 192.168.2.50 192.168.2.250;
        default-lease-time 21600;
        max-lease-time 43200;
        # we want the nameserver to appear at a fixed address
        host ns {
                next-server marvin.redhat.com;
                hardware ethernet 12:34:56:78:AB:CD;
                fixed-address 207.175.42.254;
        }
}
subnet 192.168.3.0 netmask 255.255.255.0 {
# --- default gateway
        option routers                  192.168.3.1;
        option subnet-mask              255.255.255.0;
        option nis-domain               "domain.org";
        option domain-name              "domain.org";
        option domain-name-servers      192.168.2.2;
        option time-offset              -18000; # Eastern Standard Time
#       option ntp-servers              192.168.1.1;
#       option netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;
        range dynamic-bootp 192.168.3.50 192.168.3.250;
        default-lease-time 21600;
        max-lease-time 43200;
        max-lease-time 43200;
}
保存退出哈~
3)测试验证
重启DHCP服务后检查系统日志,检测配置是否成功,使用tail命令动态显示日志信息。
tail -F /etc/log/messages
(2)DHCP超级作用域功能及实现
对于多作用域设置,使用多网卡的方式,虽然可以达到扩展可用IP地址范围的目的,但会增加网络拓扑的复杂性,并加大维护的难度。而如果想保持现有网络的结构,并实现网络扩容,可以选择采用超级作用域。
超级作用域是DHCP服务器的一种管理功能,使用超级作用域可以将多个作用域组合为单个管理实体,进行统一的管理操作。
使用超级作用域,DHCP服务器能够具备以下功能:
  • 通过这种方式,DHCP服务器可为单个物理网络上的客户机提供多个作用域的租约。
  • 支持DHCP和BOOTP中继代理,能够为远程DHCP客户端分配TCP/IP信息,搭建DHCP服务器时,可以根据网络部署需求,选择使用超级作用域。
  • 现有网络IP地址有限,而且需要向网络添加更多的计算机,最初的作用域无法满足要求,需要使用新的IP地址范围扩展地址空间。
  • 客户端需要从原有作用域迁移到新作用域;当前网络对IP地址进行重新规划,使客户端变更使用的地址,使用新作用域声明的IP地址。
关于超级作用域的配置,在dhcpd.conf配置文件中有固定格式
shared-network 超级作用域名称 {                #作用域名称,标示超级作用域
        
                                    [参数]
                                                                                                                                                                                                                                                 #该参数对所有子作用域有效,可以不配置        
                                subnet 子网编号 netmask 子网掩码 {        
                                [参数]        
                                [声明]        
}    
}
 
企业内部建立DHCP服务器,网络规划采用单作用域的结构,使用192.168.0.0/24网段的IP地址。随着公司规模扩大,设备数量增多,现有的IP地址无法满足网络的需求,需要添加可用的IP地址。这时我们可以使用超级作用域完成增加IP地址的目的,在DHCP服务器上添加新的作用域,使用192.168.8.0/24网段扩展网络地址的范围。
修改dhcpd.conf配置文件,建立超级作用域并添加新作用域。
检测配置文件:dhcpd
重启dhcpd服务
注意:DHCP服务器启用超级作用域能够方便地为网络中的客户机提供分配IP地址的服务,但是超级作用域可能由多个作用域组成,那么分配给客户机的IP地址也可以并不在同一个网段,这个时候,这些客户机互相访问和访问外网就成了问题,我们可以对网关配置多个IP地址,并在每个作用域中设置对应的网关IP地址,就可以使用客户机通过网关与其他不在同一网段的计算机进行通信哈~
4.3 DHCP中继代理
在ISC DHCP软件中提供的中继代理程序为dhcrelay,通过简单的配置就可以完成DHCP的中继设置,启动dhcrelay的方式为将DHCP请求中继到指定的DHCP服务器。
dhcrelay命令格式:
开户所有网络接口的DHCP中继功能,转发到指定DHCP服务器
dhcrelay DHCP服务器地址
开启指定网络接口的DHCP中继功能
dhcrelay -i 网卡 DHCP服务器地址
公司内部存在两个子网,分别为192.168.2.0/24,192.168.3.0/24,现在需要使用一台DHCP服务器为这两个子网客户机分配IP地址。
(1)配置DHCP服务器
配置DHCP服务器IP地址
DHCP服务器位于LAN1,需要为LAN1和LAN2的客户机分配IP地址,也就是申明两个网段,这里可以建立两个作用域,声明192.168.2.0/24和192.168.3.0/24网段。
(2)配置DHCP中继代理
1)配置网卡IP地址
根据网络拓扑图设置DHCP服务器网卡IP地址
2)启用中继代理
在DHCP中继代理计算机上安装dhcp-3.0.5-7.el5.i386.rpm软件包。
中继代理计算机默认不转发DHCP客户机的请求,需要使用dhcrelay指定DHCP服务器的位置。
(3)客户端测试验证
在LAN2中选择客户机测试能否正常获取DHCP服务器的IP地址。