DHCP和DCHP Relay实战

 

 

  • 前言

 

       DHCP和DHCP Relay的实战

 

 

1、环境描述

 

节点

规格

角色

node1

2CPU 2G

DHCP 服务器

node2

2CPU 2G

DHCP 中继

VM1

1CPU 128M

1.0网段测试VM

VM2

1CPU 128M

2.0网段测试VM

 

DHCP和DCHP Relay实战_第1张图片

整体环境通过2台Workstation上的VM实现,node1使用2块网卡,node2使用3块网卡,其中node2上再跑2台VM充当不同网段的客户端来测试地址获取。

 

注意:这个拓扑环境中请屏蔽eth0,eth0这块网卡我没有配置网关,这个网卡就只用于我本地ssh连接,就当node1只有eth1,node2只有eth2、eth3。网卡可以先添加但不配置地址,下文有配置地址的步骤。

 

这个拓扑中大体的规划是这样

node1:作为DHCP服务器

eth1:hostonly模式(我这里是workstion的vmnet2)

 

node2:作为DHCP中继服务器

eth1:hostonly模式(我这里是workstion的vmnet2)

eth2:hostonly模式(我这里是workstion的vmnet3)

注意:去勾选workstaion的DHCP服务器分配地址避免影响

DHCP和DCHP Relay实战_第2张图片

 

而后eth1和eth2分别添加到br1,br2的这个两个桥上,然后VM1、VM2的后半段网卡也分别桥接到br1,br2的这个两个桥上。

 

一般情况下DHCP Server和终端要在同一网段中,但如果每一个网段都维护一台DHCP这样会太奢侈。这个时候可以通过DHCP relay来实现使用一台DHCP为不同的网段的终端分配地址。

 

拓扑中DHCP server和VM2不在同一个网段中,VM2 DHCP初始化时广播只能在本网段进行,所以VM2(2.0网段)的广播请求是无法到达DHCP服务器(1.0网段),这个时候与本地相连DCHP Relay就相当于是一个代理人的角色,收到该广播报文后将进行适当处理并转发给其指定的其它网络上的dhcp server,dhcp server 根据dhcp client 提供的信息进行相应的配置,并通过dhcp relay 将配置信息发送给dhcp client,完成对dhcp client 的动态配置。

 

最终我们的目的是,同网段的VM1(1.0网段)可以获取IP地址,不同网段VM2(2.0网段)也可以获取IP地址。

 

 

2、准备操作

两个步骤:

1.两台需要安装好DHCP软件包

2.在DHCP中继上准备cirros-0.5.1-x86_64-disk.img

 

安装dhcp软件包(软件包中已经包含dhcp和dhcrelay两个程序)

yum install dhcp

 

准备用于验证VM的镜像文件(只需要在dhcp中继上操作)

wget http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img -o /dhcp/

cp /dhcp/cirros-0.5.1-x86_64-disk{,-vm1}.img

cp /dhcp/cirros-0.5.1-x86_64-disk{,-vm2}.img

 

文章中所有用到的配置文件及镜像可以从此处获取

https://github.com/junfengjiang/DHCP

 

我们目的仅仅为了做DHCP和DHCP relay的功能性验证,为了保持环境的简单我们DHCP relay上不配置iptables nat功能转发。所以先不修改两台主机的网卡,先确保软件包安装完成,需要需要文件获取完毕后,再进行如下实验。

 

 

3、配置DHCP server

两个步骤:

1.配置dhcp server地址

2.配置两个作用域(地址池),192.168.1.0/24, 192.168.2.0/24

 

3.1、配置dhcp server地址

我的dhcpserver在192.168.1.0的这个网络中,因此我们只需要配置eth1的地址,要注意的是网关一定要配置eth1上,其他网卡不能配置网关。

 

为了避免混淆我把我这台机器上两块网卡的配置贴出来,如下:

# vim /etc/sysconfig/network-scripts/ifcfg-eth0

 

TYPE=Ethernet

BOOTPROTO=static

IPADDR=192.168.3.170

NETMASK=255.255.255.0

NAME=eth0

DEVICE=eth0

ONBOOT=yes

 

# vim /etc/sysconfig/network-scripts/ifcfg-eth1

TYPE=Ethernet

BOOTPROTO=static

IPADDR=192.168.1.100

NETMASK=255.255.255.0

GATEWAY=192.168.1.254

NAME=eth1

DEVICE=eth1

ONBOOT=yes

 

配置完成重启网络服务

systemctl restart network

 

 

3.2、定义两个subnet

配置规划的地址池

vim /etc/dhcp/dhcpd.conf

 

subnet 192.168.1.0 netmask 255.255.0.0 {

range 192.168.1.20 192.168.1.30;

option routes 192.168.1.254

}

 

subnet 192.168.2.0 netmask 255.255.0.0 {

range 192.168.2.20 192.168.2.30;

option routes 192.168.2.254

}

 

启动dhcp服务

systemctl start dhcpd.service

 

3.3、验证结果

如果配置正常,结果应该如下图所示,dhcpserver在192.168.1.0这个网段中,而且网关是指向我们的dchp中继服务器的192.168.1.254(中继服务器的eth1)。

DHCP和DCHP Relay实战_第3张图片

dchpd也已经正常启动,且监听在本机所有地的67号端口上。

 

 

4、配置dhcp relay server

四个步骤:

1.打开核心转发

2.配置虚拟机网络环境

3.运行虚拟机

4.启动dhcp replay

 

4.1、打开核心转发功能

echo 1 >/proc/sys/net/ipv4/ip_forward

cat /proc/sys/net/ipv4/ip_forward

 

注意:这里是临时启用,系统重启后会失效

 

4.2、配置虚拟机网络环境

brctl addbr br1 && brctl addif br1 eth1 && ifconfig br1 192.168.1.254/24;

brctl addbr br2 && brctl addif br2 eth2 && ifconfig br2 192.168.2.254/24;

 

提供br1的ifup、ifdown脚本

脚本可以通过文章开头链接获取,脚本可以全部直接放到/etc/下

 

/etc/if-up-br1脚本:

#!/bin/bash

bridge=br1

 

if [ -n "$1" ]; then

ip link set $1 up

sleep 1

brctl addif $bridge $1

[ $? -eq 0 ] && exit 0 || exit 1

else

echo "Error: no port specified."

exit 2

fi

 

/etc/if-down-br1脚本:

#!/bin/bash

bridge=br1

 

if [ -n "$1" ]; then

ip link set $1 down

sleep 1

brctl delif $bridge $1

[ $? -eq 0 ] && exit 0 || exit 1

else

echo "Error: no port specified."

exit 2

fi

 

提供br2的ifup、ifdown脚本

/etc/if-up-br1脚本:

#!/bin/bash

bridge=br2

 

if [ -n "$1" ]; then

ip link set $1 up

sleep 1

brctl addif $bridge $1

[ $? -eq 0 ] && exit 0 || exit 1

else

echo "Error: no port specified."

exit 2

fi

 

/etc/if-down-br2脚本:

#!/bin/bash

bridge=br2

 

if [ -n "$1" ]; then

ip link set $1 down

sleep 1

brctl delif $bridge $1

[ $? -eq 0 ] && exit 0 || exit 1

else

echo "Error: no port specified."

exit 2

fi

 

 

4.3、给于脚本执行权限

chmod +x /etc/qemu-ifup-br{1,2}

chmod +x /etc/qemu-ifdown-br{1,2}

 

4.4、链接qemu-kvm到命令搜索的path环境变量中

 ln -sv /usr/libexec/qemu-kvm /usr/bin/

 

4.5、创建VM1

qemu-kvm -m 128 -smp 1 -name vm1 -drive file=/dhcp/cirros-0.5.1-x86_64-disk-vm1.img,if=virtio,media=disk,format=qcow2, -net nic,macaddr=52:54:00:aa:bb:aa -net tap,ifname=vmnet1,script=/etc/qemu-ifup-br1,downscript=/etc/qemu-ifdown-br1 --nographic

 

4.6、创建VM2

qemu-kvm -m 128 -smp 1 -name vm2 -drive file=/dhcp/cirros-0.5.1-x86_64-disk-vm2.img,if=virtio,media=disk,format=qcow2, -net nic,macaddr=52:54:00:aa:bb:bb -net tap,ifname=vmnet2,script=/etc/qemu-ifup-br2,downscript=/etc/qemu-ifdown-br2 --nographic

 

4.7、启用dhcrelay功能

dhcrelay 192.168.1.100

 

4.8、验证结果

如果过配置正确,br1这个桥上有eth1和vmnet1,br2这个桥上有eth2和vmnet2

DHCP和DCHP Relay实战_第4张图片

且中继服务正常启动起来监听在所有网卡的67号端口上

而且node2中可以使用br1来ping通node1的eth1地址

 

 

 

4、验证结果

VM1如我们预期和DHCP服务器处于同一网段可以获取到地址

DHCP和DCHP Relay实战_第5张图片

 

VM2和DHCP服务器不处于同一网段中也获取到了自己对应网段的地址

DHCP和DCHP Relay实战_第6张图片

 

DHCP服务器上也可以看到这些VM的租约信息

DHCP和DCHP Relay实战_第7张图片

 

你可能感兴趣的:(linux运维)