Dhcp中继

在现实网络中我们不可能会去为每一个网端做一个dhcp服务器,那样非常浪费资源,所以我们这里引用dhcp中继,使得在一个网络环境中实现一个dhcp服务器,提供所有的dhcp分配

实验的大概拓扑如图:

这里我们使用linux系统做中继路由器以及dhcp-server,路由器连接三块网卡,分成:服务器vlan10,技术部vlan20,市场部vlan30三个部分。Vlan10中的dhcp服务器通做路由器做中继为处于不同网段的市场部,技术部分配ip

具体步骤如下:

(1)首先做好dhcp服务器的配置,搭好dhcp的环境,具体方法前面我们已经说过:

1.

  ------》(这里只要是做服务器或者中继的ip地址必须是手动配置的,固定的,唯一的)

/etc/dhcpd.conf文件中配置大致如下

ddns-update-style interim;

ignore client-updates;

subnet 192.168.10.0 netmask 255.255.255.0 {

                    }   

(注:linux实现dhcp服务器时,作用域中必须有一个与其自身网段对应的,可以创建一个空作用域,方法如上)

subnet 192.168.20.0 netmask 255.255.255.0 {

# --- default gateway

        option routers                  192.168.20.254;

        option subnet-mask              255.255.255.0;

        option nis-domain               "domain.org";

        option domain-name              "etc.com";

        option domain-name-servers      222.85.85.85,222.88.88.88;

        option time-offset              -18000; # Eastern Standard Time

        range dynamic-bootp 192.168.20.1 192.168.20.253;

        default-lease-time 21600;

        max-lease-time 43200;

}

subnet 192.168.30.0 netmask 255.255.255.0 {

# --- default gateway

        option routers                  192.168.30.254;

        option subnet-mask              255.255.255.0;

        option nis-domain               "domain.org";

        option domain-name              "mkt.com";

        option domain-name-servers      222.85.85.85,222.88.88.88;

        option time-offset              -18000; # Eastern Standard Time

        range dynamic-bootp 192.168.30.1 192.168.30.253;

        default-lease-time 21600;

        max-lease-time 43200;

}       

注:这里使用的作用域是相互独立的,针对不同的区域的,因此不能使用超级作用域

好了服务器配置完了,我们就该配置中继了:

(2)路由器不接受广播包,而客户端获取地址是采取广播的方式,但是路由器可以接受组播与单播的包,dhcp中继就是将,客户端发出的dhcp广播包转换成组播的包,dhcp客户端发送出的dhcp请求的包大概格式如下:

Dhcp中继接受到该包后,根据对应的借口得到的包,将网关域该为对应的该接口地址,目标地址换成了dhcp服务器地址,然后发给了dhcp-server

Dhcp-server获取到该包后,提取该包的网关域的ip的网段,并与地址作用域中的网段做配对,配对上了就是用该作用域回复给客户端一个与之处于同网段的ip,这就是处于不通作用域的主机可以通过dhcp中继与dhcp服务器可以获得各自对应的ip端,而不出错

说了那么多,那我们来实现下吧,首先我们在windows环境做dhcp中继路由器:

2.首先找一个win2003,安装并开启dhcp服务,并开启路由功能:

3.为其添加三块网卡,并分配地址:(这里只要是做服务器或者中继的ip地址必须是手动配置的,固定的,唯一的)

使用Router print 命令查看路由,做完之后一定要此时跟服务器间的连通性

3.弄了半天dhcp中继貌似还没做啊,那么下面咱们来做dhcp中继吧

首先,路由和远程访问中添加dhcp中继

 

再接着,将网卡添加到中继中(我们的中继是在所做区域的对外节点上,也就是该区域的网关,所以需要做中继有vm2vm3两个区域)

 

  

此时dhcp中继已经配置完毕

dhcp客户端上释放原有地址,并重新获取便可

 

Vm1:

Eth0:192.168.10.254

Vm2:

Eth1:192.168.20.254

Vm3:

Eth2:192.168.30.254

(3)windows配置dhcp中继,大致的让我们了解到了dhcp中继的作用,下面我们来试试用linux系统环境做dhcp中继。

首先我们得做好准备工作,为该系统添置两块网卡,使得共三块网卡分别作用于vm1vm2vm3

(这里只要是做服务器或者中继的ip地址必须是手动配置的,固定的,唯一的)

前面我们说过,dhcp的安装包dhcp-3.0.5*的包的也包含了dhcp中继dhcrelay服务,所以

1.我们应该先在做中继的linux上安装dhcp-3.0.5*的包

2.包安完后该更改配置文件了,dhcrelay的主要配置文件在为:etc/sysconfig/dhcrelay

这个我们可以通过 ,rpm -qc  dhcp 命令找到。下面编译该文件:

INTERFACES="eth0 eth1 eth2"(添加做中继的网卡,及要做中继的区域的网关,有点熟悉吧)

DHCPSERVERS="192.168.10.66" (添加dhcp-serverip地址,也不陌生吧)

如果对上叙的写法不是那么的熟悉的话,可使用man dhcrelay   查看手册

然后测试上叙是否有语法错误: service dhcrelay configtest(好习惯哦)

3.配完后当然得启动或者重启dhcrelay服务了----service  dhcrelay  start

4.做完这还是不够的,我们此时是用该linux主机做dhcp中继,换句话说,它也是个路由器啊,没路由转发是不行滴

编译/etc/sysctl.conf 文件:

大概在第7行:net.ipv4.ip_forward = 1 (允许转发)

并使用sysctl -p  命令手动更新服务器配置状态

[root@workstation253 ~]# sysctl -p

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 4294967295

kernel.shmall = 268435456

使用route -n 查看路由

5.最后可以使用客户端重新获取

看到这里那么我们就成功的做成了!!!

(4)在现实使用中,有许多客户端,例如:华为,思科,虚拟机,物理机等等,我们可以根据设备的不通将客户端分类(class),可以按照供应商分类,也可以按照mac地址分类

类的格式:

Class “类名称”{

 类得匹配条件;

}

这个我们可以使用man dhcpd.conf  命令,然后搜索类,查看类的使用方法,及格式

一般可以以mac地址进行分类,虚拟机网卡一般是以00-0c-cf开头

 下面表示按照mac地址匹配,匹配条件是mac地址的第1-3位是00-0c-29

Class "vm"{

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

}

下面表示按照供应商匹配

class "microsoft-client" {

match if substring(option vendor-class-identifier) = "MSFT";(表示供应商的标识符=微软)

option  网关        (还可以定义其他选项,比如网关,dns

     option  dns

}

我们学过的计算机语言中都是这样,先定义类,然后再去引用,使用pool来引用

pool{

   allow nembers of “类名称”;  只要符合这一类的,就从下面分配ip

   range   起始ip 结束ip

}

pool {

deny nembers of “类名称”;   只要不符合这一类的,就从下面分配ip

range   起始ip  结束ip

}

下面我们来试验下:

首先去配置dhcp的主配置文件:/etc/dhcpd.conf

ddns-update-style interim;

ignore client-updates;

subnet 192.168.10.0 netmask 255.255.255.0 {

                    }

subnet 192.168.20.0 netmask 255.255.255.0 {

                class "vm" {

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

                }

# --- default gateway

        option routers                  192.168.20.254;

        option subnet-mask              255.255.255.0;

        option nis-domain               "domain.org";

        option domain-name              "etc.com";

        option domain-name-servers      222.85.85.85,222.88.88.88;

pool {

       allow members of "vm";

       range 192.168.20.10   192.168.20.30;

}

pool {

   deny members of "vm";

  range 192.168.20.100  192.168.20.200;

}

        option time-offset              -18000; # Eastern Standard Time

        default-lease-time 21600;

        max-lease-time 43200;

}

测试1.mac00-0c-29开头的:

测试2.mac不是00-0c-29开头的: