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中继
再接着,将网卡添加到中继中(我们的中继是在所做区域的对外节点上,也就是该区域的网关,所以需要做中继有vm2与vm3两个区域)
此时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中继。
首先我们得做好准备工作,为该系统添置两块网卡,使得共三块网卡分别作用于vm1,vm2,vm3
(这里只要是做服务器或者中继的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-server的ip地址,也不陌生吧)
如果对上叙的写法不是那么的熟悉的话,可使用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.是mac为00-0c-29开头的:
测试2.mac不是00-0c-29开头的: