在实际应用中可能会遇到一个比较大的物理网络中存在多个ip子网,而每个ip子网的主机都需要DHCP服务器来动态分配ip地址,实现的方法有两种。第一种是在每一个子网中设置DHCP服务器,将其分别为每个子网分配ip地址,但此方法会增加开销,浪费资源;第二种就是只在一个子网内设置DHCP服务器,通过这台DHCP服务器来为所有的子网分配ip地址,这个方法比第一种节省,是可行的,这就要用到DHCP中继代理了。

在整个DHCP租约产生的过程中,DHCP服务器和客户端都是使用广播进行通信的,我们知道,网络上上的流量分为单播、广播、组播,单播和组播可以顺利的通过路由器,广播不可以通过路由器,路由器隔离广播,这样就会产生一个问题,如果DHCP客户端和DHCP服务器之间要跨越子网时,中间的路由器会进行阻拦,路由器看到是广播包立马就会扔掉,那怎么办呢?很简单,只需要让这个广播包在进入路由器之前变成单播就行了,这就是中继代理的原理。

DHCP中继代理的过程。(1DHCP客户端广播dhcpdiscover包(2DHCP中继代理将dhcpdiscover包以单播发送到DHCP服务器(3HDCP服务器以单播发送DHCPoffer包给DHCP中继代理(4DHCP中继代理广播dhcpffer包(5DHCP客户端广播dhcprequest包(6DHCP中继代理以单播转发dhcprequest包给DHCP服务器(7DHCP服务器以单播发送dhcpack包给DHCP中继代理(8DHCP中继代理广播dhcpack包。

一般情况下,DHCP中继代理监听所有接口上的DHCP请求。假如某个HDCP服务器位于网络接口为eth0的子网内,那么就可以用中继代理向eth1eth2连接的子网内提供DHCP服务。

 

实验:

 

 

 

如图公司的三个子网处于三个网段内,现在只在人力部子网里面配置一天DHCP服务器,怎样同时为这三个子网实现DHCP功能?

1、首先在DHCP SERVER这台服务器上进行配置

     

    (1)安装并开启dhcp服务。

    (2)编辑主配置文档/etc/dhcpd.conf.   建立三个作用域如下:

      ddns-update-style interim;

      ignore client-updates;

      subnet 192.168.92.0 netmask 255.255.255.0 {

       # --- default gateway

        option routers                  192.168.92.254;

        option subnet-mask              255.255.255.0;

        option domain-name              "renli.org";

        option domain-name-servers      222.222.85.85;

        option time-offset              -18000;        

        range dynamic-bootp 192.168.92.0 192.168.92.253;

        default-lease-time 21600;

        max-lease-time 43200;  }

       

      subnet 192.168.91.0 netmask 255.255.255.0 {

      # --- default gateway

        option routers                  192.168.91.254;

        option subnet-mask              255.255.255.0;

        option domain-name              "caiwu.org";

        option domain-name-servers      222.88.88.88;

        option time-offset              -18000; 

        range dynamic-bootp 192.168.91.0 192.168.91.253;

        default-lease-time 21600;

        max-lease-time 43200;    }

                               

     subnet 192.168.93.0 netmask 255.255.255.0 {

      }  //注意这里建了一个空的作用域,其实也可以比为空

   (3)重新启动dhcp服务

到此服务器的上的配置就完成了,下面看在中继的配置。

2、在中继上的配置

   (1)首先给这台机器添加到三张网卡,这里使用的是虚拟机的redhatclone版,添加成功后做如下的配置:

 

 

 

 

 

 

 

其中第一块网卡设置成host-only模式,用于与DHCP SERVER通信,因为这个DHCP SERVER用的就是host-only模式,其他两块网卡如下配置,分别代表连接其他的两个子网。

(2)接下来分别给三张网卡分配ip地址,因为这是做dhcp中继用的,所以ip地址一定要是固定的,这一步很简单,只需设置成:eth0(即第一块网卡依次类推):192.168.93.254

  Eth1:192.168.92.254  eth2:192.168.91.254

(3)给这台主机开启路由转换功能:打开/etc/sysctl.conf文档,将第七行net.ipv4.ip_forward的值设置为1,保存退出。然后执行sysconf -t,让这个改动生效。

(4)dhcp中继是一个与dhcp有关的服务,必须要安装dhcp可以,所以安装dhcprpm包。这时候就会生成一个关于这个中继服务的配置文档:/etc/sysconfig/dhcrelay,进入到这个文档中,看到内容如下:

 

 

第一行是写监听的网卡的名字,第二行是写dhcpserverip地址,注意第一行三个网卡都要写,虽然eth0并不用中继功能,内容如下:

 

 

(5)启动中继服务:service dhcrelay start,也可以设置开机启动:chkconfig dhcrelay on.

到此在中继上的配置就完成了,下面就拿一台机器,进行试验一下。

3、winxp上的测验

  在虚拟机里开启一台winxp主机,设置网卡如下:

 

 

 

winxp里自动或得ip地址,如果成功的话,winxp的地址段应该是91段的。自动获得的ip地址如下:

 

 

获得的是192.168.91.253.实验成功。