釐清網管型 Switch 裡與 VLAN + Tag + Untag 之間的觀念

前陣子大約有一段長達兩個月的時間被兩台網管型 Switch 折磨的不成人形,由於機房環境有切內外網,因此都用 VLAN 切開,由於我之前都沒用過網管型的 Switch 設備,因此也不太清楚原來有這麼多細節需要注意,原本網路通了就應該放棄研究的(就是不切 VLAN 即可),但一顆心懸在一個無法理解的問題讓我十分難受,最後還是花了兩個月時間不斷抽空跑機房、做測試、打電話尋求支援,最後終於徹底釐清觀念,但我不保證這篇文章可以寫的有多詳盡就是了,但可以供有興趣的人參考。

問題描述

以下是我第一台 Switch 的 VLAN 與接線示意圖與設定描述:( 廠牌為 D-Link,假設名稱為 Switch 1 )

image

  • Port 1 是 Router Port ( 也就是從 ISP 的 Router 接到我們機櫃的那條線 )
  • Port 01 ~ 08 為 VLAN 1
  • Port 09 ~ 16 為 VLAN 2

 

以下是我第二台 Switch 的 VLAN 與接線示意圖與設定描述:( 廠牌為 Intel,假設名稱為 Switch 2 )

image

  • Port 01 ~ 08 為 VLAN 1
  • Port 09 ~ 16 為 VLAN 2
  • Port 01 接上 Switch 1 的 Port 02
  • Port 09 接上 Switch 1 的 Port 10

由於兩台都已經設定了 VLAN,我原本以為說設定了 VLAN 就等同於在 Switch 實體隔離了這些 Ports,當我只接上 Switch 1 的 Port 02 接上 Switch 2 的 Port 01 是沒問題的,Switch 兩邊的網路會通,而且兩邊又是同樣的 VLAN 所以不覺得有異。

但是當我 Switch 1 的 Port 10 接上 Switch 2 的 Port 09 之後,VLAN 2 的網路就完全不通,可是 VLAN 1 的網路都是正常的!

就是這個詭異的問題卡了我兩個月才解決,各位可以在繼續看下去之前看能不能想到解決的方向或知道解決的方式與發生的原因。

 

連續的錯誤觀念導致錯誤假設

首先,我不認為我的接線方式有錯,畢竟兩台都已經切 VLAN 了,封包應該已經隔離了啊。 (錯誤觀念)

接著,D-Link 的 Spanning tree 預設是關閉的,如果有廣播風暴或迴路發生,應該會有更多 Ports 發生問題才是,因為我缺乏網管型 Switch 的使用經驗,因此直覺認為所有 Switch 的預設 Spanning tree 都是關閉的。 (錯誤觀念)

再來,我看了 ZMAN 在 酷!學園 上對 VLAN 的 tagged & untagged 觀念 的解釋之後,設定依然失敗 (其實是沒真正看懂,所以才設定錯誤),這狀況再度驗證朋友跟我說的「D-Link Switch 真的很爛」這句話。(錯誤觀念)

錯誤發生原因是我在解決問題後才歸納出來的,解決問題的過程中沒想到會這樣。

 

導正上述錯誤觀念

  1. 設定 VLAN 不代表對 Ports 的實體隔離,因此接了兩條網路線之後,其實兩條網路現都會彼此交換封包,以致於造成一個封包交換迴路,而 Intel 的 Switch 又正好啟用 Spanning tree 所以會將其中一個有問題的迴路給關閉,因此網路自然會斷線。
  2. 原來在我的網路環境下 Intel 的網管型 Switch 預設是將 Spanning tree 打開的,由於已經發生了迴路,因此 Spanning tree 發生了作用,而 Switch 2 ( Intel ) 會把從 Switch 1 (D-Link) Port 10 傳來的 packet 全部丟棄,因此 VLAN 兩邊的網路才無法連通!
  3. 學網管必須學會如何做 PoC (觀念驗證),不要相信別人告訴你的感覺。另外 tagged & untagged 可以非常靈活的運用,不單單只是文章寫的那樣而已,在 Switch 的使用手冊裡有提到一些應用的情境,還蠻複雜的。

以下是 Intel 的網管型 Switch 預設是將 Spanning tree 打開的示意畫面:

 

解決問題的方法

由於我不相信 D-Link 的設備有問題,還好 D-Link 的技術客服還不錯,都會有專業工程師回答,對方教了我許多觀念,最後還教我學會設定 Tag VLAN。免付費技術服務專線0800-002-615

以下是我對 Tag 與 Untag 的理解,這些就是因為解決這個問題學到的:

Tagged VLAN Ports / Tagged Packets

在複雜一點的網路架構裡,會用 VLAN 來切割網路環境,但在使用多台 Switch 之間做封包交換時如果兩邊都有設定 VLAN 的話,就很可能會遇到跟我一樣的問題。在多 Switch 的情況下,封包交換時必須依賴 Tag 資料封裝在 FRAME 最前面加一個 4 Bytes 的 TAG ( 前面 2 BYTES 固定是 8100h ),基本上來說 Tag 就代表著一個附帶的資訊,可告訴網路設備說我這次傳入的封包是一個帶有 Tag 資訊的封包。

對不支援 Tagged VLAN 的 Switch 來說,這類封包會自動丟棄 (因為看不懂),但是對網管型的 Switch 來說透過適當的設定就可以正確的識別封包,並將該封包交換到適當的 VLAN Ports。

Untagged VLAN Ports / Untagged Packets

Switch 裡預設的情況下所有的 Ports 都是 Untagged VLAN Ports,而所有從 Switch 流入、流出的封包也都應該是 Untagged 的封包,也就是說封包本身並沒有附帶任何 FRAME 以外的資訊,所有無論網管型或一般型的 Switch 都可以認識這種格式的封包。

 

實例解說

例如說我將 Switch 1 的 Port 02 被標注為 Tagged VLAN Port 時,就代表著從這個 Port 流出的封包都會帶有 802.1Q 的 Tag 資訊,而流入的封包也會自動識別該封包是否帶有 Tag 資訊,就算流入的封包是屬於 Untagged 封包,在 Tagged VLAN Port 是可以正常識別的。

任何其他標注為 Untagged VLAN Ports 的 Port,流入的封包如果含有 Tag 資訊,該封包就會被丟棄。而從這個 Port 流出的封包如果是帶有 VLAN Tag 的,其 Tag 資訊在封包流出時會自動被剔除。

因此,在兩台 Switch 都有設定多組 VLAN ID 的情況下,在兩台 Switch 對接的那個 Port 必須都調整為 Tagged VLAN Port 才行,而且也只能有這一條對接的實體線路,這樣一來兩邊的封包就統一透過這兩個對接的 Ports 交換封包。

在我的 Switch 1 我就同時把 Port 02 設定在 VLAN ID 1 的 Untagged VLAN Ports,以及設定在 VLAN ID 2  的 Tagged VLAN Port,如此一來我的 Port 02 就可以同時交換 VLAN ID 1 與 VLAN ID 2 的封包到另一台 Switch 2 了。設定如下圖示:

最後,我們到 Switch 2 的 Port 01 設定為 VLAN ID 2 的 Tagged VLAN Port 即可大功告成!

 

心得分享

其實在這兩個月的過程中,我問過許多對網管型 Switch 有許多經驗的人,但卻沒有人知道為什麼,且也沒人能將整個觀念說清楚,還有人跟我說 D-Link Switch 真的很爛,叫我換一個牌子(但我已經過七天鑑賞期了不能退貨),不然就是說一些國內的小廠 (相較於國外的大廠啦) 實做出來的 802.1Q 不夠標準,所以可能是因為這樣才不能用,諸如此類的,我個人一直處於半信半疑的狀態就是了。

在這幾年間「D-Link Switch 真的很爛」這句話我已經聽過太多遍,即便我跟朋友說我買了 D-Link 的「網管型」 Switch,他們還是覺得不可靠,但在我的下意識裡網管型這三個字就是代表比較高檔的 Switch,我實在不願意相信 D-Link 會推出一個真的有問題 (不符合 IEEE 規格) 的網管型產品來賣,畢竟 D-Link 也在市場上存在這麼久了,所以這篇文章應該可以幫他平反一些些吧。 XD

走過這一遭,讓我有個很深刻的體悟,那就是網管這東西真的不簡單,但很有趣的是,只要懂了,網管工作就會變的非常非常簡單!專業的網管,應該是準時上下班,每天上班都在打屁聊天的那種 (誤),呵呵。

Read more

How to document Home Lab and Network

運維機房和跨域的網路,會遇到各式需求與問題,用對工具才能分析問題,個人覺得最重要的是使用能處理問題的工具。 推薦目前想學和正在使用的平台與軟體,協助將公司/家用機房文件化 佈告欄任務管理 Focalboard 白板可管理任務指派 網路架構文件編寫 netbox 精細管理網路設備與連接線路 IP 資源管理 phpipam 專注網路IP分配 邏輯塊文件編寫 draw.io 視覺化概念圖 機房設備管理 ITDB 管理設備生命週期與使用者

By Phillips Hsieh

如何在Raspberry Pi4上安裝Proxmox for ARM64

第一步 準備好Raspberry Pi 4 / CM4 4GB RAM,這裡要留意CM4如果是買有內建eMMC storage會限制不能使用SD卡開機而限制本地空間容量,如果沒有NAS外接空間或使用USB開機的話,建議買CM4 Lite插上大容量SD卡 第二步 去Armbian官網下載最小化Debian bookworm image https://www.armbian.com/rpi4b/ Armbian 25.2.2 Bookworm Minimal / IOT 然後寫入SD/USB開機碟,寫入方法參考官方文件 https://github.com/raspberrypi/usbboot/blob/master/Readme.md Note: 官方提供的預先設定系統方法,可以在Armbian初次啟動自動化完成系統設定。連結在此 https://docs.armbian.com/User-Guide_Autoconfig/

By Phillips Hsieh

世界越快心越慢

在晚飯後的休息時間,我特別享受在客廳瀏灠youtube上各樣各式創作者的影音作品。很大不同於傳統媒體,節目多是針對大多數族群喜好挑選的,在youtube上我會依心情看無腦的動畫、一些旅拍記錄、新聞時事談論。 尤其在看了大量的Youtube的分享後,我真的感受到會限制我的是我的無知,特別是那些我想都沒想過的實際應用,在學習後大大幫助到我的生活和工作層面。 休息在家時,我喜歡想一些沒做過的菜,動手去設計生活和工作上的解決方案,自己是真的很難閒著沒事做。 如創作文章,陪養新的習慣都能感覺到成長的喜悅,是不同於吃喝玩樂的快樂的。 創作不去限制固定的形式,文字是創作、影像聲音也是創作,記錄生活也是創作,我想留下的就是創造—》實現—》回憶,這樣子的循環過程,在留下的足跡面看到自己一路上的成長、失敗、絕望、重新再來。 雖然大部份的時候去做這些創作也不明白有什麼特別的意義,但不去做也不會留下什麼,所以呀不如反事都去試試看,也許能有不一樣的水花也許有意想不到的結果,投資自己永遠不會是失敗的決定,不是嗎?先問問自己再開始計畫下一步,未來沒人說得準。 像最近看youtube仍大一群人在為DOS開

By Phillips Hsieh

知識管理的三個步驟:一小時學會把知識運用到生活上

摘錄瓦基「閱讀前哨站」文章作為自己學習知識管理的內容 Part1「篩選資訊」 如何從海量資訊中篩選出啟發性、實用性和相關性的精華,讓你在學習過程中不再迷失方向。 1. 實用性 2. 啟發性 Part2「提高理解」 如何通過譬喻法和應用法,將抽象的知識與日常生活和工作緊密結合,建立更深刻的理解。 1. 應用法 2. 譬喻法 Part3「運用知識」 如何連結既有知識,跟自己感興趣的領域和專案產生關聯,讓你在運用知識的路途上游刃有餘。 1. 跟日常工作專案、人際活動產生連結 # 為什麼要寫日記? * 寫日記是為了忘記,忘卻瑣碎事情,保持專注力 * 寫日記就像在翻譯這個世界,訓練自己的解讀能力 * 不只是透過日記來記錄生活,而是透過日記來發展生活 #如何寫日記? * 不要寫流水帳式的日記,而是寫覆盤式的日記 當我們試著記錄活動和感受之間的關聯,有助於辦認出真正快樂的事 日記的記錄方式要以過程為主,而非結果 * 感恩日記的科學建議,每日感恩的案例

By Phillips Hsieh