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

 

整體環境通過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服務器分配地址避免影響

 

而後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)。

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

且中繼服務正常啓動起來監聽在所有網卡的67號端口上

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

 

 

 

4、驗證結果

VM1如我們預期和DHCP服務器處於同一網段可以獲取到地址

 

VM2和DHCP服務器不處於同一網段中也獲取到了自己對應網段的地址

 

DHCP服務器上也可以看到這些VM的租約信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章