当前位置: > CentOS > CentOS教程 > 系统配置 >

CentOS 6.5配置和使用DHCPD

时间:2014-06-10 05:17来源:linux.it.net.cn 作者:IT网

DHCP概述

1、采用DHCP的必要性

      在TCP/IP网络上,每台工作站要能存取网络上的资源之前,都必须进行基本的网络配置,一些主要参数诸如IP地址,子网掩码,缺省网关,DNS等必不可少,还可能需要一些附加的信息如IP管理策略之类。对于一个稍微大点的网络而言,网络的管理和维护的任务是相当繁重的。一台计算机从一个子网转移到另一个子网,就要重新对系统进行配置。对于普通水平的工作站用户是不能赋予他们配置自己的工作站网络的权限,而且也没有这个必要。如果一个没有相应技术水平的用户出于好奇或想学习一下的目的错误地更改了工作站的网络配置,造成网络故障,后果不言而喻。因此,需要有一种机制来让TCP/IP的配置和管理从用户端转移到网络管理端,实现IP的集中式管理。解决方案就是用DHCP。

 

2、DHCP的主要功能

      DHCP的全称是动态主机配置协议(Dynamic Host Configuration Protocol),由IETF(Internet 网络工程师任务小组)设计,详尽的协议内容在RFC文档rfc2131和rfc1541里。目的就是为了减轻TCP/IP网络的规划、管理和维护的负担,解决IP地址空间缺乏问题。运行DHCP的服务器把TCP/IP网络设置集中起来,动态处理工作站IP地址的配置,用DHCP租约和预置的IP地址相联系,DHCP租约提供了自动在TCP/IP网络上安全地分配和租用IP地址的机制,实现IP地址的集中式管理,基本上不需要网络管理人员的人为干预。而且,DHCP本身被设计成BOOTP(自举协议)的扩展,支持需要网络配置信息的无盘工作站,对需要固定IP的系统也提供了相应支持。

DHCP的工作原理:

协议结构
  8 bits 16 bits 24 bits 32 bits
Op Htype Hlen Hops
Xid
Secs Flags
Ciaddr
Yiaddr
Siaddr
Giaddr
Chaddr (16 bytes)
Sname (64 bytes)
File (128 bytes)
Option (variable)
  • Op – 消息操作代码,既可以是引导请求(BOOTREQUEST)也可以是引导答(BOOTREPLY)
  • Htype – 硬件地址类型
  • Hlen – 硬件地址长度
  • Xid –处理ID
  • Secs –从获取到IP地址或者续约过程开始到现在所消耗的时间
  • Flags –标记
  • Ciaddr –客户机 IP地址
  • Yiaddr –“你的”(客户机)IP 地址
  • Siaddr –在 bootstrap 中使用的下一台服务器的IP地址
  • Giaddr –用于导入的接替代理IP地址
  • Chaddr –客户机硬件
  • Sname –任意服务器主机名称,空终止符
  • File –DHCP 发现协议中的引导文件名、空终止符、属名或者空,DHCP供应协议中的受限目录路径名
  • Options –可选参数字段。参考定义选择列表中的选择文件

技术细节:

  • DHCP统一使用两个IANA分配的端口作为BOOTP:服务器端使用67/udp,客户端使用68/udp。
  • DHCP运行分为四个基本过程,分别为请求IP租约、提供IP租约、选择IP租约和确认IP租约。
  • 客户在获得了一个IP地址以后,就可以发送一个ARP请求来避免由于DHCP服务器地址池重叠而引发的IP冲突。

作为一个Client 在使用DHCP获取一个IP地址时会与服务器之间通过以下几个数据包相互通信

  •        DHCPDISCOVER:DHCP客户端会先发送一个DHCPDISCOVER广播(broadcast)消息到网络搜索一台能提供IP地址的DHCP服务器。
  •         DHCPOFFER:当DHCP服务器收到DHCP的DHCPDISCOVER消息后,它会从IP地址池中选择一个尚未租出的IP地址,然后用广播发送给DHCP客户端(之所以用广播,是因为此时DHCP客户端还没有IP地址)。在尚未与DHCP客户端完成租用IP地址的过程之前,此IP地址也会暂时被保留,以避免重复更配给其他客户端。如果有多台DHCP服务器也收到DHCP客户端的DHCPDISCOVER消息,并且也都回应给DHCP客户端的话(表示它们都可以提供IP地址给此客户端),则客户端会选择第一个收到的DHCPOFFER消息。
  •        DHCPREQUEST:当DHCP客户端选择第一个收到的DHCPOFFER消息后,它就利用广播回应DHCPREQUEST消息给DHCP服务器。之所以用广播,是因为它不但要通知所选择的DHCP服务器,也必须通知没有被选上的其他DHCP服务器,以便这些DHCP服务器将其原本要分配给此客户端而保留的IP地址,释放出来供其他客户端使用。DHCP客户端收到DHCPOFFER消息后,会先检查包含在DHCPOFFER数据包内的IP地址是否已经被其他计算机使用[通过发出Address Resolution Protocol request(ARP)消息来检查],若发现此地址已经被其他计算机占用,则它会发出一个DHCPDECLENT消息给DHCP服务器,表示拒绝接受此IP地址,然后重新发出DHCPDISCOVER信息来申请另一个IP地址。
  •        DHCPACK:DHCP服务器收到DHCP客户端请求IP地址的DHCPREQUEST消息后,就会利用广播发出DHCPACK确认消息给DHCP客户端(之所以用广播,是因为此时DHCP客户端仍没有IP地址),此消息内包含着DHCP客户端所需的相关设置,例如IP地址、子网掩码、默认网关、DNS服务器等。

基于CentOS 6.5 安装 DHCP 服务器程序

在Linux中几乎都是采用的Paul Vixie/ISC DHCPd,来实现DHCP服务器端功能。可以访问http://www.isc.org/isc 获得最新消息。

目前大多数Linux发布都包含这个软件,如果是Red Hat,以RPM形式提供,通过rpm 或 yum 均可安装:

[root@i-it ~]# yum install dhcp
[root@i-it ~]# rpm -Uvh dhcp-4.1.1-31.P1.el6.x86_64.rpm

调整配置文件

[root@i-it ~]# cat /etc/dhcp/dhcpd.conf 
ddns-update-style interim;     #配置使用DHCP-DNS动态更新模式。  
ignore client-updates;         #忽略客户端更新  

subnet 10.204.10.0 netmask 255.255.255.0 {  
#作用域

	option routers                  10.204.10.250;        #路由器地址(Gateway)
	option subnet-mask              255.255.255.0;      #子网掩码选项  

	option nis-domain               "i-it.info";  
	option domain-name              "i-it.info";     #域名  
	option domain-name-servers      8.8.8.8;       #DNS地址  

	option time-offset              -18000; #为客户端设定格林威治时间的偏移时间,单位是秒

	range dynamic-bootp 10.204.10.251 10.204.10.253;       #租用IP地址的范围   
	default-lease-time 21600;    #缺省租约时间  
	max-lease-time 43200;        #最大租约时间

	# we want the nameserver to appear at a fixed address
	host i-it {
	#主机声明
		hardware ethernet 00:0C:29:30:2D:D7;	#保留主机的MAC地址
		fixed-address 10.204.10.204;	#指定保留的IP地址
		}
	}

同时可以参考安装包所提供的示例配置文件

[root@i-it ~]# ls /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample 
/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample

启动DHCPD的服务并查看端口:

[root@i-it ~]# service dhcpd start
Starting dhcpd:                                            [  OK  ]
[root@i-it ~]# netstat -panu | grep dhc*
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               3472/dhcpd
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               1398/dhclient

客户租约的数据库文件dhcpd.leases,文件包含租约声明,每次一个租约被获取、更新或释放,它的新值就被记录到文件的的末尾,租约时间采用GMT时间

[root@i-it ~]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.1.1-P1

server-duid "\000\001\000\001\032\327'a\000\014)0-\327";

lease 10.204.10.251 {
  starts 2 2014/04/08 21:48:34;
  ends 3 2014/04/09 03:48:34;
  cltt 2 2014/04/08 21:48:34;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:cc:de:94;
}

几条实用的小指令

获取租约文件中的IP地址,我的vsphere 中能拿来测试玩的只有两台机器..表明client只有一台,所以获取到的地址会相同..勿介意!

[root@i-it dhcpd]# grep -o '\<[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\>' dhcpd.leases
10.204.10.251
10.204.10.251

获取租约文件中的MAC地址

[root@i-it dhcpd]# grep -o '\<[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}:[0-9a-f]\{2\}\>' dhcpd.leases
00:0c:29:cc:de:94
00:0c:29:cc:de:94

同时获取租约文件中的IP地址和MAC地址

[root@i-it dhcpd]# tail -n +15 dhcpd.leases |less|awk 'BEGIN{RS=ORS="}"}{print $2,$25,"\n"}'|sed 's/}//g'
10.204.10.251 00:0c:29:cc:de:94; 
10.204.10.251 00:0c:29:cc:de:94;
(责任编辑:IT)
------分隔线----------------------------