VLAN 介紹

November 10, 2019

VLAN(Virtual LAN) 是交換器上一個很重要的技術,它可以去規劃一個區域網路內的組織,也就是可將不同類型的部門網路進行邏輯上的網路切分。VLAN 的技術可將一台交換器上的埠分成幾個群,而每個群又可透過 VLAN 特性再做一些詳細設定,VLAN 邏輯上根據切分的群就有幾個廣播網域(Broadcast Domain),所以這也讓不同的 VLAN 再域設下不能直接相互通訊。透過 VLAN 技術切分的廣播網域相比原本同一 LAN 下的廣播域對網路負擔要來的小。

VLAN 資料轉發

在多個交換器之間設定的 VLAN,則域設下只有同一 VLAN 才能通訊。在預設下交換器都屬於同一 VLAN 中,因此針對於接收到的封包對所有埠做 flooding 動作是對的,因此做了 VLAN 後,VLAN 間傳遞封包只會在該 VLAN 中進行 flooding。另外一個重點是 trunk,它用來對跨越多個交換器的 VLAN 進行轉發,要設置 trunk 則接口需要是 FastEthernet 以上才可設定。

trunk 資料轉發

trunk 會在封包內增加一個標籤,用來指名這封包是屬於哪個 VLAN,而這標邊被新增後將傳往下個設備。下個設備收到之後,再根據標籤來得知此封包是屬於哪個 VLAN,然後再轉發至所屬的 VLAN

這邊將透過下面架構進行 VLAN 操作,這邊大致上會以 ESW1 做設定,ESW2 則是對應這邊不再多做說明與設置。

查看 ESW1 交換器 VLAN 訊息,發現所有接口預設都是 VLAN 1,在這種情況下我們的路由器 R1 至 R6 都能相互通訊。

ESW1#show vlan-switch

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa1/0, Fa1/1, Fa1/2, Fa1/3
                                                Fa1/4, Fa1/5, Fa1/6, Fa1/7
                                                Fa1/8, Fa1/9, Fa1/10, Fa1/11
                                                Fa1/12, Fa1/13, Fa1/14, Fa1/15
1002 fddi-default                     active
1003 token-ring-default               active
1004 fddinet-default                  active
1005 trnet-default                    active

VLAN Type  SAID       MTU   Parent RingNo BridgeNo Stp  BrdgMode Trans1 Trans2
---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------
1    enet  100001     1500  -      -      -        -    -        1002   1003
1002 fddi  101002     1500  -      -      -        -    -        1      1003
1003 tr    101003     1500  1005   0      -        -    srb      1      1002
1004 fdnet 101004     1500  -      -      1        ibm  -        0      0
1005 trnet 101005     1500  -      -      1        ibm  -        0      0

接著我們配置 VLAN 觀察,R1 和 R4 我們讓它預設;R2 和 R5 設至為 VLAN 20;R3 和 R6 為 VLAN 30。

建立 VLAN。

ESW1#vlan database
ESW1(vlan)#vlan 20 name R2&R5
VLAN 20 added:
    Name: R2&R5
ESW1(vlan)#vlan 30 name R3&R6
VLAN 30 added:
    Name: R3&R6
ESW1(vlan)#

查看是否建立

ESW1#show vlan-switch

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa1/0, Fa1/1, Fa1/2, Fa1/3
                                                Fa1/4, Fa1/5, Fa1/6, Fa1/7
                                                Fa1/8, Fa1/9, Fa1/10, Fa1/11
                                                Fa1/12, Fa1/13, Fa1/14, Fa1/15
20   R2&R5                            active # this
30   R3&R6                            active # this
...

接著要設定接口至 VLAN,關鍵指令為 switchport mode。該關鍵指令有四個值,在建立之前我們了解以下

  1. Trunk 表示此埠要被設至為 802.1Q 協定。它同時也會將另一個對接的接口協商要使用哪種 Trunk
  2. Access 連接電腦端點才會設定的模式,此模式可用於設置 Port Security
  3. Dynamic desirable 本機埠和對接埠進行自動協調,用來將非 Trunk 協調成 Trunk,如果對接埠為 Access 則將不會形成 Trunk
  4. Dynamic auto 當自己的埠設定為 Dynamic auto 時,對接埠為 TrunkDesirable,將會協調成 Trunk,如果對接埠是 AccessAutoTrunk 無法協調成功。
TrunkAccessDesirableAuto
TrunkTrueTrueTrue
Access
DesirableTrueTrueTrue
AutoTrueTrue

我們設置相關埠 VLAN,如下

ESW1(config)#interface fastEthernet 1/1
ESW1(config-if)#switchport mode access
ESW1(config-if)#switchport access vlan 20
ESW1(config-if)#exit
ESW1(config)#interface fastEthernet 1/2
ESW1(config-if)#switchport mode access
ESW1(config-if)#switchport access vlan 30
ESW1(config-if)#exit

每一個埠只能屬於某一個 VLAN

查看有無分配

ESW1(config)#do sh vlan-switch

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa1/0, Fa1/3, Fa1/4, Fa1/5
                                                Fa1/6, Fa1/7, Fa1/8, Fa1/9
                                                Fa1/10, Fa1/11, Fa1/12, Fa1/13
                                                Fa1/14, Fa1/15
20   R2&R5                            active    Fa1/1
30   R3&R6                            active    Fa1/2
1002 fddi-default                     active
1003 token-ring-default               active
...

設置完之後嘗試互 ping,發現只有 VALN 1 的埠可以相互連接,不是要有 trunk 才能讓跨多交換器的 VLAN 通訊嗎?原因是沒有被貼上 VLAN 標籤的封包都會被送往預設 VLAN 也就是 VLAN 1,因此 VLAN 1 的埠可以通訊。

屬於 VLAN 20 或 VLAN 30 的路由器相互也不能通,原因大致上是設定了 VLAN 但是交換器接收到了卻無法辨別這 VLAN 要送往哪邊,因此要透過 trunk 讓交換器知道 VLAN 的標籤,然後正確的從埠做轉發。

設置 ESW1 和 ESW2 相互連接的埠為 trunk

ESW1(config)#interface fastEthernet 1/15
ESW1(config-if)#switchport mode trunk
ESW1(config-if)#switchport trunk encapsulation dot1q

ESW2(config)#interface fastEthernet 1/15
ESW2(config-if)#switchport mode trunk
ESW2(config-if)#switchport trunk encapsulation dot1q

查看 trunk 接口訊息

ESW1#show interfaces trunk

Port      Mode         Encapsulation  Status        Native vlan
Fa1/15    on           802.1q         trunking      1

Port      Vlans allowed on trunk
Fa1/15    1-1005

Port      Vlans allowed and active in management domain
Fa1/15    1,20,30

Port      Vlans in spanning tree forwarding state and not pruned
Fa1/15    1,20,30

設置完之後屬於 VLAN 20 或 VLAN 30 的路由器能夠在相同 VLAN ID 中進行通訊。至於 VLAN 20 無法與 VLAN 30 的路由器通訊,是另一個話題。我們利用 Wireshark 從 trunk 的鏈路進行簡單的觀察。

下圖顯示出經過 trunk 時會攜帶一個 VLAN 標籤。

下圖在 VLAN 1 進行通訊時,不攜帶該 VLAN 標籤。

綜合以上,我們可以設定出在多個交換器中相同 VLAN ID 的終端相互通訊。

我們在使用 show interfaces trunk 發現有一個 Vlans allowed on trunk 字段,它可以限制 VLAN ID 為多少時可以通過,預設是全部 1-1005。我們可以嘗試只讓 VLAN 30 和 VLAN 1 通過,設定如下

需在 trunk 埠上設定,同時查看 trunk 接口資訊發現確實更改。此時嘗試互 ping VLAN 20 的路由器,發現無法通訊。

ESW1(config-if)#switchport trunk allowed vlan 1-19,30-1005
ESW1(config-if)#do sh int trunk

Port      Mode         Encapsulation  Status        Native vlan
Fa1/15    on           802.1q         trunking      1

Port      Vlans allowed on trunk
Fa1/15    1-19,30-1005

Port      Vlans allowed and active in management domain
Fa1/15    1,30

Port      Vlans in spanning tree forwarding state and not pruned
Fa1/15    1,30

以下是 switchport trunk allowed vlan 可設定方式

#switchport trunk allowed vlan ?
  WORD    VLAN IDs of the allowed VLANs when this port is in trunking mode
  add     add VLANs to the current list
  all     all VLANs
  except  all VLANs except the following
  remove  remove VLANs from the current list

其他資訊

VLAN 1 是 trunk 上的一個 Native VLAN,其表示不會放至標籤至 trunk 鏈結上。但,該值是可以設定的,對於 trunk 鏈接來說雙方的埠所設定的 Native VLAN 需一致。我們下面嘗試一下吧!

Native VLAN 改為 VLAN 20,同時將 trunk 鏈結設定全部可通過。透過查看 trunk 接口可以得知現在已經更改為 20。對於預設 Native vlan 是包括所有的埠,對於資訊安全有疑慮,最好是做更改。

ESW1(config-if)#switchport trunk native vlan 20
ESW1(config-if)#switchport trunk allowed vlan all
ESW1(config-if)#do sh int trunk

Port      Mode         Encapsulation  Status        Native vlan
Fa1/15    on           802.1q         trunking      20

Port      Vlans allowed on trunk
Fa1/15    1-1005

Port      Vlans allowed and active in management domain
Fa1/15    1,20,30

Port      Vlans in spanning tree forwarding state and not pruned
Fa1/15    30