在实际应用中可能会遇到一个比较大的物理网络中存在多个ip子网,而每个ip子网的主机都需要DHCP服务器来动态分配ip地址,实现的方法有两种。第一种是在每一个子网中设置DHCP服务器,将其分别为每个子网分配ip地址,但此方法会增加开销,浪费资源;第二种就是只在一个子网内设置DHCP服务器,通过这台DHCP服务器来为所有的子网分配ip地址,这个方法比第一种节省,是可行的,这就要用到DHCP中继代理了。
在整个DHCP租约产生的过程中,DHCP服务器和客户端都是使用广播进行通信的,我们知道,网络上上的流量分为单播、广播、组播,单播和组播可以顺利的通过路由器,广播不可以通过路由器,路由器隔离广播,这样就会产生一个问题,如果DHCP客户端和DHCP服务器之间要跨越子网时,中间的路由器会进行阻拦,路由器看到是广播包立马就会扔掉,那怎么办呢?很简单,只需要让这个广播包在进入路由器之前变成单播就行了,这就是中继代理的原理。
DHCP中继代理的过程。(1)DHCP客户端广播dhcpdiscover包(2)DHCP中继代理将dhcpdiscover包以单播发送到DHCP服务器(3)HDCP服务器以单播发送DHCPoffer包给DHCP中继代理(4)DHCP中继代理广播dhcpffer包(5)DHCP客户端广播dhcprequest包(6)DHCP中继代理以单播转发dhcprequest包给DHCP服务器(7)DHCP服务器以单播发送dhcpack包给DHCP中继代理(8)DHCP中继代理广播dhcpack包。
一般情况下,DHCP中继代理监听所有接口上的DHCP请求。假如某个HDCP服务器位于网络接口为eth0的子网内,那么就可以用中继代理向eth1和eth2连接的子网内提供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)首先给这台机器添加到三张网卡,这里使用的是虚拟机的redhat的clone版,添加成功后做如下的配置:
其中第一块网卡设置成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可以,所以安装dhcp的rpm包。这时候就会生成一个关于这个中继服务的配置文档:/etc/sysconfig/dhcrelay,进入到这个文档中,看到内容如下:
第一行是写监听的网卡的名字,第二行是写dhcpserver的ip地址,注意第一行三个网卡都要写,虽然eth0并不用中继功能,内容如下:
(5)启动中继服务:service dhcrelay start,也可以设置开机启动:chkconfig dhcrelay on.
到此在中继上的配置就完成了,下面就拿一台机器,进行试验一下。
3、在winxp上的测验
在虚拟机里开启一台winxp主机,设置网卡如下:
在winxp里自动或得ip地址,如果成功的话,winxp的地址段应该是91段的。自动获得的ip地址如下:
获得的是192.168.91.253.实验成功。