Linux操作系统第9章动态主机配置协议DHCP9.1DHCP简介9.2DHCP的配置9.3DHCP服务器的高级配置9.4DHCP故障排除习题Linux操作系统9.1DHCP简介9.1.1为什么需要DHCPTCP/IP协议目前已经成为互联网的公用通信协议,在局域网上也是必不可少的协议。用TCP/IP协议进行通信时,每一台计算机(主机)都必须拥有一个IP地址用于在网络上标识自己。如果IP地址的设置是由系统管理员在每一台计算机上手工进行设置,把它设定为一个固定的IP地址时,就称为静态IP地址。Linux操作系统设定静态的IP地址是常见的方法之一,但在许多场合并不适用。如果网络的规模较大,系统管理员给每一台计算机分配IP地址的工作量就会很大,而且常常因为用户不遵守规则而会出现错误,例如:导致IP地址的冲突等。在把大批计算机从一个网络移动到另一个网络或者改变部门计算机所属子网时,同样存在改变IP地址的工作量大的问题。随着笔记本电脑的普及,移动办公也是大家习以为常的事,当电脑从一个网络移动到另一网络时,则每次移动也需要改变IP地址,并且移动的电脑在每个网络都需要占用一个IP地址。Linux操作系统我们再来看看IP地址的占用问题。如果某个网络上有200台计算机,采用静态IP地址时,每台计算机都需要预留一个IP地址,即共需要200个IP地址。然而这200台计算机并不同时开机,假如只有20台计算机同时开机,我们就浪费了180个IP地址。这种情况对于ISP(InternetServiceProvider)来说,是一个十分严重的问题,如果ISP有100 000个用户,难道需要100 000个IP地址不成?因此必须要有方法解决这个问题。DHCP(DynamicHostConfigurationProtocol)就是应这个需求而诞生的。采用DHCP的方法配置计算机IP地址的方案称为动态IP地址。Linux操作系统在动态IP地址的方案中,每台计算机并不设定固定的IP地址,而是在计算机开机时才被分配一个IP地址,这台计算机被称为DHCP客户端(DHCPClient)。而负责给DHCP客户端分配IP地址的计算机称为DHCP服务器。也就是说DHCP是采用客户/服务器(Client/Server)模式,有明确的客户端和服务器角色的划分。DHCP服务器在给DHCP客户分配IP地址(即IP地址租用)的时候,还会有租用时间的限制,超过租用时间时,DHCP服务器就把这个IP地址回收。Linux操作系统回收的IP地址可以重新分配给另一个DHCP客户,这样IP地址就被重复使用,大大提高了IP地址的利用率。移动的计算机在不同的网络上开机时,将会获得它所在网络上的DHCP服务器分配的有效IP地址,也就不必手工更改IP地址的设置了。由于DHCP客户是在开机的时候自动获得IP地址的,因此并不能保证每次获得的IP地址是相同的。动态IP地址方案可以减少管理员的工作量是显而易见的,只要DHCP服务器正常,IP地址的冲突是不会发生的。要大批量更改计算机的所在子网或其他IP参数,只要在DHCP服务器上进行即可。Linux操作系统9.1.2BOOTP引导程序协议DHCP是对BOOTP的扩展,所以我们要先介绍BOOTP(BOOTstrapProtocol)。BOOTP也称为自举协议,它使用UDP来使一个工作站自动获取配置信息。为了获取配置信息,协议软件广播一个BOOTP请求报文,收到请求报文的BOOTP服务器查找出发出请求的计算机的各项配置信息(如IP地址、默认路由地址、子网掩码等),将配置信息放入一个BOOTP应答报文,并将应答报文返回给发出请求的计算机。Linux操作系统这样,一台计算机就获得了所需的配置信息。由于计算机发送BOOTP请求报文时还没有IP地址,因此它会使用全广播地址作为目的地址,而使用全“0”作为源地址,BOOTP服务器可使用广播(Broadcast)将应答报文返回给计算机,或使用收到的广播帧上的MAC地址进行单播(Unicast)。Linux操作系统但是,BOOTP设计用于相对静态的环境,管理人员创建一个BOOTP配置文件,该文件定义了每一个主机的一组BOOTP参数。配置文件只能提供主机标识符到主机参数的静态映射,如果主机参数没有要求变化,BOOTP的配置信息通常保持不变。配置文件不能快速更改,此外管理员必须为每一主机分配一个IP地址,并对服务器进行相应的配置,使它能够理解从主机到IP地址的映射。由于BOOTP是静态配置IP地址和IP参数的,不可能充分利用IP地址和减少配置的工作量,因此有必要引入自动机制。Linux操作系统9.1.3DHCP动态主机配置协议DHCP是对BOOTP的扩充,此协议从两个方面对BOOTP进行有力的扩充。第一,DHCP可使计算机通过一个消息获取它所需要的配置信息,例如,一个DHCP报文除了能获得IP地址,还能获得子网掩码、网关等。第二,DHCP允许计算机快速动态获取IP地址,为了使用DHCP的动态地址分配机制,管理员必须配置DHCP服务器使得它能够提供一组IP地址。任何时候一旦有新的计算机连到网络上,新的计算机与服务器联系,并申请一个IP地址。服务器从管理员指定的IP地址中选择一个地址,并将它分配给该计算机。Linux操作系统DHCP允许有三种类型的地址分配。第一种,和BOOTP类似,DHCP允许手工配置,管理员可为特定的某个计算机配置特定的地址。第二种,管理员可为第一次连接到网络的计算机分配一个固定的地址。第三种,DHCP允许完全动态配置,服务器可使计算机在一段时间内“租用”一个地址。Linux操作系统动态地址分配是DHCP的最重要和新颖的功能,与BOOTP所采用的静态分配地址不同的是,动态IP地址的分配不是一对一的映射,服务器不能预先知道客户机的身份。我们通过配置DHCP服务器使得任意一个主机都可以获得IP地址并开始通信。为了使自动配置成为可能,DHCP服务器一开始就拥有网络管理员交给它的一组IP地址,管理员定义服务器操作的规定,DHCP客户机通过与服务器交换信息协商IP地址的使用。在交换中,服务器为客户机提供IP地址,客户机确认它已经接收此地址。一旦客户机接收了一个地址,它就开始使用此地址进行通信。Linux操作系统将所有的TCP/IP参数保存在DHCP服务器有以下的好处:(1)管理员能够快速地检查IP地址及其他配置参数而不必前往每一台计算机,此外由于DHCP的数据库可以在一个中心位置(即DHCP服务器)完成更改,因此重新配置时也无需对每一台主机进行配置。(2) DHCP不会将相同的IP地址同时分配给两台主机,从而避免了冲突。Linux操作系统9.1.4DHCP的工作过程DHCP的工作过程如图9-1所示。Linux操作系统接收?DHCP客户机(1)(2)(3)(4)广播DHCPDISCOVER提供一个IP地址DHCPOFFERN:使用以前的配置Y:请求选择的IP地址,DHCPREQUEST确认,其他配置信息,DHCPACKARP检查(5)N:拒绝服务,DHCPDECLINEY:正确进行客户端的配置DHCP服务器(6)放弃租用,DHCPRELEASE图9-1DHCP的工作过程Linux操作系统(1) DHCP客户机启动时,客户机在当前的子网中广播DHCPDISCOVER报文向DHCP服务器申请一个IP地址。(2) DHCP服务器收到DHCPDISCOVER报文后,它将从针对那台主机的地址区间中为它提供一个尚未被分配出去的IP地址,并把提供的IP地址暂时标记为不可用。服务器以DHCPOFFER报文送回给主机。如果网络里包含有不止一个的DHCP服务器,则客户机可能收到好几个DHCPOFFER报文,但客户机通常只承认第一个DHCPOFFER。Linux操作系统(3)客户端收到DHCPOFFER后,向服务器发送一个含有有关DHCP服务器提供的IP地址的DHCPREQUEST报文。如果客户端没有收到DHCPOFFER报文并且还记得以前的网络配置,此时使用以前的网络配置(如果该配置仍然在有效期限内)。(4) DHCP服务器向客户机发回一个含有原先被发出的IP地址及其分配方案的一个应答报文(DHCPACK)。Linux操作系统(5)客户端接收到包含了配置参数的DHCPACK报文,利用ARP检查网络上是否有相同的IP地址。如果检查通过,则客户机接受这个IP地址及其参数,如果发现有问题,客户机向服务器发送DHCPDECLINE信息,并重新开始新的配置过程。服务器收到DHCPDECLINE信息,将该地址标为不可用。Linux操作系统(6) DHCP服务器只能将那个IP地址分配给DHCP客户一定时间,DHCP客户必须在该次租用过期前对它进行更新。客户机在50%租借时间过去以后,每隔一段时间就开始请求DHCP服务器更新当前租借,如果DHCP服务器应答则租用延期。如果DHCP服务器始终没有应答,则在有效租借期的87.5%,客户应该与任何一个其他的DHCP服务器通信,并请求更新它的配置信息。Linux操作系统如果客户机不能和所有的DHCP服务器取得联系,租借时间到后,它必须放弃当前的IP地址并重新发送一个DHCPDISCOVER报文开始上述的IP地址获得过程。(7)客户端可以主动向服务器发出DHCPRELEASE报文,将当前的IP地址释放。Linux操作系统9.1.5DHCP功能的进一步讨论从以上的讨论中,可以看到DHCP可以提高IP地址的利用率,减少IP地址的管理工作量,便于移动用户的使用。但要注意的是,由于客户机每次获得的IP地址不是固定的(当然现在的DHCP已经可以针对某一计算机分配固定的IP地址),如果想利用某主机对外提供网络服务(例如Web服务、DNS服务)等,动态的IP地址是不可行的,这时通常要求采用静态IP地址配置方法。此外对于一个只有几台计算机的小网络,DHCP服务器则显得有点多余。Linux操作系统利用TCP/IP进行通信,光有IP地址是不够的,常常需要网关、WINS、DNS等设置。DHCP服务器除了能动态提供IP地址外,还能同时提供WINS、DNS主机名、域名等附加信息,完善IP地址参数的配置。Linux操作系统9.2DHCP的配置9.2.1DHCP服务器的配置DHCP服务器的配置步骤主要有:(1)安装DHCP服务器软件包。(2)配置/etc/dhcpd.conf文件。(3)生成dhcpd.leases文件。(4)启动dhcpd服务。Linux操作系统1.安装DHCP软件包用“rpm-qa|grepdhcpd”命令确认DHCP服务器软件包是否已经存在,如果不存在,需先把红旗Linux3.0光盘mount上,在RedFlag/RPMS目录下找到软件包,用“rpm–ivhdhcp-2.0pl5-4.i386.rpm”命令进行安装。Linux操作系统【实例9.1】[root@redflag/root]#rpm-qa|grepdhcpdhcp-2.0pl5-4dhcpcd-1.3.18pl8-10以上说明服务器软件包dhcp-2.0pl5-4已经存在。Linux操作系统2.配置/etc/dhcpd.conf文件要向一个子网提供服务,DHCP服务器的守护进程dhcpd需要知道它提供服务的子网号和子网掩码,此外为了分配动态IP地址,还必须在每一个子网提供一个或多个IP地址范围。以下是一个非常简单的配置文件。Linux操作系统【实例9.2】subnet192.168.0.0netmask255.255.255.0{#IP地址范围。range192.168.0.100192.168.0.199;}DHCP服务器将向192.168.0.0/255.255.255.0子网提供192.168.0.100到192.168.0.199的IP地址。配置时,除了括号所在行外的其他每一行要加“;”号,以“#”号开头的语句是注释语句。Linux操作系统【实例9.3】subnet192.168.0.0netmask255.255.255.0{range192.168.