Catalyst 跨交換器 VLAN 不通時,先核對實際 trunk 狀態、allowed VLAN、native VLAN 與兩端介面模式;不要只看設定檔裡有沒有 VLAN。STP、PoE 與密碼恢復則必須按完整 family 與 IOS/IOS XE release 查文件,不能把一台機型的指令套遍全系列。
VLAN 與 trunk:設好了卻不通,問題幾乎都在這三層
先講機制,才知道為什麼會卡。VLAN 之所以能在同一條實體線上分出多個獨立的廣播網域,靠的是 IEEE 802.1Q 在乙太網框裡插進一個 4 位元組的標籤,其中 12 位元記著 VLAN ID,所以理論上可用範圍是 1 到 4094。兩台交換器之間要同時搬運多個 VLAN,這條 trunk 鏈路就必須讓雙方對「標籤怎麼打、哪些 VLAN 放行、沒打標籤的框算誰的」三件事有共識。共識沒建立,框就過不去,而現場常見的卡點,就落在這三層。
第一層:封裝談不攏
Trunk 封裝命令依 Catalyst family 與 IOS/IOS XE release 而異。部分舊平台曾同時支援 ISL 與 802.1Q,需要先指定 encapsulation;較新平台通常只支援 802.1Q,沒有那條命令。不要只用「2960、3560、9300」代替完整型號與版本,設定前先查該 family 的 interface configuration guide,再核對兩端 native VLAN、allowed VLAN 與 DTP 行為。
另外提一個常被忽略的安全面向:兩端如果都掛在 dynamic auto/dynamic desirable,靠的是思科專屬的 DTP 動態協商 trunk。方便歸方便,但它正是 VLAN 跳躍攻擊的破口:有心人可以誘騙介面自動長出一條 trunk。正式環境的建議是兩端都手動釘成 trunk,並補上 switchport nonegotiate 把 DTP 關掉,別讓埠自己在那裡亂談。
第二層:native VLAN 不一致
trunk 上有一個特別的 VLAN 叫 native VLAN,走它的框是「不打標籤」直接送出去的;反過來,任何沒帶標籤進到 trunk 的框,都會被歸到 native VLAN。問題就出在這裡:兩端 native VLAN 設得不一樣時,A 端不打標籤送出去的框,到了 B 端會被塞進 B 認定的那個 native VLAN,等於流量無聲無息地漏到別的網段。思科交換器會透過 CDP 察覺,並在 log 丟出 NATIVE_VLAN_MISMATCH 警告,看到它,就知道兩端要用 switchport trunk native vlan 對齊。這不只是通不通的問題,native VLAN 設計不當,也正是雙標籤 VLAN 跳躍的溫床,所以實務上會把 native 指到一個沒有任何主機、專門拿來當「垃圾桶」的閒置 VLAN。
第三層:放行清單,最容易自己把自己踢掉
這一層最凶,因為它會當場斷線。switchport trunk allowed vlan 10 的語意是「整份取代」,執行下去,清單就只剩 VLAN 10,其他全部踢出這條 trunk。你要是正透過遠端連線在設定,而管理 VLAN 剛好不是 10,指令一送、SSH 當場斷、人也連不回去。要「新增」永遠記得帶 add,寫成 switchport trunk allowed vlan add 10;要「移除」則用 remove。排查時,三個指令交叉看最快:show interfaces trunk 看這條線實際成不成 trunk、放行了哪些 VLAN;show vlan brief 看 VLAN 存不存在、埠有沒有掛對;show interfaces switchport 比對 Administrative Mode(你設的)跟 Operational Mode(實際協商出來的)是否一致。兩個 Mode 不一樣,就代表協商沒成,答案通常就在前兩層裡。
STP:別讓網路自己打結,也別讓它慢半拍
生成樹(Spanning Tree)的存在,是為了在有實體迴圈的拓撲裡,邏輯上砍掉多餘的路徑,避免二層廣播無限繞圈。它一旦沒顧好,會出兩種毛病:一種是慢,一種是炸。
先講「炸」。二層框頭沒有 IP 那種 TTL 存活計數,一個廣播框只要遇到實體環路,就會被交換器一份份複製、繞著環無限放大,短短幾秒就能把頻寬吃光、把每台交換器的 CPU 打到滿載;MAC 位址表也會因為同一個來源忽左忽右而不斷震盪,整個網段直接癱瘓,這就是廣播風暴。現場最常見的觸發,是有人為了圖方便,隨手把兩個牆上網孔對接、或把一台小交換器接成了環。防這件事,靠的不是運氣,是設計。
傳統 802.1D 收斂較慢,但 PortFast/edge 也不能只看埠名就全開。只有確認是 host-facing、預期不接 bridge 或交換器的埠才啟用,並搭配 BPDU Guard。IP Phone passthrough、hypervisor bridge、下游 unmanaged switch 都要先評估,因為「終端」不代表物理上不可能成環。交換器互連埠則依 STP/RSTP 拓樸正常收斂。
但 portfast 只解決速度,沒解決安全,兩者要搭三道防線一起用:
- BPDU Guard(spanning-tree bpduguard enable):開了 portfast 的埠理應只接終端,不該收到 BPDU。一旦它收到 BPDU,代表有人偷接了交換器、或把線接成了環,這個埠會立刻 err-disable 關閉,把風暴掐死在源頭。這是終端埠的標準配備。
- Root Guard:釘在「不該冒出更優根橋」的方向。收到更優的 BPDU 就把該埠打到 root-inconsistent(形同暫時封鎖),防止接進來的雜牌交換器把根橋搶走。
- Loop Guard:對付單向鏈路。當一個原本收得到 BPDU 的埠突然收不到了(例如光纖單邊故障),Loop Guard 會把它擺進 loop-inconsistent,而不是傻傻轉為 Forwarding,避免製造出一個看不見的環路。
要把根橋釘在你指定的核心交換器,用 spanning-tree vlan 10 root primary,或直接指定 priority(必須是 4096 的倍數,因為預設值 32768 大家都一樣,最後是靠 priority 加 MAC 比大小,誰都沒設就變成純比 MAC,很容易被後來接進來的新機搶走)。還有一條原則:portfast 絕對不能用在交換器對交換器的埠上,那等於把這條線的環路偵測關掉,是在自己家裡埋地雷。若條件允許,直接把整網從老 802.1D 換到 RSTP(802.1w):它用 proposal/agreement 交握取代死等計時器,在點對點鏈路上收斂可以壓到一秒以內,一條上行斷掉幾乎無感,這才是現代網路該有的體質。
PoE:不是插上就有電,功率要用算的
PoE 缺電的 log 很好認,通常是 insufficient power 或 SHUT_OVERDRAWN,意思是所有受電裝置(PD)申請的瓦數加起來,超過了整台交換器的電源預算。用 show power inline 看 Available 與 Used 兩個數字,一眼就知道是不是預算見底。這裡的關鍵觀念是:每一埠能給多少、整機總共能給多少,是兩筆帳,要分開算。
先把標準的階級搞清楚,選型才不會買錯:
- 802.3af(Type 1):PSE 端每埠 15.4W,扣掉線損,PD 端保證有 12.95W,夠帶一般的無線 AP、IP 電話。
- 802.3at(PoE+,Type 2):PSE 端 30W、PD 端 25.5W,對應較耗電的雙頻 AP、球型攝影機。
- 802.3bt(Type 3/Type 4):Type 3 上看 60W;Type 4/Class 8 最高 PSE 端 90W、PD 端約 71.3W,餵得動 PTZ 攝影機、視訊會議設備,甚至輕型的桌機與門禁主機。
注意到 90W 進、71.3W 出這組數字了嗎?中間那將近 19W,是實實在在耗在銅線上、以熱的形式散掉的,這正是高功率 PoE 最容易被忽略的物理限制。而且 af/at 只用兩對線,bt 的高階要用滿四對線;線材一綑起來走管槽,中心那幾條的溫度會比環境高上一大截:業界量測,滿載 90W 的 Cat5e 線束升溫十度以上、五十條擠在一根管裡的中心線甚至比外圍熱上 15 到 20 度,都很常見。所以跑 Type 4 這種等級,線材建議直接上 Cat6A、22 AWG 較粗的導體,並依 TIA 的線束降額規範控制同管條數,別讓熱把餘裕給吃掉。
PoE 能力也要看完整 SKU、電源供應器、network module 與 license/軟體支援,不能用「2960 一定到哪、9300 一定到哪」概括整個 family。先列出每台 PD 的最高耗電,再查 datasheet 的每埠上限與整機 budget,保留冷開機及擴充餘裕;需要保留功率時,也要先確認該 IOS/IOS XE 版本支援的命令與行為。
密碼忘了、設定要救回:交換器跟路由器根本是兩套流程
這是最多人記混、也最容易在現場翻車的地方。三種設備、三套做法,先分清楚再動手。
固定式 Catalyst(2960、3560、3750)
先斷電,按住機身的 MODE 鈕不放再上電,等狀態 LED 轉琥珀色再放手,就進到 switch: 提示。下 flash_init 掛載快閃記憶體,接著把存著密碼的設定檔改名 rename flash:config.text flash:config.old,boot 正常開機後,它就因為找不到設定檔而空機啟動。這時進 enable、把檔名改回來、copy 進 running-config,原本的設定就整包救回來了,再改掉那個不記得的密碼。改完務必 copy running-config startup-config 存檔,否則一重開,又打回原形。
Catalyst 9000 系列(9200、9300)
它沒有上面那套 flash_init 流程,改用開機載入器(boot loader)的環境變數。進到 switch: 提示後,下 SWITCH_IGNORE_STARTUP_CFG=1 叫它這一次開機略過 startup-config,boot 進去就是空設定,你照樣能救回原檔、改密碼。最關鍵、也最多人漏掉的一步:改完一定要下 no system ignore startupconfig switch all 把這個旗標清乾淨,不然它會「每次重開都略過設定」,變成一台每次上電都空機的交換器,那才是惡夢的開始。
別把路由器的那一套硬套進來
很多人一講密碼恢復就想到 confreg 0x2142:在 rommon 模式把組態暫存器改成略過 startup-config,救完再設回 0x2102。那是路由器、ISR 平台的做法,固定式交換器和 9000 系列根本沒有那顆暫存器,硬套只是白費工。還有一個回原廠的陷阱:只 erase startup-config 是清不乾淨的,VLAN 資料庫存在另一個檔裡,得再補一刀 delete flash:vlan.dat,否則 VLAN 與 VTP 設定會殘留,下一手接過去照樣中招。
最後提醒一句跨平台的差異:IOS-XE 的 9000 系列連開機模式都分 install mode 與 bundle mode 兩種,升級步驟不一樣,搞錯一個就是開不了機。這些細節單看指令都不難,難在「知道手上這台是哪一代、該走哪一條路」。