OVS中基于VLAN的DHCP地址池實現(xiàn)
前言
VLAN作為一種虛擬局域網(wǎng)技術(shù),在交換機組網(wǎng)管理、云計算平臺的網(wǎng)絡(luò)服務(wù)中都有較為重要的作用,尤其在目前的虛擬交換OVS中,VLAN的應(yīng)用更加靈活和重要,關(guān)于VLAN在OVS中的基礎(chǔ)使用方法,可以參見作者的另一篇文章《基于OVS的VLAN應(yīng)用及實現(xiàn)》,行描述。本文主要介紹在VLAN網(wǎng)絡(luò)中的DHCP服務(wù)器,如何在不同的VLAN網(wǎng)絡(luò)中分配不同網(wǎng)段的DHCP地址池。
一、技術(shù)背景
通常DHCP服務(wù)器能夠根據(jù)DHCP協(xié)議的option擴展字段來分配不同的地址池,由于VLAN屬于二層網(wǎng)絡(luò)屬性,在DHCP上層應(yīng)用中是無法獲取VLAN信息的,想要根據(jù)VLAN信息進行地址池的劃分,要么把VLAN信息通過一定的方式帶到應(yīng)用層,要么在不同的VLAN網(wǎng)絡(luò)中啟用多個DHCP服務(wù),一般情況下,選擇后一種方式較為簡單。
例如,在下圖一個Linux系統(tǒng)的網(wǎng)絡(luò)節(jié)點中,外部不同vlan網(wǎng)絡(luò)可以和節(jié)點中的不同VM主機通信,通過eth0接口接入的設(shè)備需要根據(jù)不同的vlan獲取不同網(wǎng)段的地址,eth0接口為了處理vlan1和vlan2的報文,使用vconfig工具創(chuàng)建eth0.1和eth0.2的虛擬接口,和VM的tap口橋接,然后在每個橋接口上采用接口綁定的方式啟用DHCP Server服務(wù),這樣就完成了不同vlan劃分不同地址池的功能。
二、實現(xiàn)原理
上述基于Linux虛擬接口實現(xiàn)的VLAN處理,如果設(shè)備接口較多,且VLAN子網(wǎng)也較多的情況下,就需要創(chuàng)建很多個VLAN虛接口來處理不同接口的不同vlan報文,比如存在兩個eth0、eth1接口,都需要處理vlan1和vlan2的報文,這樣就需要創(chuàng)建eth0.1、eth0.2、eth1.1、eth1.2四個虛擬接口,這種乘法關(guān)系在網(wǎng)絡(luò)接口和vlan子網(wǎng)較多的場景中使用相對繁瑣,更進一步的,如果這些虛擬接口在虛擬交換OVS中完成多個地址池,也需要創(chuàng)建多個OVS橋。
在OVS網(wǎng)絡(luò)中,有一種類型為internal的橋接口,可以通過針對該接口設(shè)置tag來處理不同vlan的報文,通過在該接口上啟動DHCP服務(wù)來分配不同的地址池,實現(xiàn)組網(wǎng)如下圖所示:
其中eth1和eth2作為OVS的trunk口轉(zhuǎn)發(fā)鏈路上的報文,dhcp1和dhcp2分別是tag為1和2的internal類型的橋接口,在dhcp1和dhcp2上配置地址并啟用DHCP Server,這樣就完成了不同的VLAN分配不同地址池的要求。
三、配置命令
創(chuàng)建ovs橋Java
- # ovs-vsctl add-br br-ovs
eth1和eth2加入OVSJava
- # ovs-vsctl add-port br-ovs eth1
- # ovs-vsctl add-port br-ovs eth1
創(chuàng)建啟用dhcp服務(wù)的橋接口dhcp1和dhcp2Java
- # ovs-vsctl add-port br-ovs dhcp1 -- set interface dhcp1 type=internal
- # ovs-vsctl add-port br-ovs dhcp2 -- set interface dhcp2 type=internal
設(shè)置dhcp1和dhcp2的tagJava
- # ovs-vsctl set Port dhcp1 tag=1
- # ovs-vsctl set Port dhcp2 tag=2
查看上述配置如下:
配置地址到橋接口dhcp1和dhcp2Java
- # ifconfig dhcp1 192.168.1.1
- # ifconfig dhcp2 10.0.0.1
在dhcp1和dhcp2上啟動dhcp服務(wù)Java
- # dnsmasq --bind-interfaces --except-interface=lo --interface dhcp1
- --dhcp-range 192.168.1.2,192.168.1.10
- # dnsmasq --bind-interfaces --except-interface=lo --interface dhcp2
- --dhcp-range 10.0.0.2,10.0.0.10
四、測試結(jié)果
用PC設(shè)備運行dhcp client獲取地址,并通過交換機分別打上tag1和tag2接入eth1(或eth2)進行vlan的測試。當(dāng)tag值為1時,在eth1上通過tcpdump抓包可以看到vlan1的dhcp報文如下:
在dhcp1上通過tcpdump抓包可以看到dhcp報文如下:
當(dāng)tag值為2時,在eth1上通過tcpdump抓包可以看到vlan2的dhcp報文如下:
在dhcp2上通過tcpdump抓包可以看到dhcp報文如下:
從上面的驗證結(jié)果可以看出,兩個橋接口dhcp1和dhcp2根據(jù)配置的tag只選擇處理了對應(yīng)vlan值的報文,完成了不同網(wǎng)段的VLAN隔離,從而實現(xiàn)了不同VLAN分配不同DHCP地址池的功能。