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