天天看點

Linux 如何實作 VLAN - 每天5分鐘玩轉 OpenStack(12)

LAN 表示 Local Area Network,本地區域網路,通常使用 Hub 和 Switch 來連接配接 LAN 中的計算機。

一般來說,兩台計算機連入同一個 Hub 或者 Switch 時,它們就在同一個 LAN 中。

一個 LAN 表示一個廣播域。

其含義是:LAN 中的所有成員都會收到任意一個成員發出的廣播包。

VLAN 表示 Virtual LAN。一個帶有 VLAN 功能的switch 能夠将自己的端口劃分出多個 LAN。

計算機發出的廣播包可以被同一個 LAN 中其他計算機收到,但位于其他 LAN 的計算機則無法收到。

簡單地說,VLAN 将一個交換機分成了多個交換機,限制了廣播的範圍,在二層将計算機隔離到不同的 VLAN 中。

比方說,有兩組機器,Group A 和 B。

我們想配置成 Group A 中的機器可以互相通路,Group B 中的機器也可以互相通路,但是 A 和 B 中的機器無法互相通路。

一種方法是使用兩個交換機,A 和 B 分别接到一個交換機。

另一種方法是使用一個帶 VLAN 功能的交換機,将 A 和 B 的機器分别放到不同的 VLAN 中。

請注意,VLAN 的隔離是二層上的隔離,A 和 B 無法互相通路指的是二層廣播包(比如 arp)無法跨越 VLAN 的邊界。

但在三層上(比如IP)是可以通過路由器讓 A 和 B 互通的。概念上一定要厘清。

現在的交換機幾乎都是支援 VLAN 的。

通常交換機的端口有兩種配置模式: Access 和 Trunk。看下圖

Access 口

這些端口被打上了 VLAN 的标簽,表明該端口屬于哪個 VLAN。

不同 VLAN 用 VLAN ID 來區分,VLAN ID 的 範圍是 1-4096。

Access 口都是直接與計算機網卡相連的,這樣從該網卡出來的資料包流入 Access 口後就被打上了所在 VLAN 的标簽。

Access 口隻能屬于一個 VLAN。

Trunk 口

假設有兩個交換機 A 和 B。

A 上有 VLAN1(紅)、VLAN2(黃)、VLAN3(藍);B 上也有 VLAN1、2、3

那如何讓 AB 上相同 VLAN 之間能夠通信呢?

辦法是将 A 和 B 連起來,而且連接配接 A 和 B 的端口要允許 VLAN1、2、3 三個 VLAN 的資料都能夠通過。

這樣的端口就是Trunk口了。

VLAN1、2、3 的資料包在通過 Trunk 口到達對方交換機的過程中始終帶着自己的 VLAN 标簽。

了解了 VLAN 的概念之後,我們來看 KVM 虛拟化環境下是如何實作 VLAN 的。還是先看圖,

eth0 是主控端上的實體網卡,有一個命名為 eth0.10 的子裝置與之相連。

eth0.10 就是 VLAN 裝置了,其 VLAN ID 就是 VLAN 10。

eth0.10 挂在命名為 brvlan10 的 Linux Bridge 上,虛機 VM1 的虛拟網卡 vent0 也挂在 brvlan10 上。

這樣的配置其效果就是:

主控端用軟體實作了一個交換機(當然是虛拟的),上面定義了一個 VLAN10。

eth0.10,brvlan10 和 vnet0 都分别接到 VLAN10 的 Access口上。而 eth0 就是一個 Trunk 口。

VM1 通過 vnet0 發出來的資料包會被打上 VLAN10 的标簽。

eth0.10 的作用是:定義了 VLAN10

brvlan10 的作用是:Bridge 上的其他網絡裝置自動加入到 VLAN10 中

我們再增加一個 VLAN20,見下圖

這樣虛拟交換機就有兩個 VLAN 了,VM1 和 VM2 分别屬于 VLAN10 和 VLAN20。

對于新建立的虛機,隻需要将其虛拟網卡放入相應的 Bridge,就能控制其所屬的 VLAN。

VLAN 裝置總是以母子關系出現,母子裝置之間是一對多的關系。

一個母裝置(eth0)可以有多個子裝置(eth0.10,eth0.20 ……),而一個子裝置隻有一個母裝置。

下一節我們通過實驗來實踐 VLAN。

本文轉自CloudMan6 51CTO部落格,原文連結:http://blog.51cto.com/cloudman/1755068

繼續閱讀