Linux系统下搭建DHCP服务器

来源:互联网 发布:田径运动会编排软件 编辑:程序博客网 时间:2024/04/28 08:51

 在常见的小型网络中,网络管理员通常采用手工分配IP地址的方法,而到了大、中型网络,这种方法就不太适用了。在大、中型网络,特别是大型网络中,往往有超过100台的客户机,手动分配IP地址的方法就就比较困难了。因此,我们必须引入一种高效的IP地址分配方法,幸好,DHCP(DynamicHostConfigurationProtocol)为我们解决了这一难题。

  动态主机配置协议 (DHCP) 是一种简化主机 IP 配置管理的 TCP/IP 标准。DHCP 标准为 DHCP 服务器的使用提供了一种有效的方法:即管理 IP 地址的动态分配以及网络上启用 DHCP 客户机的其他相关配置信息。

  TCP/IP 网络上的每台计算机都必须拥有唯一的IP 地址。IP 地址(以及与之相关的子网掩码)标识主计算机及其连接的子网。将计算机移动到不同的子网时,必须更改 IP 地址。DHCP 允许您从本地网络上的 DHCP 服务器 IP 地址数据库中为客户机动态指派 IP 地址。

  DHCP 避免了由于需要手动在每个计算机上键入值而引起的配置错误。DHCP 还有助于防止由于在网络上配置新的计算机时重用以前指派的 IP 地址而引起的地址冲突。

  使用DHCP服务器可以大大降低用于配置和重新配置网上计算机的时间。可以配置服务器以便在指派地址租约时提供其他配置值的全部范围。这些值是使用 DHCP 选项指派的。

  另外,DHCP租约续订过程还有助于确保客户机配置需要经常更新的情况(如使用移动或便携式计算机频繁更改位置的用户),通过客户机直接与 DHCP 服务器通讯可以高效自动地进行这些改动。

  3. 工作流程

  1.发现阶段。

  DHCP 客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCPdiscover发现信息来寻找DHCP服务器,即向地址 255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

  2.提供阶段。

  在网络中接收到DHCPdiscover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer提供信息。

  3.选择阶段。

  如果有多台DHCP服务器向DHCP客户机发来的DHCPoffer提供信息,则DHCP客户机只接受第一个收到的DHCPoffer提供信息,然后它就以广播方式回答一个DHCPrequest请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

  4.确认阶段。

  当 DHCP服务器收到DHCP客户机回答的DHCPrequest请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的 DHCPack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

  5.重新登录。

  以后DHCP客户机每次重新登录网络时,就不需要再发送DHCPdiscover发现信息了,而是直接发送包含前一次所分配的IP地址的 DHCPrequest请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCPack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCPnack否认信息。当原来的DHCP客户机收到此DHCPnack否认信息后,它就必须重新发送DHCPdiscover发现信息来请求新的 IP地址。

  6.更新租约。

  DHCP 服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

  DHCP服务器安装配置

  4.1 安装

  ~# aptitude install dhcp3-server dhcp3-common

  当前版本 3.0.4-6

  安装过程中会自动创建 /etc/default/dhcp3-server

  4.2 配置文件:

  /etc/dhcp3/dhcpd.conf

  /etc/init.d/dhcp3-server

  http://www.isc.org/sw/dhcp/

  /etc/dhcp3/dhcpd.conf通常包括三部分:parameters、declarations 、option。

  parameters(参数):表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户。

  参数                            解释

  ddns-update-style               配置DHCP-DNS 互动更新模式。

  default-lease-time              指定确省租赁时间的长度,单位是秒。

  max-lease-time                  指定最大租赁时间长度,单位是秒。

  hardware                        指定网卡接口类型和MAC地址。

  server-name                     通知DHCP客户服务器名称。

  get-lease-hostnames flag        检查客户端使用的IP地址。

  fixed-address ip                分配给客户端一个固定的地址。

  authritative                    拒绝不正确的IP地址的要求。

  declarations (声明):用来描述网络布局、提供客户的IP地址等:

  声明                            解释

  shared-network                  用来告知是否一些子网络分享相同网络。

  subnet                          描述一个IP地址是否属于该子网。

  range 起始IP 终止IP             提供动态分配IP 的范围。

  host                            主机名称参考特别的主机。

  group                           为一组参数提供声明。

option(选项):用来配置DHCP可选参数,全部用option关键字作为开始:

  选项                            解释

  subnet-mask                     为客户端设定子网掩码。

  domain-name                     为客户端指明DNS名字。

  domain-name-servers             为客户端指明DNS服务器IP地址。

  host-name                       为客户端指定主机名称。

  routers                         为客户端设定默认网关。

  broadcast-address               为客户端设定广播地址。

  ntp-server                      为客户端设定网络时间服务器IP地址。

  time-offset                    为客户端设定和格林威治时间的偏移时间,单位是秒。

  下边是一个简单的配置文件示例:

  $ cat /etc/dhcp3/dhcpd.conf

  ddns-update-style none;

  authoritative;

  log-facility local7;

  subnet 192.168.100.0 netmask 255.255.255.0 {

  range 192.168.100.129 192.168.100.200;

  option domain-name-servers 202.98.198.168, 202.98.192.68;

  option domain-name "mydebian.org";

  option routers 192.168.100.1;

  option broadcast-address 192.168.100.255;

  default-lease-time 600;

  max-lease-time 7200;

  }

  host hostname {

  hardware ethernet 00:0C:29:44:73:BE;

  fixed-address 192.168.100.128;

  }

  4.3 服务器的启动与停止

  dhcp服务器的启动

  ~# /etc/init.d/dhcp3-server start

  dhcp服务器的停止

  ~# /etc/init.d/dhcp3-server stop

  dhcp服务器的重启

  ~# /etc/init.d/dhcp3-server restart

  当出现错误时,可以通过查看日志文件/var/log/syslog来获取详细的错误信息,以找出错误所在!

  如果主机上装有多个网卡,则可以通过修改/etc/default/dhcp3-server文件,来指定DHCP服务器监听的接口, 比如

  $ cat /etc/default/dhcp3-server

  INTERFACES="eth0 eth1"

  则指定DHCP服务器仅对第一,二块网卡接口进行监听,也可以通过直接修改/etc/init.d/dhcp3-server服务器启动脚本的INTERFACES项来指定要监听的端口, 比如

  INTERFACES="eth0"

  仅对第一块网卡接口进行监听

  4.4 租期数据库

  在 DHCP 服务器第一次启动时, 会自动创建 /var/lib/dhcp3/dhcpd.leases 文件, 用于存放DHCP 的客户租期信息。不应该对该文件进行手动修改。每分配一个IP地址, 相关信息就会自动写入该文件。这些信息包括租期的长度;IP 地址被分配的对象;租期的开始和终止日期; 以及客户机的网卡 MAC 地址。

  该中所用的时间是格林威治标准时间(GMT)。随着IP地址的分配,该文件不时的被重建:首先,所有已知的租期会被储存到一个临时的租期文件中,dhcpd.leases 文件被重命名为 dhcpd.leases ,然后,临时租期数据库被写入 dhcpd.leases 文件。

  在租期数据被重命名为备份文件,新文件被写入之前,DHCP 守护进程有可能被杀死,系统也有可能会崩溃。如果发生了这种情况,启动服务所需的 dhcpd.leases 文件就不会存在。这时,请不要创建新租期文件。因为这样做会丢失所有原有的旧租期文件,从而导致更多问题。正确的办法是把 dhcpd.leases 备份文件重命名为 dhcpd.leases,然后再启动守护进程。

  tonybox:~# ls -l /var/lib/dhcp3/

  total 8

  -rw-r--r-- 1 root root 1664 2006-09-13 00:36 dhcpd.leases

  -rw-r--r-- 1 root root 1664 2006-09-12 05:36 dhcpd.leases~

  管理员可以通过查看/var/lib/dhcp/dhcpd.leases文件来监督IP资源的分配情况。

  dhcpd.leases文件的格式如下:

  Leases address {statement}

  下边是我的dhcpd.leases文件中的一部分:

  lease 192.168.100.200 {#DHCP服务器分配的IP地址#

  starts 1 2006/09/11 19:54:26;# lease 开始租约时间#

  ends 1 2006/09/11 20:04:26;# lease 结束租约时间#

  tstp 1 2006/09/11 20:04:26;

  binding state active;

  next binding state free;

  hardware ethernet 00:0c:29:44:73:be;#客户机网卡MAC地址#

  }

  4.5 DHCP 客户端的配置

  如果客户端通过DHCP服务器来获取相关的网络信息的话, 可以做如下操作:修改/etc/network/interfaces为如下内容:

  auto lo

  iface lo inet loopback

  auto eth0

  iface eth0 inet dhcpi

  完成后, 重启网络服务:

  # /etc/init.d/network restart

  使用 ifconfig 命令, 来检查效果