LAN 表示 Local Area Network ,本地局域網(wǎng),通常使用 Hub 或者 Switch 來(lái)連接LAN 中的計算機。一般來(lái)說(shuō),兩臺計算機連入同一個(gè) Hub 或者 Switch 時(shí),他們就在同一個(gè)LAN中。
一個(gè)LAN 表示一個(gè)廣播域。其含義是:LAN中的所有成員都會(huì )受到任意一個(gè)成員發(fā)出的廣播包。
VLAN 表示 Virtual LAN。一個(gè)帶有VLAN 功能的 Switch 能夠將自己的端口劃分出多個(gè)LAN。計算機發(fā)出的廣播包可以被同一個(gè)LAN中的其他計算機收到,但位于其他LAN的計算機則無(wú)法收到。簡(jiǎn)單的說(shuō),VLAN將一個(gè)交換機分成了多個(gè)交換機,限制了廣播的范圍,在二層將計算機隔離到不同的VLAN中。
比方說(shuō),有兩組機器,Group A 和 Group B ,我們想配置成Group A 中的機器可以互相訪(fǎng)問(wèn),Group B 中的機器也可以互相訪(fǎng)問(wèn),但是 Group A 和 Group B 中的機器無(wú)法互相訪(fǎng)問(wèn)。一種方法是使用兩個(gè)交換機,A和B分別接到不同的交換機上。另一種方法是使用一個(gè)帶VLAN功能的交換機,將 A 和 B的機器分別接到不同的VLAN中。
請注意,VLAN的隔離是二層上的隔離,A 和 B 無(wú)法互相訪(fǎng)問(wèn)指的是二層廣播包(比如arp)無(wú)法跨域VLAN的邊界。但在三成上(比如IP)是可以通過(guò)路由器讓A 和 B 互通的。概念上一定要分清楚。
現在的交換機幾乎都是支持VLAN的。通常交換機的端口有兩種配置模式: Access 和 Trunk,如下圖
Access 口
這些口被打上了VLAN的標簽,表明該端口屬于哪個(gè)VLAN。不同VLAN用VLAN ID 來(lái)區分,VLAN ID 的范圍是 1- 4096 。Access 口都是直接與計算機網(wǎng)絡(luò )相連的,這樣從該網(wǎng)卡出來(lái)的數據包流入 Access口后就被打上了所在的VLAN 標簽。Access 口只能屬于一個(gè)VLAN。
Trunk 口
架設有兩個(gè)交換機 A 和 B 。A上有 VLAN1(紅)、VLAN2(黃)、VLAN3(藍);B 上也有VLAN1、2、3,那如何讓 AB 上相同的VLAN之間能夠通信呢?
辦法是將 A 和 B 連起來(lái),而且連接 A 和 B 的端口要允許 VLAN1、2、3 這三個(gè)VLAN的數據通過(guò)。這樣的端口就是 Trunk 口了。VLAN 1、2、3 的數據包在通過(guò)Trunk 口到達對方交換機的過(guò)程中始終帶著(zhù)自己的VLAN 標簽。
了解了VLAN的概念之后,我們來(lái)看KVM虛擬化環(huán)境下是如何實(shí)現 VLAN 的,見(jiàn)下圖
eth0 數宿主機上的物理網(wǎng)卡,有一個(gè)命名為 eth0.10的自身與之相連。
eth0.10 就是VLAN設備了,其VLAN ID 就是 VLAN10
eth0.10 古仔命名為 brvlan10 的Linux Bridge上,虛機VM1 的虛擬網(wǎng)卡vnet0也掛載brvlan10 上。
這樣配置的效果就是:宿主機用軟件實(shí)現了一個(gè)交換機(虛擬的),上面定義了一個(gè)VLAN10 。 eth0.10 、brvlan10 和 vnet0 都分別接到了 VLAN 10 的Access 口上。而eth0 就是一個(gè) Trunk口。VM1 通過(guò) vnet0 發(fā)出來(lái)的數據包會(huì )被打上 VLAN10 的標簽。
eth0.10 的作用是:定義了VLAN10
brvlan10 的作用是:Bridge 上連接的其他設備自動(dòng)加入到 VLAN10 中。
下面我們在增加一個(gè) VLAN20 ,如圖
這樣虛擬交換機就有兩個(gè)VLAN了,VM1 和 VM2分別屬于 VLAN10 和 VLAN 20 。對于新創(chuàng )建的虛機,只需要將其虛擬網(wǎng)卡放入對應的 Bridge中,就能使用其所屬的 VLAN。
VLAN 設備總是以母子關(guān)系出現,母子設備之間是一對多的關(guān)系。
一個(gè)母設備(eth0),可以有多個(gè)子設備(eth0.10 eth0.20 ....),而一個(gè)子設備只有一個(gè)母設備。