DHCP: Dynamic Host Configuration Protocol

DHCP的服务的作用是为网络中的主机提供IP地址、子网掩码、网关和DNS地址服务的。

DHCP采用Client/Server模式,Server基于udp67号端口进行监听,Client基于udp68号端口进行监听


DHCP工作原理

  1. Client向所在网络发送一个dhcpdiscover广播包,内主要包含客户机的mac地址;

  2. Server收到Client的dhcpdiscover包后,发送一个dicpoffer广播包,内主要包含分配的IP地址,ServerIP地址等;

  3. Cilent收到第一个Server发的dhcpoffer包后,再发送一个dhcprequest广播包,内主要含Server的IP地址;

  4. 被选中的Server再发送一个dhcpack广播包确认此IP的发放

新分配的IP地址可以使用一半租期的时间,超过一半时间应续租,如果过了一半时间后找不到DHCP服务器续租的话,可以再使用四分之一时间,再找不到服务器续租的话就过期了。用户就不能通过此IP地址进行通信了。


DHCP服务的配置

DHCP服务的配置文件默认是没有的,需要在/etc下手工创建dhcpd.conf文件

在安装DHCP服务是会提供一个实例文件

/usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample

将上述文件复制为/etc/dhcpd.conf,并在此基础上进行修改

# cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf


/etc/dhcpd.conf文件内容及解释如下

定义一个网段的格式:

ddns-update-style interim; #dhcp支持的dns动态更新方式
ignore client-updates;     #忽略客户端DNS动态更新

subnet 192.168.0.0 netmask 255.255.255.0 {              #作用域网段

# --- default gateway
	option routers			192.168.0.1;    #网关地址
	option subnet-mask		255.255.255.0;  #掩码

#	option nis-domain		"domain.org";   
	option domain-name		"cqy.com";      #域名
	option domain-name-servers	192.168.1.1,114.114.114.114; #dns IP地址

#	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 192.168.0.250 192.168.0.254;             #IP地址段范围
	default-lease-time 21600;                #租期,单位秒,默认1天
	max-lease-time 43200;                #最长租期,单位秒,默认2天

	# we want the nameserver to appear at a fixed address
	host cqy1 {                    #绑定的主机名,自定义
#		next-server marvin.redhat.com;
		hardware ethernet 12:34:56:78:AB:CD;   #绑定主机的mac地址
		fixed-address 192.168.0.251;        #分配的IP地址
	}
	host cqy2 {
#		next-server marvin.redhat.com;
		hardware ethernet 12:34:56:78:AB:CD;
		fixed-address 192.168.0.252;
	}
	
}


定义多个网段的格式:

vi /etc/dhcp.conf
ddns-update-style interim;      /*dhcp支持的dns动态更新方式*/
ignore client-updates;          /*忽略客户端DNS动态更新*/
shared-network mynet {          /*超网作用域选项,共同部分*/
     option subnet-mask 255.255.255.0;            /*子网掩码*/
     option domain-name "koumm.net";              /*域名*/
     option domain-name-servers 192.168.1.2;      /*dns IP*/
     option broadcast-address 192.168.1.255;      /*广播地址*/
     default-lease-time 86400;              /*租期1天,秒数*/
     max-lease-time 172800;               /*最长租期2天*/
 
     subnet 192.168.1.0 netmask 255.255.255.0 {   /*1.0子网段*/
          range 192.168.1.10 192.168.1.100;        /*ip地址段范围*/
          option routers 192.168.1.1;           /*网关地址*/
          /*绑定pc1主机ip地址配置*/
          host pc1 {
              hardware ethernet 00:a0:cc:cf:9C:14;
              fixed-address 192.168.1.20;
          }
          /*绑定pc2主机ip地址配置*/
          host pc2 {
              hardware ethernet 04:20:c1:f8:37:11;
              fixed-address 192.168.1.30;
          }
     }

     subnet 192.168.2.0 netmask 255.255.255.0 {    /*2.0子网段*/
          range 192.168.2.10 192.168.2.100;         /*ip地址段范围*/
          option routers 192.168.2.1;            /*网关地址*/
     }
     subnet 192.168.3.0 netmask 255.255.255.0 {    /*3.0子网段*/
          range 192.168.3.10 192.168.3.100;         /*ip地址段范围*/
          option routers 192.168.3.1;            /*网关地址*/
     }

 }


DHCP中继代理

配置文件:

/etc/sysconfig/dhcrelay

vi /etc/sysconfig/dhcrelay 
# Command line options here
INTERFACES="eth1 eth2"
DHCPSERVERS="192.168.0.1"


也可以通过dhcrelay命令实现:

# dhcprelay -i eth1 -i eth2 192.168.0.1

配置完成后,重新启动dhcp服务。


租约文件:/var/lib/dhcp/dhcpd.leases

cat /var/lib/dhcp/dhcpd.leases
# This lease file was written by isc-dhcp-V3.0pl1
lease 192.168.1.100 {
  starts 3 2009/01/21 12:26:31;
  ends 4 2009/01/22 12:26:31;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:3b:20:d5;
}


系统日志文件:/var/log/messages

cat /var/log/messages
....
Jan 21 20:25:23 linux  1月 21 20:25:23 dhcpd: Listening on 
Jan 21 20:25:23 linux  1月 21 20:25:23 dhcpd: Sending on   
Jan 21 20:25:23 linux  1月 21 20:25:23 dhcpd: Sending on   
Jan 21 20:25:23 linux  1月 21 20:25:23 dhcpd: dhcpd 启动 succeeded
Jan 21 20:26:30 linux dhcpd: DHCPDISCOVER from 00:0c:29:3b:20:d5 via eth0
Jan 21 20:26:31 linux dhcpd: DHCPOFFER on 192.168.1.100 to 00:0c:29:3b:20:d5 via eth0
Jan 21 20:26:31 linux dhcpd: DHCPREQUEST for 192.168.1.100 (192.168.1.8) from 00:0c:29:3b:20:d5 via eth0
Jan 21 20:26:31 linux dhcpd: DHCPACK on 192.168.1.100 to 00:0c:29:3b:20:d5 via eth0


本文参考链接:http://blog.163.com/koumm@126/blog/static/9540383720092119292794