DHCP介绍

DHCP的全名为Dynamic Host Configuration Protocol(动态主机配置协议)

其目的是给DHCP客户端分发网络参数的,当在网络中有一台DHCP服务器,那么客户端就会自动的到DHCP服务器上获取网络参数。


DHCP的工作原理

关于DHCP工作过程中的数据包,

DHCPDISCOVER      DHCP发现包

DHCPOFFER         DHCP提供包

DHCPREQUEST       DHCP请求包

DHCPACK           DHCP确认包

简单概述:

首先,DHCP客户端会发送一个全网广播的DHCP发现包,寻找DHCP服务器。

当网络中的DHCP服务器收到DHCP客户端的请求,就会在自己的地址池中随即分发一个ip地址给DHCP客户端。当DHCP客户端确定使

用这个ip地址的时候,就会发送一个DHCP的确认包给DHCP服务器。


DHCP的地址租约

DHCP的地址租约有两种方式:

限定租期

当DHCP客户端向DHCP服务器租用到IP地址,客户端可以使用该IP地址一段时间,当租用期快到了的时候,客户端必须想DHCP服务

器提出续约请求,请求成功后,可以继续使用该IP地址,如果客户端没有续约或续约不成功,服务器就会将该IP地址收回,分发

给其他DHCP客户端使用。

永久租用

当DHCP客户端的MAC地址与IP地址绑定,那么绑定的DHCP客户端就可以永久的使用这个IP地址,其他计算机自动获取不到的。


下面是关于DHCP这个服务的属性,

DHCP的相关软件包

Dhcp

DHCP的守护进程

/usr/sbin/dhcpd

DHCP的脚本

/etc/init.d/dhcpd

DHCP的端口

67(bootps)   68(bootpc)

DHCP的配置文件

/etc/dhcp.conf    /var/lib/dhcpd/dhcpd.leases


下面来具体搭建DHCP服务

第一步,安装软件包

[root@localhost ~]# yum -y install dhcp


第二步,复制模板文件

首先我们来查看一下DHCP的配置文件

[root@localhost ~]# vim /etc/dhcpd.conf

# DHCP Server Configuration file.

#   see /usr/share/doc/dhcp*/dhcpd.conf.sample  


这个文件提示我们去在/usr/share/doc/dhcp*/dhcpd.conf.saple是个模板文件

现在去查看一下这个文件

[root@localhost ~]# cd /usr/share/doc/dhcp-3.0.5/

[root@localhost dhcp-3.0.5]# ls | grep dhcpd.conf.sample

dhcpd.conf.sample

现在把这个文件复制成dhcpd.conf文件

[root@localhost dhcp-3.0.5]# cp dhcpd.conf.sample /etc/dhcpd.conf

cp: overwrite `/etc/dhcpd.conf'? y


第三步,编辑DHCP的配置文件

ddns-update-style interim;

ignore client-updates;


subnet 192.168.0.0 netmask 255.255.255.0 {


# --- default gateway

       option routers                         192.168.0.254;

       option subnet-mask                 255.255.255.0;


       option nis-domain                      " domain.org";

       option domain-name                   " example.com";

       option domain-name-servers        192.168.0.254;


       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.100 192.168.0.250;

       default-lease-time 21600;

       max-lease-time 43200;


       # we want the nameserver to appear at a fixed address

       host ns {

               next-server marvin.redhat.com;

               hardware ethernet 12:34:56:78:AB:CD;

               fixed-address 207.175.42.254;

       }

}


关于语法参数的解释,

ddns-update-style interim;

定义所支持的DNS的动态更新类型(必选)

ignore client-updates;

忽略客户端更新DNS记录

subnet 192.168.0.0 netmask 255.255.255.0

定义作用域是192.168.0.0/24

option routers  192.168.0.254

为客户端定义网关地址

option subnet-mask

网关的子网掩码

option nis-domain   "domain.org";

指定Nis的域名,没有定义

option domain-name  "example.com"

指定DNS的域名

option domain-name-servers  192.168.0.254;

指定DNS Server的ip地址

option time-offset    -18000; # Eastern Standard Time

这个是时区的设置

range 192.168.0.100  192.168.0.250;

定义DHCP的地址池

default-lease-time   21600;

默认最小的租约期是21600S

max-lease-time 43200;

最大的租约期是43200S


好了,DHCP的服务器基本就配置成功了,可以提供工作了。

现在我们重启下服务,


[root@localhost ~]# service dhcpd restart

Shutting down dhcpd:                                       [  OK  ]

Starting dhcpd:                                            [  OK  ]


现在我们到DHCP客户端上面去测试下,

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=dhcp

HWADDR=00:0C:29:75:91:EC

ONBOOT=yes

设置成自动获取

[root@localhost ~]# service network restart

[root@localhost ~]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:75:91:EC  

         inet addr:192.168.0.250  Bcast:192.168.0.255  Mask:255.255.255.0


可以看到,DHCP客户端就获取到了一个IP地址。

现在我们来查看一下日志的信息

[root@localhost ~]# tail -f /var/log/messages

Mar 13 14:24:18 localhost dhcpd: DHCPDISCOVER from 00:0c:29:75:91:ec via eth0

Mar 13 14:24:18 localhost dhcpd: DHCPREQUEST for 192.168.0.161 (192.168.0.1) from 00:0c:29:75:91:ec via eth0

Mar 13 14:24:18 localhost dhcpd: DHCPACK on 192.168.0.161 to 00:0c:29:75:91:ec via eth0

Mar 13 14:24:19 localhost dhcpd: DHCPOFFER on 192.168.0.250 to 00:0c:29:75:91:ec via eth0

日志信息里面很清楚的显示了整个DHCP分配IP地址的过程。

现在我们去地址的租约文件里面看看,

[root@localhost dhcpd]# cat /var/lib/dhcpd/dhcpd.leases

# All times in this file are in UTC (GMT), not your local timezone.   This is

# not a bug, so please don't ask about it.   There is no portable way to

# store leases in the local timezone, so please don't request this as a

# feature.   If this is inconvenient or confusing to you, we sincerely

# apologize.   Seriously, though - don't ask.

# The format of this file is documented in the dhcpd.leases(5) manual page.

# This lease file was written by isc-dhcp-V3.0.5-RedHat

lease 192.168.0.250 {

 starts 6 2010/03/13 11:33:33;

 ends 6 2010/03/13 17:33:33;

 binding state active;

 next binding state free;

 hardware ethernet 00:0c:29:75:91:ec;

}

这个里面就有192.168.0.250的租约的相关信息



刚才是限定租期,现在我们来做永久租期

永久租期主要是通过MAC地址和IP地址进行绑定,从而实现永久租期。

在/etc/dhcpd.conf文件里面就可以定义。

现在我们给192.168.0.10这个IP地址做绑定,

       host station10 {

               hardware ethernet 00:0C:29:75:91:EC;

               fixed-address 192.168.0.10;

       }

语法参数解释

hardware ethernet 00:0C:29:75:91:EC;

这个是代表需要绑定计算机的MAC地址

fixed-address 192.168.0.10;

这个是需要保留的IP地址

注意,这个保留的IP地址不可以在定义的地址池范围内,否则没有意义。

设置完成,现在重启下DHCP服务,


[root@localhost ~]# service dhcpd restart

Shutting down dhcpd:                                        [  OK  ]

Starting dhcpd:                                                  [  OK  ]


[root@localhost ~]# dhclient -d eth0 自动获取IP地址

[root@localhost ~]# dhclient -r eth0 自动释放IP地址

[root@localhost ~]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:75:91:EC  

         inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0


OK,可以看到,IP地址就变成了192.168.0.10了。

当计算机的IP地址不能够及时释放出去,就必须先停止DHCP服务,然后删除/var/lib/dhcpd目录下面的租约文件,

然后启动DHCP服务,那么DHCP服务就可以正常工作了。


本文出自 “Crushlinux” 博客,请务必保留此出处http://crushlinux.blog.51cto.com/2663646/1274878