今天,我想在Linux下配置一台DHCP服务器,感觉上比较直观,难度稍微有点大(相对于在windows及路由器下)。

DHCP(Dynamic Host Configure Protocol,动态主机配置文件),是一个简化手动分配及管理IP地址的烦恼。DHCP是基于C/S模式的。

默 认,在RHEL上没有安装服务器组件。查看是否安装的命令
 

[root@localhost ~]# rpm -qa | grep dhcp
dhcpv6_client-0.10-8                                        //客户端组件

如果没有安装,拿出 RHEL的安装盘,找到相应的组件包。进行安装



[root@localhost cdrom]# rpm -ivh RedHat/RPMS/dhcp-3.0.1-12_EL.i386.rpm                                        //服务器组件

查 看DHCP服务的端口号



[root@localhost root]# vi  /etc/services
bootps                    67/tcp                              # BOOTP server
bootps                    67/udp
bootpc                    68/tcp                              # BOOTP client
bootpc                    68/udp


DHCP 服务(即dhcpd守护进程)是按照/etc目录下的dhcpd.conf配置文件进行设置。默认情况下,这个文件是不存在的。在安装dhcp服务时都会 安装一个帮助文件(配置实例)。通过以下命令查询



[root@localhost ~]# rpm -ql dhcp
/etc/rc.d/init.d/dhcpd
/etc/rc.d/init.d/dhcrelay
/etc/sysconfig/dhcpd
/etc/sysconfig/dhcrelay
/usr/bin/omshell
/usr/sbin/dhcpd
/usr/sbin/dhcrelay
/usr/share/doc/dhcp-3.0.1
/usr/share/doc/dhcp-3.0.1/README
/usr/share/doc/dhcp-3.0.1/RELNOTES
/usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample           //配置样本
/usr/share/man/man1/omshell.1.gz
/usr/share/man/man5/dhcp-eval.5.gz
/usr/share/man/man5/dhcpd.conf.5.gz
/usr/share/man/man5/dhcpd.leases.5.gz
/usr/share/man/man8/dhcpd.8.gz
/usr/share/man/man8/dhcrelay.8.gz
/var/lib/dhcp
/var/lib/dhcp/dhcpd.leases

然 后,复制到/etc/dhcpd.conf



[root@localhost ~]# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcpd.conf                   // 复制文件

查看,/etc/dhcpd.conf配置文件(主要配置文挡)



[root@localhost ~]# cat /etc/dhcpd.conf
ddns-update-style interim;           //支持DNS动态更新
ignore client-updates;                //忽 略客户端更新DNS记录

subnet 192.168.0.0 netmask 255.255.255.0 {
//宣告192.168.0.0/24网段
# --- default gateway
        option routers                 192.168.0.1;        //默认网关
        option subnet-mask          255.255.255.0;    //网络掩码
        option nis-domain             "domain.org";      //NIS域名称
        option domain-name          "domain.org";     //DNS域名
        option domain-name-servers  192.168.0.1;   //DNS服务地址
option time-offset                    -18000; # Eastern Standard Time
#             option ntp-servers                       192.168.0.1;
#             option netbios-name-servers         192.168.0.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 dynamic-bootp 192.168.0.128 192.168.0.254;
                //定义可分配的IP地址池
                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;
                }              //默认永久分配IP地址(物理地址匹配)
}

PS: 我在VMware上做实验的时候,可能dhcp客户端(linux)获取不到IP地址。


出现以下提示:Determining IP information for eth0... failed; no link present.  Check cable?

由 于虚拟机的原因,需要在/etc/sysconfig/network-scripts/ifcfg-eth0后面添加下面命令



check_link_down()
{
        return 1;
}

配 置完成后,需要重新开启服务



[root@localhost ~]# service dhcpd restart          //重新开启DHCP服务
[root@localhost ~]# /etc/init.d/dhcpd stop         // 停止DHCP服务
[root@localhost ~]# /etc/init.d/dhcpd  start       //启动DHCP服务
[root@localhost ~]# chkconfig --level 35 dhcpd on  
//开机自动启动DHCP服务

在linux客户端开启DHCP服务(windows下 比较简单,不在做相关介绍),需要设置以下文挡



[root@localhost root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp                                         //启动DHCP服务
check_link_down()
{
        return 1;
}

这样,就可以获取IP地址了。测试一下



[root@localhost root]# ifconfig eth0  
.....
Link encap:Ethernet    HWaddr 00:0C:29:93:19:4B
inet addr:192.168.0.254  
Bcast:192.168.0.255    Mask:255.255.255.0
......

在 现实生活中,有多个网段的IP地址需要分配,是不是每个网段下分配一台DHCP服务器呢?答案,是否定的。原因:这个也不太现实(成本很高)。所以我们可 以用DHCP中继代理来完成这项功能。下次,我会通过一个具体的配置实例,来更形象地说明它的功能作用。



最后:DHCP客户端申请IP地址的工作流程

(1)DHCP客户 端向本网段发送一个

DHCP DISCOVER

(DHCP 发现)


(2)本网段的DHCP服务器回应一个

DHCP OFFER

(DHCP 提供)


(3)DHCP客户端收到回应后,向DHCP服务器请一个DHCP 所包含的IP地址,并广播一个

DHCP REQUEST

(DHCP 请求)


(4)最 后,DHCP服务器发送一个

DHCP REPLY

来确认。



其中,四个过程都是广播进行的。

附上,我以前抓DHCP数据包的效果图。



本文出自 “懒人学网络” 博客,请务必保留此出处http://445053869.blog.51cto.com/473647/110265