戰(zhàn):從故障排查到跨廠商配置指南)
1. 從一個全網(wǎng)不通的故障說起剛接手網(wǎng)絡(luò)運(yùn)維那會兒我遇到過一個至今印象深刻的故障。某天下午辦公區(qū)三樓整層突然斷網(wǎng)同事反饋電腦右下角顯示已連接但什么都打不開。我第一反應(yīng)是交換機(jī)掛了跑過去一看設(shè)備指示燈正常端口燈也在閃。登錄交換機(jī)查配置發(fā)現(xiàn)這臺接入交換機(jī)上所有端口都在同一個默認(rèn)VLAN里而當(dāng)天上午有人為了隔離廣播風(fēng)暴把上聯(lián)口改成了Trunk模式卻沒同步調(diào)整接入端口的VLAN劃分。結(jié)果就是接入端口發(fā)出的無標(biāo)簽幀到了Trunk口被當(dāng)成Native VLAN的流量處理而Native VLAN又和上層核心的配置對不上數(shù)據(jù)包在二層就被丟棄了。這個故障的本質(zhì)就是VLAN與Trunk配置不匹配。VLAN解決的是把一臺物理交換機(jī)邏輯上切成多臺的問題Trunk解決的是多臺交換機(jī)之間怎么傳遞多個VLAN的流量的問題。這兩件事單獨(dú)看都不復(fù)雜但組合在一起加上Native VLAN、PVID、允許列表這些細(xì)節(jié)就特別容易出問題。我后來帶過不少新人發(fā)現(xiàn)大家卡住的地方高度一致知道概念但不知道配置時每一步在干什么出了問題也不知道從哪查。這篇內(nèi)容就是把我這些年配VLAN和Trunk的經(jīng)驗(yàn)完整梳理一遍。不管你是剛接觸網(wǎng)絡(luò)設(shè)備的新手還是配過幾次但總踩坑的同行都能從里面找到可以直接抄的配置和排查思路。我會從最基礎(chǔ)的為什么需要VLAN講起一路講到Trunk的封裝、Native VLAN的坑、跨廠商配置差異以及一套我常用的排錯流程。全程用華為/華三風(fēng)格的命令為主思科的關(guān)鍵差異會單獨(dú)標(biāo)注因?yàn)檫@兩套在國內(nèi)企業(yè)網(wǎng)里最常見。2. VLAN到底在解決什么問題為什么不能只靠劃分子網(wǎng)2.1 廣播域太大是萬惡之源很多人學(xué)VLAN的時候第一句話就是VLAN用來隔離廣播域。這話沒錯但太抽象。我換個說法假設(shè)一個公司有200臺電腦接在幾臺交換機(jī)上全在同一個二層網(wǎng)絡(luò)里。任何一臺電腦發(fā)一個ARP請求比如誰是192.168.1.50這個請求會被交換機(jī)泛洪到所有端口200臺電腦都得收下來看一眼不是找自己的就丟掉。一臺電腦這么干無所謂但如果200臺電腦每分鐘都在發(fā)ARP、發(fā)DHCP發(fā)現(xiàn)、發(fā)各種廣播整個網(wǎng)絡(luò)的帶寬和CPU就被這些跟自己無關(guān)的流量吃掉了。更麻煩的是故障域。某臺電腦網(wǎng)卡故障瘋狂發(fā)廣播幀整個二層網(wǎng)絡(luò)都會被拖慢這就是典型的廣播風(fēng)暴。你沒法在二層層面阻止它因?yàn)榻粨Q機(jī)默認(rèn)就是泛洪廣播。VLAN的作用就是把這200臺電腦按部門、按樓層、按用途切成若干個邏輯小組每個小組是一個獨(dú)立的廣播域。三樓的廣播傳不到二樓財務(wù)部的廣播傳不到研發(fā)部。故障被限制在一個VLAN內(nèi)部不會擴(kuò)散。這里有個新手常犯的認(rèn)知錯誤以為VLAN就是子網(wǎng)。不是的。VLAN是二層概念子網(wǎng)是三層概念。你可以讓一個VLAN對應(yīng)一個子網(wǎng)這是最常見的做法也可以讓多個VLAN共用一個子網(wǎng)不推薦但技術(shù)上可行還可以讓一個VLAN里跑多個子網(wǎng)。VLAN標(biāo)簽Tag是加在以太網(wǎng)幀里的跟IP地址沒有直接關(guān)系。理解這一點(diǎn)后面看Trunk的時候才不會亂。2.2 一個VLAN就是一個廣播域也是一組端口的集合配置VLAN最直接的方式是基于端口劃分。比如把交換機(jī)的1到8口劃給VLAN 10研發(fā)部9到16口劃給VLAN 20財務(wù)部。這樣插在1口的電腦和插在9口的電腦即使IP在同一網(wǎng)段二層也通不了因?yàn)樗鼈冊诓煌膹V播域里。華為/華三的配置邏輯是這樣的# 創(chuàng)建VLAN system-view vlan 10 description RD vlan 20 description FIN quit # 把端口劃入VLANAccess模式 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/9 port link-type access port default vlan 20 quit思科的寫法略有不同vlan 10 name RD vlan 20 name FIN interface FastEthernet0/1 switchport mode access switchport access vlan 10注意這里的關(guān)鍵詞Access模式。Access端口是接終端的端口它只屬于一個VLAN發(fā)出的幀不帶標(biāo)簽Untagged。電腦網(wǎng)卡不認(rèn)識VLAN標(biāo)簽所以接電腦的端口必須是Access把標(biāo)簽剝掉再發(fā)給電腦。這一點(diǎn)非常重要后面講Trunk的時候會反復(fù)對比。2.3 為什么不能只用路由器劃子網(wǎng)來隔離有人會問我不用VLAN直接用路由器每個部門一個物理接口接一個子網(wǎng)不也能隔離嗎能但成本高得離譜。200臺電腦分10個部門你得有10個路由器接口、10臺交換機(jī)或者10組獨(dú)立布線。而且部門調(diào)整的時候你得重新拉線、重新配接口。VLAN的價值就在于物理布線不用動邏輯分組隨便改。今天1口是研發(fā)明天研發(fā)搬走了改一條命令把1口劃到財務(wù)VLAN線都不用碰。這就是VLAN在企業(yè)網(wǎng)里不可替代的原因。它把物理位置和邏輯歸屬解耦了。你坐在哪個工位不重要重要的是你的端口被劃到了哪個VLAN。3. Trunk的封裝機(jī)制標(biāo)簽是怎么加上去又剝下來的3.1 單臺交換機(jī)不夠用VLAN必須跨設(shè)備傳遞VLAN在單臺交換機(jī)上很好理解但現(xiàn)實(shí)是一棟樓有十幾臺接入交換機(jī)都上聯(lián)到一臺核心交換機(jī)。研發(fā)部的員工可能分散在三樓和四樓的交換機(jī)上但他們要在一個VLAN里。這時候問題來了三樓交換機(jī)上的VLAN 10流量怎么傳到四樓交換機(jī)中間要經(jīng)過核心交換機(jī)這條鏈路上跑的不只是VLAN 10還有VLAN 20、VLAN 30……如果這條鏈路上每個VLAN都拉一根物理線那核心交換機(jī)的端口很快就不夠用了。Trunk的作用就是在一根物理鏈路上同時傳遞多個VLAN的流量。實(shí)現(xiàn)方式是在幀里插入一個VLAN標(biāo)簽Tag標(biāo)明這個幀屬于哪個VLAN。接收方看到標(biāo)簽就知道該把幀轉(zhuǎn)發(fā)到哪個VLAN。這個標(biāo)簽的標(biāo)準(zhǔn)叫IEEE 802.1Q是在以太網(wǎng)幀的源MAC地址后面插入4個字節(jié)。其中12位是VLAN ID所以VLAN ID的范圍是0到4095實(shí)際可用的是1到40940和4095保留。這4個字節(jié)里還有3位優(yōu)先級用于QoS1位是CFI現(xiàn)在基本不用。對普通配置來說你只需要記住標(biāo)簽里最關(guān)鍵的就是VLAN ID。3.2 Access端口和Trunk端口的本質(zhì)區(qū)別我把這兩種端口的處理邏輯用一張表說清楚這是整個VLAN配置的核心端口類型接收無標(biāo)簽幀接收帶標(biāo)簽幀發(fā)送幀時Access打上PVID進(jìn)入對應(yīng)VLAN一般丟棄除非是Native VLAN剝掉標(biāo)簽以無標(biāo)簽發(fā)出Trunk打上Native VLAN的PVID檢查VLAN是否在允許列表在則通過除Native VLAN外都帶標(biāo)簽發(fā)出這張表里的PVIDPort VLAN ID是理解一切的關(guān)鍵。PVID是端口的默認(rèn)VLAN當(dāng)端口收到一個不帶標(biāo)簽的幀時就認(rèn)為它屬于PVID對應(yīng)的VLAN。Access端口的PVID就是它所屬的那個VLANTrunk端口的PVID默認(rèn)是VLAN 1也就是Native VLAN。我見過太多人栽在Native VLAN上。簡單說Trunk兩端Native VLAN必須一致否則帶標(biāo)簽的幀會被錯誤地當(dāng)成無標(biāo)簽幀處理導(dǎo)致VLAN串?dāng)_或者流量丟失。華為/華三默認(rèn)Native VLAN是1思科也是1但很多企業(yè)為了安全會把Native VLAN改成一個不用的VLAN比如999這時候兩端必須同步改。3.3 Trunk配置的完整命令與逐行解釋華為/華三的Trunk配置interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 30 port trunk pvid vlan 999 quit逐行解釋port link-type trunk把端口設(shè)為Trunk模式。port trunk allow-pass vlan 10 20 30允許VLAN 10、20、30的流量通過。沒在列表里的VLAN流量會被丟棄。這是安全控制的關(guān)鍵不要圖省事寫allow-pass vlan all除非你確實(shí)需要所有VLAN都通過。port trunk pvid vlan 999把Native VLAN改成999。這一步是可選的但推薦做原因后面講。思科的對應(yīng)配置interface GigabitEthernet0/1 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk allowed vlan 10,20,30 switchport trunk native vlan 999思科多了一步switchport trunk encapsulation dot1q因?yàn)槔显O(shè)備可能支持ISL封裝思科私有已淘汰?,F(xiàn)在新設(shè)備默認(rèn)就是dot1q但寫上不虧。注意Trunk兩端的允許VLAN列表必須匹配。如果一端允許10、20另一端只允許10那VLAN 20的流量在第二端會被丟棄。我排查過好幾次某個VLAN時通時不通最后都是allow-pass列表不一致。4. 那些年我在Native VLAN和PVID上踩過的坑4.1 Native VLAN不一致導(dǎo)致的詭異丟包前面提到Native VLAN必須一致但實(shí)際故障表現(xiàn)是什么樣的我講一個真實(shí)案例細(xì)節(jié)做了脫敏。兩臺交換機(jī)用Trunk互聯(lián)一端Native VLAN是1另一端被改成了999。結(jié)果VLAN 10的流量正常因?yàn)閹?biāo)簽兩端都認(rèn)但管理流量走Native VLAN時通時斷。為什么時通時斷因?yàn)楫?dāng)Native VLAN為1的一端發(fā)送無標(biāo)簽幀時另一端把它歸到了999而999可能沒配IP幀就被丟了。但如果某些幀恰好帶了標(biāo)簽又能通過。這種部分通的現(xiàn)象最迷惑人容易讓人以為是線路質(zhì)量問題。排查方法很簡單display port vlan華為或show interfaces trunk思科看兩端的Native VLAN是否一致。我現(xiàn)在的習(xí)慣是配Trunk的時候第一件事就是把兩端Native VLAN都改成999然后確認(rèn)一致再配允許列表。4.2 PVID和Native VLAN的關(guān)系別搞混嚴(yán)格來說PVID是端口默認(rèn)VLAN IDNative VLAN是Trunk上不打標(biāo)簽的那個VLAN。在大多數(shù)設(shè)備上Trunk端口的PVID就等于Native VLAN。但有些廠商的實(shí)現(xiàn)里這兩個概念是分開配置的。華為的命令是port trunk pvid vlan X思科是switchport trunk native vlan X效果一樣都是設(shè)置那個不打標(biāo)簽的VLAN。為什么要改Native VLAN兩個原因一是安全默認(rèn)VLAN 1容易被利用比如VLAN跳躍攻擊二是避免和業(yè)務(wù)VLAN沖突。我一般建議用一個專門的、不承載業(yè)務(wù)的VLAN比如999或1000作為Native VLAN這樣即使有人誤發(fā)無標(biāo)簽幀也不會進(jìn)入業(yè)務(wù)VLAN。4.3 一個容易被忽略的細(xì)節(jié)Trunk端口收到無標(biāo)簽幀怎么辦這是新手最容易懵的地方。Trunk端口收到一個無標(biāo)簽幀時會把它打上Native VLAN的標(biāo)簽然后轉(zhuǎn)發(fā)到Native VLAN里。這意味著如果Native VLAN是1而VLAN 1里恰好有設(shè)備那這個無標(biāo)簽幀就會進(jìn)入VLAN 1。如果Native VLAN是999而999里沒有設(shè)備幀就被丟棄。這個機(jī)制帶來的一個常見問題是接在Trunk端口上的設(shè)備比如服務(wù)器如果不打標(biāo)簽它的流量會進(jìn)入Native VLAN。有些服務(wù)器配置了VLAN標(biāo)簽有些沒有。如果服務(wù)器沒打標(biāo)簽而Trunk的Native VLAN是999服務(wù)器就上不了網(wǎng)了。解決辦法要么是給服務(wù)器網(wǎng)卡配VLAN標(biāo)簽要么把服務(wù)器接在Access端口上。我見過有人把服務(wù)器接Trunk口然后納悶為什么ping不通網(wǎng)關(guān)查了半天才發(fā)現(xiàn)是Native VLAN的問題。5. 跨廠商配置差異與實(shí)戰(zhàn)中的選型建議5.1 華為/華三 vs 思科命令對照與思維差異國內(nèi)企業(yè)網(wǎng)里華為、華三、思科三家占了絕大多數(shù)。它們的VLAN/Trunk配置邏輯一樣但命令風(fēng)格差異不小。我把常用命令整理成對照表方便你切換設(shè)備時快速查操作華為/華三思科創(chuàng)建VLANvlan 10vlan 10端口設(shè)Accessport link-type accessswitchport mode access端口劃入VLANport default vlan 10switchport access vlan 10端口設(shè)Trunkport link-type trunkswitchport mode trunk允許VLAN通過port trunk allow-pass vlan 10 20switchport trunk allowed vlan 10,20設(shè)置Native VLANport trunk pvid vlan 999switchport trunk native vlan 999查看VLANdisplay vlanshow vlan brief查看Trunkdisplay port vlanshow interfaces trunk思維差異上華為/華三更強(qiáng)調(diào)先設(shè)類型再設(shè)參數(shù)思科則是模式屬性的組合。習(xí)慣了華為的人第一次配思科容易忘記switchport mode trunk這一步結(jié)果端口還在Access模式Trunk配了也不生效。5.2 什么場景該用Trunk什么場景該用Access這不是隨便選的取決于對端是什么設(shè)備交換機(jī)到交換機(jī)用Trunk因?yàn)橐獋鞫鄠€VLAN。交換機(jī)到路由器如果路由器做單臂路由Router-on-a-Stick用Trunk路由器子接口對應(yīng)不同VLAN。交換機(jī)到服務(wù)器看服務(wù)器是否需要多VLAN。如果服務(wù)器只在一個VLAN里用Access如果服務(wù)器要跑多個VLAN比如虛擬化環(huán)境用Trunk并在服務(wù)器網(wǎng)卡上配VLAN子接口。交換機(jī)到AP無線AP通常用Trunk因?yàn)橐獋鞴芾鞻LAN和多個業(yè)務(wù)VLAN。交換機(jī)到電腦用Access電腦不需要也不認(rèn)識VLAN標(biāo)簽。我見過有人把電腦接在Trunk口上然后發(fā)現(xiàn)電腦能上網(wǎng)但速度很慢查了半天是Native VLAN的廣播問題。記住終端設(shè)備接Access網(wǎng)絡(luò)設(shè)備之間接Trunk這是基本原則。5.3 允許列表的精細(xì)化控制allow-pass vlan all看起來很省事但我強(qiáng)烈建議不要這么寫。原因有兩個一是安全所有VLAN都能通過意味著任何一個VLAN的廣播都會傳到對端失去了隔離的意義二是排錯困難當(dāng)某個VLAN出問題時你無法快速判斷是不是Trunk的問題。正確的做法是只允許真正需要跨設(shè)備的VLAN通過。比如三樓交換機(jī)只需要把VLAN 10和20傳到核心那就只允許10和20。這樣即使有人誤創(chuàng)建了VLAN 30它的流量也不會傳到核心故障被限制在本地。華為還支持port trunk allow-pass vlan 10 to 20這種范圍寫法思科用switchport trunk allowed vlan 10-20。范圍寫法在VLAN多的時候很方便但要注意范圍邊界別把不該包含的VLAN包進(jìn)去。6. 一套可復(fù)用的VLAN/Trunk排錯流程6.1 從物理層到二層逐層排查網(wǎng)絡(luò)故障排查有個基本原則從下往上。VLAN/Trunk的問題我一般按這個順序查物理層端口燈亮不亮display interface看端口是up還是down如果down先查線、查光模塊、查端口是否被shutdown。VLAN是否存在display vlan看VLAN有沒有創(chuàng)建。我遇到過有人配了port default vlan 10但忘了vlan 10結(jié)果端口一直不生效。端口模式是否正確display port vlan看端口是Access還是TrunkPVID是多少。Trunk允許列表display port vlan或display interface看allow-pass列表是否包含需要的VLAN。Native VLAN一致性兩端對比必須一致。MAC地址表display mac-address看MAC有沒有學(xué)到。如果學(xué)不到說明二層不通。ARP和IP二層通了之后再看三層。display arp看ARP有沒有解析。這個順序看起來簡單但能解決90%以上的VLAN/Trunk問題。我見過太多人一上來就查路由、查ACL結(jié)果發(fā)現(xiàn)是端口模式配錯了。6.2 幾個典型故障的快速定位故障一同一VLAN內(nèi)不同交換機(jī)上的電腦ping不通。排查先看兩端端口是不是都在同一個VLAN再看Trunk的allow-pass列表有沒有包含這個VLAN最后看Native VLAN是否一致。最常見的原因是allow-pass列表漏了這個VLAN。故障二跨VLAN能通同VLAN反而不通。這個聽起來反直覺但確實(shí)會發(fā)生。原因通常是同VLAN的流量走二層跨VLAN走三層。如果二層有問題比如Trunk沒放行同VLAN就不通而三層如果配了路由跨VLAN反而能通。這時候要重點(diǎn)查Trunk配置。故障三Trunk口起來后部分VLAN通部分不通。幾乎可以肯定是allow-pass列表的問題。檢查兩端列表確保需要的VLAN都在里面。注意華為的allow-pass是覆蓋式的后配的會覆蓋前面的別配著配著把之前的VLAN弄丟了。故障四改了Native VLAN后管理IP斷了。這是因?yàn)楣芾鞩P可能配在Native VLAN上。改Native VLAN之前先確認(rèn)管理流量的VLAN別把自己關(guān)在門外。我一般建議管理VLAN單獨(dú)用一個不要和Native VLAN混在一起。6.3 配置前的檢查清單為了避免配完出問題我養(yǎng)成了一個習(xí)慣配Trunk之前先過一遍清單。[ ] 兩端VLAN都已創(chuàng)建[ ] 兩端端口模式都是Trunk[ ] 兩端allow-pass列表一致且包含所需VLAN[ ] 兩端Native VLAN一致推薦都用999[ ] 管理VLAN不在Native VLAN里或者已確認(rèn)管理流量路徑[ ] 配置保存華為save思科write這個清單看起來啰嗦但能省下大量排錯時間。尤其是配置保存這一條我見過有人配完沒保存設(shè)備重啟后配置丟失又得重來。7. 一些進(jìn)階話題和我的個人體會7.1 VLAN間路由單臂路由與三層交換VLAN隔離了廣播域但不同VLAN之間要通信就需要三層路由。兩種常見方案單臂路由路由器的一個物理接口配成Trunk然后創(chuàng)建子接口每個子接口對應(yīng)一個VLAN配上網(wǎng)關(guān)IP。配置大概是這樣interface GigabitEthernet0/0.10 encapsulation dot1Q 10 ip address 192.168.10.1 255.255.255.0 interface GigabitEthernet0/0.20 encapsulation dot1Q 20 ip address 192.168.20.1 255.255.255.0三層交換在三層交換機(jī)上創(chuàng)建VLAN接口SVI直接配網(wǎng)關(guān)IP。這是現(xiàn)在更主流的做法因?yàn)樾阅芨貌灰蕾囃獠柯酚善?。interface Vlanif10 ip address 192.168.10.1 255.255.255.0 interface Vlanif20 ip address 192.168.20.1 255.255.255.0單臂路由的缺點(diǎn)是所有VLAN間流量都要經(jīng)過路由器的那個物理接口容易成為瓶頸。三層交換把路由功能集成到交換機(jī)里轉(zhuǎn)發(fā)性能高得多?,F(xiàn)在新項目基本都用三層交換單臂路由更多出現(xiàn)在老設(shè)備或?qū)嶒?yàn)環(huán)境里。7.2 我踩過的最大一個坑Trunk上的STP有一次配完Trunk發(fā)現(xiàn)網(wǎng)絡(luò)時通時斷ping丟包率30%左右。查了半天VLAN和Trunk都沒問題最后發(fā)現(xiàn)是STP生成樹的問題。兩臺交換機(jī)之間有兩條Trunk鏈路STP把其中一條阻塞了但阻塞的端口狀態(tài)切換時導(dǎo)致了短暫環(huán)路引發(fā)廣播風(fēng)暴。解決辦法是配STP邊緣端口或者用鏈路聚合。這個坑讓我意識到VLAN和Trunk配對了不代表網(wǎng)絡(luò)就穩(wěn)了還要考慮STP、鏈路聚合這些二層協(xié)議。后來我養(yǎng)成了一個習(xí)慣配Trunk之前先確認(rèn)STP狀態(tài)display stp brief看有沒有異常的阻塞端口。7.3 給新手的幾條實(shí)在建議第一先在模擬器上練。華為的eNSP、思科的Packet Tracer都能模擬VLAN和Trunk配錯了大不了重啟比在真機(jī)上試錯成本低得多。我剛開始學(xué)的時候在模擬器上把各種錯誤配置都試了一遍真機(jī)上就很少出問題了。第二配置前先畫拓?fù)鋱D。標(biāo)清楚每臺交換機(jī)的端口、VLAN劃分、Trunk鏈路。我見過太多人配著配著自己都亂了就是因?yàn)闆]有圖。第三改配置前先備份。華為display current-configuration思科show running-config復(fù)制出來存一份。改錯了可以對照恢復(fù)。第四Native VLAN統(tǒng)一用999。這是我最推薦的一個習(xí)慣能避免大量莫名其妙的故障。第五別怕命令行。VLAN和Trunk的命令就那么幾條配多了就熟了。真正難的不是命令是理解數(shù)據(jù)包在每一跳是怎么被處理的。理解了原理命令自然就記住了。7.4 關(guān)于VLAN數(shù)量的規(guī)劃最后說一個規(guī)劃層面的經(jīng)驗(yàn)。有些公司喜歡按部門細(xì)分VLAN一個部門一個VLAN結(jié)果搞出幾十上百個VLAN。VLAN多了Trunk的allow-pass列表會很長管理成本高而且STP的收斂時間會變長。我的建議是按安全域和廣播域大小來規(guī)劃而不是按部門。比如研發(fā)和測試可以共用一個VLAN如果廣播量不大財務(wù)和HR可以共用一個。一般一個VLAN控制在200臺設(shè)備以內(nèi)超過就拆分。這樣既能隔離廣播又不會讓VLAN數(shù)量失控。Trunk的allow-pass列表也能保持精簡排錯的時候一眼就能看完。這套東西我用了很多年從最初的手忙腳亂到現(xiàn)在配Trunk基本一次過靠的就是把原理吃透加上反復(fù)踩坑總結(jié)。VLAN和Trunk不是什么高深技術(shù)但細(xì)節(jié)特別多每一個細(xì)節(jié)背后都有它的道理。希望這篇內(nèi)容能幫你少走一些我走過的彎路。