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