DHCP:Dynamic Host Configuration Protocol  动态主机配置协议,对客户机动态分配TCP/IP信息 :包括IP地址、子网掩码、默认网关、首选DNS服务器等信息。

服务器端监听端口:UDP 67

客户端监听端口:UDP 68

DHCP服务器是以地址租约的方式为DCHP客户端提供服务的,有两种方式:

限定租期:当租约快到期时,客户端必须向DHCP服务器提出续约请求,请求成功后可以继续使用该IP地址。如果客户端没有续约或者续约不成功,服务器就会将该IP地址回收,分配给其他DHCP客户端使用。

永久租用:当DHCP客户端向DHCP服务器租用到IP地址后,这个地址就永久地分配给这个DHCP客户端使用。

工作原理:

DHCP服务的配置与应用_第1张图片

当DHCP客户端IP地址使用时间达到租期的一半时,它就会向DHCP服务器发送一个新的DHCPREQUEST,服务器在接收到请求时,没有拒绝理由便会发送一个DHCPACK信息,当DHCP收到DHCPACK的请求后,就重新开始一个租用周期。

当DHCP客户端重新启动时,不管IP地址租约是否到期,都会以广播的方式,给网络中的DHCP服务器发送一个DHCPREQUEST信息,若没有收到应答且租期还没过期,那么DHCP客户端将继续使用该IP地址。

当IP地址的租期超过一半但续约失败时,该DHCP客户端仍可使用该IP,但是将在租期达到87.5%时候再次利用广播信息发送一个DHCPREQUEST信息,以便找到一台可以继续提供租期的DHCP服务器。如果DHCP服务器返回DHCPNACK信息,说明租约失败,此时客户端需重新开始DHCPDISCOVER四个过程。

进程名称dhcpd

主配置文件 /etc/dhcpd.conf   /etc/sysconfig/dhcpd(参数性配置文件)

启动脚本 /etc/init.d/dhcpd

下面我们就在来在linux上配置DHCP服务。

首先必须确保自己的主机为静态IP。如果网卡使用host-only连接方式则一定要把虚拟机的DHCP服务停掉,不然会影响实验效果。

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

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

主配置文件需要手动创建,这里我们将系统提供给我们的模板拷贝到/etc/下,稍加修改即可使用:

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

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

主配置文件的相关参数:

ddns-update-style interim;     //** 指定DDNS的更新方式,DNS和DHCP服务器双方协同

                            工作提供动态DNS的时候的工作方式

ignore client-updates;        //** 忽略客户端更新请求

PS:当全局参数和局部参数出现冲突时,以局部参数为准。作用范围越小,优先级越高

DHCP服务的配置与应用_第2张图片

[root@station39 ~]# vim /etc/sysconfig/dhcpd

DHCPDARGS=eth0             //** 指定监听的网卡

启动之后查看一下监听端口:

[root@station39 ~]# netstat -ntulp | grep 67

udp        0      0 0.0.0.0:67                  0.0.0.0:*                               16653/dhcpd

PS:dhclient 客户端所使用的进程

dhclient  -d  eth0  //** 在前台运行,默认运行在后台

使用客户端获得一下IP来验证一下效果:

wps_clip_p_w_picpath-29685

看,已经获得了一个我们所定义的地址池内的IP。

PS:linux上DHCP服务器分配IP的方式是从大到小,而windows 上DHCP服务器分配IP的方式是从小到大,这里你应该明白客户端为什么获得的是150的IP了。

为客户端分配一个固定的地址:

修改dhcpd.conf文件

host web {

                hardware ethernet 00:0C:29:84:22:C1;

                fixed-address 192.168.10.119;

        }

DHCP服务的配置与应用_第3张图片

重启服务。

客户端重新获得一下IP试试:

DHCP服务的配置与应用_第4张图片

OK!完全没问题!

为固定IP定义参数:

# we want the nameserver to appear at a fixed address

        host web {

                option routers 192.168.10.10;

                option domain-name-servers  192.168.0.110;

                hardware ethernet 00:0C:29:84:22:C1;

                fixed-address 192.168.10.119;

        }

PS:在网卡的配置参数里添加PEERDNS=no,使用自己配置的DNS地址,无论DHCP服务参数如何改变,都不改变/etc/resolv.conf 中的定义。

/var/lib/dhcpd/dhcpd.leases保留当前已经租出去的IP的客户端所获得的地址租约的信息。

DHCP服务的配置与应用_第5张图片

根据客户端的类型给予其特定的IP:

class "virtual" {

     match if substring (hardware, 1,3) = 00:16:3e  or       

              substring  (hardware,1,3) = 00:16:36;

}

class "vmware" {

     match if substring (hardware, 1,3) = 00:0c:29

}            

class "microsoft-clients"

     match if substring (option  vendor-class-identifier,0,4) = "MSFT";   //** 根据供应商类

                                                                  别标识

            option routers 192.168.0.254;

            option domain-nameservers 192.168.0.90

}

pool {

    allow members of "virtual";             //**允许哪一类客户端来获得此地址

    range  192.168.0.90  192.168.0.110

}

pool {

    deny members of "virtual";        //** 拒绝哪一类客户端来获得此地址   

    deny members of "microsoft-clients";

     range 192.168.0.2 192.168.0.90;

}

pool {

    deny members of "virtual";

    allow members of "microsoft-clients";

     range 192.168.0.202 192.168.0.252;

}

DHCP 中继 relay

我们在虚拟机上来模拟DHCP中继代理的功能:

DHCP服务的配置与应用_第6张图片

实验环境配置:DHCP server IP :192.168.10.1  网络连接:Vmnet2

              Router: eth0:192.168.10.11   网络连接:Vmnet2

                     eth1:192.168.20.10   网络连接:桥接

              DHCP Relay :192.168.20.11    网络连接:桥接

              物理机做客户端

修改DHCPServer 的主配置文件/etc/dhcpd.cconf ,添加一个地址池:

subnet 192.168.20.0 netmask 255.255.255.0 {

   option routers 192.168.20.1;

   option domain-name "linna.com";

   option subnet-mask 255.255.255.0;

   range 192.168.20.11 192.168.20.50;

}

重启服务

为DHCP server添加网关

[root@station39 etc]# route add default gw 192.168.10.11

为DHCP relay server添加网关

[root@station26 ~]# route add  default gw 192.168.20.10

修改/etc/sysconfig/dhcrelay文件

[root@station26 ~]# vim /etc/sysconfig/dhcrelay

INTERFACES="eth0"

DHCPSERVERS="192.168.10.1"

启动中继服务:

[root@station26 ~]# service dhcrelay start

为做router的这台主机打开内核路由功能

[root@server27 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

OK!已经配置完成,我们使用物理机来验证一下效果:

DHCP服务的配置与应用_第7张图片

看!获得的是20网段的地址,说明我们的DHCP中继已经起作用了。