Linux系统下配置DHCP服务器介绍(1)

  • 摘要:DHCP是指动态主机设置协议,即Dynamic Host Configuration Protocol。是指一个局域网的网络协议,使用UDP协议工作。主要有两个用途:给内部网络或网络服务供应商自动分配IP地址给用户给内部网络管理员 作为对所有计算机作中央管理的手段。本文为您介绍了在linux操作系统下如何配置DHCP服务器。
  • 标签:Linux  DHCP  服务器
  •  

本文以Redhat  Linux 9.0 为例,介绍如何建立一个完整和安全的DHCP 服务器

 DHCP是动态主机配置协议。用于向计算机自动提供IP地址,子网掩码和路由信息。网络管理员通常会分配某个范围的IP地址来分发给局域网上的客户机。当设备接入这个局域网时,它们会向 DHCP 服务器请求一个 IP 地址,然后为每个请求的设备分配一个地址。

一、建立DHCP服务器配置文件

可以使用Redhat Linux 9.0自身携带rpm包安装。安装结束后, DHCP 端口监督程序 dhcpd配置文件是/etc目录中的名为dhcpd.conf的文件。下面手工建立/etc/dhcpd.conf文件。/etc /dhcpd.conf通常包括三部分:parameters、declarations 、option。

1.DHCP配置文件中的parameters(参数):表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户。主要内容见表1

参数解释
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地址的要求。

2. DHCP配置文件中的declarations (声明):用来描述网络布局、提供客户的IP地址等。主要内容见表2:

声明解释
shared-network 用来告知是否一些子网络分享相同网络。
subnet 描述一个IP地址是否属于该子网。
range 起始IP 终止IP 提供动态分配IP 的范围。
host 主机名称 参考特别的主机。
group 为一组参数提供声明。
allow unknown-clients;deny unknown-client 是否动态分配IP给未知的使用者。
allow bootp;deny bootp 是否响应激活查询。
allow booting;deny booting 是否响应使用者查询。
filename 开始启动文件的名称,应用于无盘工作站。
next-server 设置服务器从引导文件中装如主机名,应用于无盘工作站。

3. DHCP配置文件中的option(选项):用来配置DHCP可选参数,全部用option关键字作为开始,主要内容包括见表3:

选项解释
subnet-mask 为客户端设定子网掩码。
domain-name 为客户端指明DNS名字。
domain-name-servers 为客户端指明DNS服务器IP地址。
host-name 为客户端指定主机名称。
routers 为客户端设定默认网关。
broadcast-address 为客户端设定广播地址。
ntp-server 为客户端设定网络时间服务器IP地址。
time-offset 为客户端设定和格林威治时间的偏移时间,单位是秒。

注意:如果客户端使用的是视窗操作系统,不要选择"host-name"选项,即不要为其指定主机名称。

下面是一个笔者使用的DHCP配置文件,这是一个C类网络,共126个IP地址可以分配的例子。读者可以复制后使用。

 
  
  1. ddns-update-style interim;   
  2. ignore client-updates;  
  3.  
  4. subnet 192.168.1.0 netmask 255.255.255.0 {  
  5.  
  6. option routers 192.168.1.254;  
  7.  
  8. option subnet-mask 255.255.255.0;  
  9.  
  10. option broadcast-address 192.168.1.255;  
  11.  
  12. option domain-name-servers 192.168.1.3;  
  13.  
  14. option domain-name "www.cao.com"; #DNS名称#  
  15.  
  16. option domain-name-servers 192.168.1.3;  
  17.  
  18.  
  19. option time-offset -18000;   
  20.  
  21.  
  22. range dynamic-bootp 192.168.1.128 192.168.1.255;  
  23.  
  24. default-lease-time 21600;  
  25.  
  26. max-lease-time 43200;  
  27.  
  28. host ns  
  29.  
  30.  {  
  31.  
  32. hardware ethernet 52:54:AB:34:5B:09;#运行DHCP的网络接口的MAC地址#  
  33.  
  34. fixed-address 192.168.1.9;  
  35.  
  36. }  
  37.  
  38. }  

二、建立客户租约文件

运行DHCP服务器还需要一个名为 dhcpd.leases 的文件,保持所有已经分发出去的 IP 地址。在Redhat Linux 发行版本中,该文件位于 /var/lib/dhcp/ 目录中。如果您通过 RPM 安装 ISC DHCP,那么该目录应该已经存在。dhcpd.leases的文件格式为:

 
  
  1. Leases address {statement}   

一个典型的文件内容如下:

 
  
  1. lease 192.168.1.255 { #DHCP服务器分配的IP地址#  
  2.  
  3. starts 1 2005/05/02 03:02:26; # lease 开始租约时间#  
  4.  
  5. ends 1 2005/05/02 09:02:26; # lease 结束租约时间#   
  6.  
  7. binding state active;  
  8.  
  9. next binding state free;  
  10.  
  11. hardware ethernet 00:00:e8:a0:25:86; #客户机网卡MAC地址#  
  12.  
  13. uid "%content%01%content%00%content%00\350\240%\206"; #用来验证客户机的UID标示#  
  14.  
  15. client-hostname "cjh1"; #客户机名称#  
  16.  

注意lease 开始租约时间和lease 结束租约时间是格林威治标准时间(GMT),不是本地时间。

第一次运行DHCP服务器时dhcpd.leases是一个空文件,也不用手工建立。如果不是通过 RPM 安装 ISC DHCP,或者 dhcpd 已经安装,那么您应该试着确定 dhcpd 将其 lease 文件写到何处,并确保该文件存在。也可以手工建立一个空文件:

 
  
  1. #touch /var/lib/dhcp/dhcpd.leases   

三、启动和检查DHCP服务器

使用命令启动DHCP服务器:

 
  
  1. #service dhcpd start   

使用ps命令检查dhcpd进程

 
  
  1. #ps -ef | grep dhcpd  
  2. root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd  
  3. root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd  

使用检查dhcpd运行的端口:

 
  
  1. # netstat -nutap | grep dhcpd  
  2. udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd  

四、配置DHCP客户端

通常网管员使用选择手工配置 DHCP 客户,需要修改 /etc/sysconfig/network 文件来启用联网;并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该目录中,每个设备都有一个叫做 ifcfg-eth? 的配置文件,eth?是网络设备的名称。 如eth0等。如果你想在引导时启动联网,NETWORKING 变量必须 被设为 yes。 除了此处之外/etc/sysconfig/network 文件应该包含以下行:

 
  
  1. NETWORKING=yes 
  2. DEVICE=eth0 
  3. BOOTPROTO=dhcp 
  4. ONBOOT=yes