絡(luò)開發(fā)環(huán)境搭建全記錄:VLAN與STP實(shí)戰(zhàn))
簡介網(wǎng)絡(luò)開發(fā)與調(diào)試中穩(wěn)定、純凈的二層轉(zhuǎn)發(fā)環(huán)境是驗(yàn)證基礎(chǔ)協(xié)議行為的重要基礎(chǔ)。相比直接使用三層設(shè)備純二層交換機(jī)能更直觀地呈現(xiàn)VLAN隔離、廣播域劃分以及生成樹協(xié)議等核心機(jī)制避免路由策略對實(shí)驗(yàn)結(jié)果的干擾。通過采用原廠固件和標(biāo)準(zhǔn)協(xié)議棧的千元級二手企業(yè)級交換機(jī)可以構(gòu)建一套高性價(jià)比、行為可預(yù)測的開發(fā)驗(yàn)證平臺。本文完整記錄從拓?fù)湟?guī)劃、VLAN劃分、Trunk鏈路配置到RSTP部署、端口鏡像抓包驗(yàn)證的實(shí)操過程并整理常見二層故障的排查思路為需要搭建本地網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境、進(jìn)行協(xié)議一致性測試或自動化腳本回歸的開發(fā)人員提供一套值得借鑒的工程參考。 做網(wǎng)絡(luò)開發(fā)這幾年我最大的感觸是一套穩(wěn)定、干凈、可復(fù)現(xiàn)的開發(fā)環(huán)境往往比生產(chǎn)環(huán)境的架構(gòu)還難搭。生產(chǎn)環(huán)境你還能用錢堆設(shè)備、堆冗余開發(fā)環(huán)境預(yù)算就那么點(diǎn)卻要模擬出生產(chǎn)網(wǎng)絡(luò)的各種行為——VLAN隔離、鏈路聚合、生成樹、廣播風(fēng)暴模擬缺一不可。前段時(shí)間我給自己搭了一套命名為“1000y二層原版-開發(fā)用-千年”的網(wǎng)絡(luò)開發(fā)底座花了一千出頭純二層方案全部用原版廠商固件和標(biāo)準(zhǔn)協(xié)議棧不引入任何花哨的軟路由或虛擬化層。這篇文章就把這套方案的完整拆解、選型邏輯、配置過程和踩坑記錄整理出來給同樣在搞網(wǎng)絡(luò)開發(fā)、需要一套值得信賴的本地實(shí)驗(yàn)環(huán)境的朋友做個(gè)參考?!?000y”和“千年”這兩個(gè)詞我一開始就打算把它們當(dāng)成項(xiàng)目代號用而不是什么版本號。理解這個(gè)命名基本上就理解了整套方案的定位千元級預(yù)算規(guī)劃長期使用基礎(chǔ)網(wǎng)絡(luò)功能盡量用原版、原生、未被魔改的實(shí)現(xiàn)?!岸釉妗彼膫€(gè)字是這套方案的核心約束后面所有的設(shè)備選型、組網(wǎng)設(shè)計(jì)、調(diào)試思路全都是在給這五個(gè)字做注腳。1. 項(xiàng)目拆解從標(biāo)題反推這套開發(fā)環(huán)境到底需要什么拿到“1000y二層原版-開發(fā)用-千年”這個(gè)項(xiàng)目名第一件事不是急著下單買設(shè)備而是把標(biāo)題里的關(guān)鍵詞一個(gè)個(gè)拆開搞清楚每句話背后的真實(shí)需求。拆完之后你會發(fā)現(xiàn)這個(gè)標(biāo)題其實(shí)已經(jīng)是一個(gè)非常完整的需求說明書。1.1 “1000y”的兩種讀法預(yù)算約束與生命周期“1000y”我建議讀成兩個(gè)意思的合體。第一個(gè)意思是1000元級別的預(yù)算約束?!皔”可以理解成“元”的拼音首字母也可以理解成英語的“year”“1000y”就是1000年正好對應(yīng)“千年”。所以這個(gè)項(xiàng)目名其實(shí)玩了個(gè)雙關(guān)預(yù)算控制在千元檔同時(shí)這套環(huán)境規(guī)劃的使用周期是“千年”級別的——當(dāng)然不是真的用一千年而是指它的拓?fù)浣Y(jié)構(gòu)、配置基線、設(shè)備選型標(biāo)準(zhǔn)要足夠穩(wěn)定和經(jīng)典五年十年內(nèi)不需要推倒重來。預(yù)算約束對選型的影響非常直接。很多人一聽說搭建網(wǎng)絡(luò)開發(fā)環(huán)境第一反應(yīng)就是上機(jī)架式設(shè)備、上核心交換機(jī)、上防火墻結(jié)果預(yù)算動輒上萬。但開發(fā)環(huán)境和生產(chǎn)環(huán)境的需求本質(zhì)不同開發(fā)環(huán)境要的是快速驗(yàn)證、靈活調(diào)整、出問題能快速定位而不是高可用和極限吞吐。千元預(yù)算在二手市場完全能買到成色不錯(cuò)的企業(yè)級千兆交換機(jī)甚至能買到24口全千兆可網(wǎng)管機(jī)型這比買一臺全新的家用路由器然后刷第三方固件靠譜得多。生命周期這個(gè)維度說實(shí)話是很多人在搭開發(fā)環(huán)境時(shí)容易忽略的。我見過太多團(tuán)隊(duì)用一堆桌面級交換機(jī)、路由器拼湊開發(fā)網(wǎng)絡(luò)剛開始能用但一旦要模擬復(fù)雜的生產(chǎn)拓?fù)洹⒆鲎詣踊_本回歸測試或者是驗(yàn)證跨VLAN的通信路徑這套臨時(shí)拼湊的環(huán)境就完全不夠用最后只能推倒重來。所以“千年”這個(gè)代號其實(shí)是在提醒我這套環(huán)境的最初設(shè)計(jì)就得按照能長期服役的標(biāo)準(zhǔn)來做而不是圖一時(shí)便宜。1.2 “二層原版”到底意味著什么協(xié)議、固件與行為邊界“二層原版”這四個(gè)字是整套方案的技術(shù)核心。拆開來理解“二層”指的是OSI模型中的數(shù)據(jù)鏈路層對應(yīng)到實(shí)際設(shè)備上就是交換機(jī)。換句話說這套開發(fā)環(huán)境的核心轉(zhuǎn)發(fā)設(shè)備是交換機(jī)而不是路由器也不依賴三層交換機(jī)的路由功能。這樣做的原因很實(shí)際很多網(wǎng)絡(luò)應(yīng)用層的開發(fā)調(diào)試——比如抓包分析、VLAN隔離驗(yàn)證、組播協(xié)議研究、生成樹行為觀察——都發(fā)生在二層域內(nèi)。用二層設(shè)備做底座整個(gè)實(shí)驗(yàn)環(huán)境的網(wǎng)絡(luò)行為會非常純粹不會被三層路由、NAT、ACL這些概念干擾。“原版”這個(gè)詞對應(yīng)的則是“魔改”?,F(xiàn)在市面上很多設(shè)備尤其是家用級別或者工包設(shè)備廠商會在標(biāo)準(zhǔn)協(xié)議上做各種私有化修改或者干脆不完整實(shí)現(xiàn)某些協(xié)議。比如有的交換機(jī)雖然支持VLAN但實(shí)現(xiàn)的卻是私有擴(kuò)展和標(biāo)準(zhǔn)的802.1Q不完全兼容又比如有的設(shè)備宣稱支持STP但收斂時(shí)間、BPDU處理邏輯和標(biāo)準(zhǔn)實(shí)現(xiàn)差異很大。對開發(fā)環(huán)境來說這種“非標(biāo)”行為是非常致命的——你在開發(fā)環(huán)境里驗(yàn)證通過的邏輯到了生產(chǎn)環(huán)境的標(biāo)準(zhǔn)設(shè)備上可能行為完全不一樣。所以“原版”這兩個(gè)字意味著要用原廠固件、標(biāo)準(zhǔn)協(xié)議棧、不做繞過協(xié)議的旁門左道把變數(shù)降到最低。這個(gè)原則落實(shí)到選型上就是一條硬性紅線不買那些需要刷第三方固件才能支持VLAN的“野路子”設(shè)備不買沒有明確協(xié)議標(biāo)準(zhǔn)兼容性說明的白牌設(shè)備。寧可多花兩三百塊錢買二手的企業(yè)級原廠設(shè)備也堅(jiān)決不用可能埋雷的方案。開發(fā)環(huán)境看起來是給自己用的但它的真正價(jià)值是給開發(fā)結(jié)果做背書的可信度比性價(jià)比重要得多。1.3 “開發(fā)用”場景決定了功能優(yōu)先級和配置基線同樣是二層交換機(jī)放在生產(chǎn)環(huán)境和放在開發(fā)環(huán)境配置思路完全不同。生產(chǎn)環(huán)境追求的是高可用、冗余、快速收斂所以STP的優(yōu)先級、鏈路聚合的模式、端口的BPDU保護(hù)每一項(xiàng)都要精雕細(xì)琢。開發(fā)環(huán)境則相反核心訴求是三個(gè)方便復(fù)現(xiàn)、方便調(diào)試、方便重置。方便復(fù)現(xiàn)意味著整個(gè)環(huán)境的配置要能快速地恢復(fù)到某個(gè)已知狀態(tài)。所以我從一開始就給這套環(huán)境定了“配置文件基線化”的規(guī)矩每完成一個(gè)階段的配置就導(dǎo)出一份配置文件存檔標(biāo)注日期和用途。后續(xù)如果環(huán)境被各種實(shí)驗(yàn)搞亂了直接刷回基線配置幾十秒鐘就能恢復(fù)。方便調(diào)試意味著設(shè)備本身要留有足夠的可觀測性。這里我強(qiáng)烈建議選支持端口鏡像Port Mirroring的交換機(jī)這功能在開發(fā)環(huán)境的價(jià)值遠(yuǎn)遠(yuǎn)大于生產(chǎn)環(huán)境——你想抓哪個(gè)端口的包直接把流量鏡像到連抓包軟件的端口上就行完全不影響原有通信。很多二手企業(yè)級交換機(jī)都有這個(gè)功能但很多人在選型的時(shí)候沒有專門留意等需要抓包的時(shí)候才發(fā)現(xiàn)設(shè)備不支持那就很被動了。方便重置意味著配置管理必須是“腳本化”的。我后面會專門講這套環(huán)境里所有的VLAN規(guī)劃、端口劃分、Trunk配置全都整理成了可重復(fù)執(zhí)行的配置片段。這樣一來每次做破壞性實(shí)驗(yàn)之前先確認(rèn)配置已經(jīng)備份實(shí)驗(yàn)做完直接重刷完全不慌。這套習(xí)慣堅(jiān)持下來效率提升是肉眼可見的。2. 為什么拼一個(gè)“二層原版”實(shí)驗(yàn)環(huán)境而不是直接用三層設(shè)備很多人可能會問現(xiàn)在隨便一臺千元級的三層交換機(jī)既能做VLAN又能做路由還支持ACL和DHCP Snooping功能比純二層強(qiáng)多了為什么不直接上三層一步到位這個(gè)問題我當(dāng)初也糾結(jié)過但實(shí)際操作下來純二層的方案在開發(fā)場景中的優(yōu)勢非常明顯甚至可以說三層功能的“豐富”恰恰是開發(fā)環(huán)境的干擾源。2.1 二層與三層的本質(zhì)差異廣播域與分段邏輯二層設(shè)備轉(zhuǎn)發(fā)數(shù)據(jù)包依賴的是MAC地址表工作范圍局限于同一個(gè)廣播域三層設(shè)備則能通過IP地址進(jìn)行路由把不同的廣播域連接起來。對網(wǎng)絡(luò)開發(fā)來說這兩種行為模式帶來的調(diào)試體驗(yàn)是截然不同的。在一個(gè)純二層的開發(fā)環(huán)境中你看到的網(wǎng)絡(luò)行為是“扁平”的所有VLAN內(nèi)的設(shè)備靠ARP廣播找到彼此數(shù)據(jù)幀的流轉(zhuǎn)路徑清晰簡單。這種扁平結(jié)構(gòu)特別適合開發(fā)和驗(yàn)證那些依賴廣播、組播的應(yīng)用比如設(shè)備發(fā)現(xiàn)協(xié)議、視頻組播、工業(yè)控制網(wǎng)絡(luò)的實(shí)時(shí)通信。如果你想模擬一個(gè)設(shè)備從接入到被發(fā)現(xiàn)、再到通信建立的全過程二層環(huán)境是最貼近真實(shí)物理鏈路的。反過來如果一開始就引入三層那么大量調(diào)試場景都會被“路由”這個(gè)中間層干擾。比如你明明是在排查一個(gè)二層廣播風(fēng)暴的問題結(jié)果發(fā)現(xiàn)某個(gè)VLAN間的報(bào)文被路由策略攔截了又比如你想抓包分析一個(gè)協(xié)議交互過程結(jié)果發(fā)現(xiàn)報(bào)文被三層設(shè)備做了TTL改寫抓到的內(nèi)容和實(shí)際發(fā)送的內(nèi)容對不上。這些干擾因素在排查問題時(shí)非常浪費(fèi)時(shí)間。所以我的建議是做二層相關(guān)的開發(fā)驗(yàn)證就老老實(shí)實(shí)用二層設(shè)備不要貪圖三層功能。2.2 “原版”協(xié)議行為在開發(fā)調(diào)試中的價(jià)值可預(yù)測性開發(fā)環(huán)境有一個(gè)生產(chǎn)環(huán)境不那么敏感的要求——可預(yù)測性。生產(chǎn)網(wǎng)絡(luò)的設(shè)備往往需要加載各種安全策略、QoS策略開了一堆OSPF、BGP鄰居出問題時(shí)影響因素太多。開發(fā)環(huán)境則需要盡可能“干凈”讓每一次協(xié)議交互都符合RFC標(biāo)準(zhǔn)行為這樣你才能判斷代碼邏輯到底是網(wǎng)絡(luò)問題還是應(yīng)用問題。舉一個(gè)非常具體的例子802.1Q VLAN標(biāo)簽的處理。標(biāo)準(zhǔn)交換機(jī)對帶Tag的幀、不帶Tag的幀的處理邏輯是有明確定義的Access口收到Untagged幀會打上PVID對應(yīng)的Tag收到Tagged幀則檢查該Tag是否被允許Trunk口則根據(jù)允許列表決定轉(zhuǎn)發(fā)或丟棄。這個(gè)邏輯看似簡單但如果不是原版標(biāo)準(zhǔn)實(shí)現(xiàn)有些設(shè)備會在Access口直接轉(zhuǎn)發(fā)不同Tag的幀或者對Trunk口的廣播幀處理有私有邏輯。你在這種設(shè)備上做VLAN開發(fā)測試結(jié)果基本沒有參考價(jià)值。用了原版標(biāo)準(zhǔn)實(shí)現(xiàn)后每一個(gè)行為都可以對照協(xié)議文檔進(jìn)行預(yù)期開發(fā)效率提升非常明顯。另外原版固件的另一個(gè)好處是命令行風(fēng)格和文檔環(huán)境高度統(tǒng)一。以H3C、華為、Cisco這類的企業(yè)級設(shè)備為例其命令行體系基本成了行業(yè)通用語言網(wǎng)上隨便一搜就是海量的配置案例和排查經(jīng)驗(yàn)。遇到問題照著官方的調(diào)試手冊走一遍大概率能解決。相比之下那些魔改固件的設(shè)備很多命令行為和文檔根本對不上出了問題只能靠猜。2.3 千元預(yù)算內(nèi)的設(shè)備選型與功能取舍筆記有了上述原則選型范圍其實(shí)已經(jīng)很窄了二手企業(yè)級千兆可網(wǎng)管二層交換機(jī)。這個(gè)品類在二手市場的貨源很充足比如H3C的S5024系列、華為的S5700系列雖然S5700是三層但可以只用二層模式、Cisco的Catalyst 3750G等等。我這里特別提醒一句買二手設(shè)備別光盯著價(jià)格要確認(rèn)三個(gè)東西——通電能否正常啟動、所有端口是否都能link up、配置文件能否正常保存。這三項(xiàng)任何一項(xiàng)有問題設(shè)備再便宜都不要碰否則后續(xù)排查硬件問題會耗盡你的耐心。預(yù)算方面我當(dāng)時(shí)定的線是1000元實(shí)際花了不到900元包括一臺48口千兆二層核心交換機(jī)和兩臺24口千兆接入交換機(jī)外加一堆成品網(wǎng)線。如果預(yù)算更緊張一臺24口交換機(jī)也夠起步拓?fù)淇梢月龜U(kuò)展。核心原則是設(shè)備數(shù)量可以少但每一臺都必須具備完整的VLAN、Trunk、STP、端口鏡像能力。功能上寧缺毋濫架構(gòu)上為擴(kuò)展預(yù)留空間。這里有一個(gè)功能取舍的小技巧分享盡量選支持PoE供電的型號即使你現(xiàn)在用不到。開發(fā)環(huán)境經(jīng)常會接一些IP話機(jī)、無線AP、樹莓派之類的設(shè)備做聯(lián)調(diào)PoE供電能省掉一堆電源適配器。這個(gè)功能在二手設(shè)備上通常只貴一兩百元但使用體驗(yàn)完全是兩個(gè)檔次。當(dāng)然了如果預(yù)算實(shí)在緊張這個(gè)優(yōu)先級可以往后放畢竟PoE不是二層開發(fā)的核心能力。3. 實(shí)操過程從拆箱到跑通VLAN隔離的完整記錄這個(gè)部分是整個(gè)項(xiàng)目落到實(shí)處的核心。我會從頭到尾記錄這臺“千元二層原版”環(huán)境的組網(wǎng)過程包括設(shè)備初始化、VLAN規(guī)劃、端口劃分、鏈路中繼、生成樹配置以及最后的連通性驗(yàn)證。所有配置都以H3C的命令行風(fēng)格為例原因很簡單H3C設(shè)備在二手市場的保有量大、價(jià)格友好而且命令行邏輯非常接近Cisco風(fēng)格看懂了這套其他品牌的設(shè)備也能很快上手。3.1 拓?fù)湓O(shè)計(jì)與VLAN劃分的規(guī)劃思路動手配置之前先把拓?fù)洚嬊宄?。這套環(huán)境我規(guī)劃的拓?fù)浞浅=?jīng)典一臺核心交換機(jī)兩臺接入交換機(jī)核心與接入之間各用一條千兆鏈路做Trunk互聯(lián)接入交換機(jī)下掛開發(fā)終端。VLAN的規(guī)劃遵循“功能域隔離”原則我劃分了四個(gè)VLANVLAN 10日常管理網(wǎng)段放各交換機(jī)的管理IP、跳板機(jī)、帶外管理設(shè)備VLAN 20應(yīng)用開發(fā)網(wǎng)段跑常規(guī)的業(yè)務(wù)應(yīng)用、測試服務(wù)VLAN 30協(xié)議驗(yàn)證網(wǎng)段專門用來抓包、跑組播、做協(xié)議一致性測試VLAN 99上行Trunk專用VLAN負(fù)責(zé)核心與接入之間的鏈路承載這個(gè)規(guī)劃看起來簡單但背后有一個(gè)常見誤區(qū)值得提醒不要在接入交換機(jī)上讓所有VLAN都走同一個(gè)Access口也不要無腦地把所有端口都設(shè)成Trunk。VLAN的數(shù)量和用途劃分要根據(jù)實(shí)際的開發(fā)任務(wù)來定。如果你只是需要驗(yàn)證VLAN隔離、測試不同網(wǎng)段的互通性那么兩三個(gè)VLAN綽綽有余。VLAN劃分得過于細(xì)致后期管理和故障定位的成本反而會上升。3.2 設(shè)備初始化與基礎(chǔ)配置的注意事項(xiàng)設(shè)備到手后的第一步不是急著配VLAN而是先做初始化。二手設(shè)備通常帶有前主人遺留的配置這些配置可能會干擾后續(xù)所有操作。我的習(xí)慣是直接執(zhí)行恢復(fù)出廠設(shè)置把設(shè)備重置到空白狀態(tài)然后再逐條配置。以H3C設(shè)備為例H3Creset saved-configuration H3Creboot重啟之后設(shè)備會恢復(fù)到出廠默認(rèn)狀態(tài)。這里有個(gè)小細(xì)節(jié)reset saved-configuration只是刪除了保存的配置但當(dāng)前運(yùn)行中的配置還在所以必須緊接著執(zhí)行reboot讓設(shè)備加載空白配置啟動。初始化完成后第一步配置管理地址和遠(yuǎn)程登錄。為什么要先做這一步因?yàn)楹罄m(xù)大部分配置和調(diào)試如果都要靠console線連接效率太低了。把管理地址配上開啟SSH或者Telnet后面就能坐著遠(yuǎn)程操作。H3Csystem-view [H3C]sysname DEV-CORE [H3C]interface Vlan-interface 10 [H3C-Vlan-interface10]ip address 192.168.10.1 255.255.255.0 [H3C-Vlan-interface10]quit [H3C]ssh server enable [H3C]local-user admin class manage [H3C-luser-manage-admin]password simple Admin123 [H3C-luser-manage-admin]service-type ssh [H3C-luser-manage-admin]authorization-attribute user-role network-admin [H3C-luser-manage-admin]quit [H3C]user-interface vty 0 4 [H3C-line-vty0-4]authentication-mode scheme [H3C-line-vty0-4]protocol inbound ssh需要說明的是我這個(gè)配置里VLAN 10已經(jīng)提前當(dāng)成管理VLAN用了所以先創(chuàng)建了VLAN 10并配了管理IP。如果你用的交換機(jī)默認(rèn)有VLAN 1也可以直接用VLAN 1做管理但考慮到后續(xù)可能要模擬一些隔離場景獨(dú)立的管理VLAN更推薦。管理IP配好之后務(wù)必用電腦ping一下測試通了你再繼續(xù)往下配。這一步能驗(yàn)證設(shè)備的管理面是否正常如果這里都不通后面的VLAN配置出了問題排查難度會大很多。3.3 VLAN、Trunk與生成樹的配置實(shí)例管理面通了之后開始配置核心的業(yè)務(wù)。以核心交換機(jī)DEV-CORE為例創(chuàng)建VLAN并設(shè)置端口類型[H3C]vlan 10 [H3C-vlan10]name MGMT [H3C-vlan10]quit [H3C]vlan 20 [H3C-vlan20]name APP-DEV [H3C-vlan20]quit [H3C]vlan 30 [H3C-vlan30]name PROTO-TEST [H3C-vlan30]quit [H3C]vlan 99 [H3C-vlan99]name TRUNK-UP [H3C-vlan99]quitVLAN創(chuàng)建完成后把連接接入交換機(jī)的端口設(shè)為Trunk允許相應(yīng)VLAN通過[H3C]interface GigabitEthernet1/0/24 [H3C-GigabitEthernet1/0/24]port link-type trunk [H3C-GigabitEthernet1/0/24]port trunk permit vlan 10 20 30 99 [H3C-GigabitEthernet1/0/24]port trunk pvid vlan 99 [H3C-GigabitEthernet1/0/24]quit這里有一個(gè)配置上的關(guān)鍵點(diǎn)Trunk口的PVID設(shè)置。PVID的意義是處理那些“沒打標(biāo)簽”的幀。在Trunk鏈路上如果收到不帶VLAN標(biāo)簽的幀設(shè)備會默認(rèn)把它劃分到PVID對應(yīng)的VLAN。我把Trunk鏈路的PVID設(shè)置成一個(gè)專門的VLAN 99是為了讓Trunk口自身的管理報(bào)文比如CDP、LLDP、STP的BPDU有一個(gè)明確的歸屬避免和業(yè)務(wù)VLAN混雜。如果不設(shè)這個(gè)獨(dú)立PVID默認(rèn)PVID是VLAN 1Trunk鏈路上的管理流量就會落進(jìn)VLAN 1后續(xù)如果需要過濾或追蹤管理流量會比較麻煩。接入交換機(jī)上的配置類似區(qū)別在于下連終端設(shè)備的端口設(shè)置為Access口指定歸屬VLAN[H3C]interface GigabitEthernet1/0/1 [H3C-GigabitEthernet1/0/1]port link-type access [H3C-GigabitEthernet1/0/1]port access vlan 20 [H3C-GigabitEthernet1/0/1]quit生成樹這塊我的建議是先在核心和接入交換機(jī)上都啟用RSTP快速生成樹并手動指定核心交換機(jī)為根橋[H3C]stp mode rstp [H3C]stp root primary開發(fā)環(huán)境里為什么要配置生成樹因?yàn)殚_發(fā)過程中你可能會隨手接錯(cuò)網(wǎng)絡(luò)線纜形成一個(gè)物理環(huán)路。沒有STP一個(gè)廣播報(bào)文會在環(huán)路里無限復(fù)制幾秒鐘之內(nèi)就能把整臺交換機(jī)的CPU打滿網(wǎng)絡(luò)直接癱瘓。有STP保護(hù)環(huán)路會被自動阻塞最多就是某些端口變成Discarding狀態(tài)不會引發(fā)災(zāi)難。說實(shí)話這個(gè)配置是我強(qiáng)烈要求所有開發(fā)環(huán)境必須做的——哪怕你的拓?fù)淅铿F(xiàn)在沒有環(huán)路也要提前把保險(xiǎn)系上。接入交換機(jī)側(cè)如果也啟用RSTP需要在接入交換機(jī)上執(zhí)行[H3C]stp mode rstp核心交換機(jī)指定根橋后接入交換機(jī)會自動選舉出阻塞端口整個(gè)二層拓?fù)渚湍苁諗康綗o環(huán)狀態(tài)。3.4 連通性驗(yàn)證與抓包確認(rèn)一切配置以實(shí)測為準(zhǔn)配置完成后必須做驗(yàn)證不能想當(dāng)然覺得“配置沒問題就肯定通”。最直接的辦法是PC接在不同VLAN的端口上互ping測試不通就說明隔離生效通則說明配置有漏。我這里還做了一件事用支持端口鏡像的交換機(jī)把Trunk口的流量鏡像到抓包口然后用Wireshark抓包確認(rèn)VLAN標(biāo)簽的行為。抓包環(huán)境搭建如下[H3C]mirroring-group 1 local [H3C]mirroring-group 1 mirroring-port GigabitEthernet1/0/24 both [H3C]mirroring-group 1 monitor-port GigabitEthernet1/0/23然后把電腦網(wǎng)線插到GigabitEthernet1/0/23口打開Wireshark抓Trunk口的雙向流量。抓包能看什么第一確認(rèn)VLAN標(biāo)簽是否正確——帶Tag的幀應(yīng)該在Ethernet頭部看到802.1Q協(xié)議字段里面包含VLAN ID第二確認(rèn)Trunk口轉(zhuǎn)發(fā)行為是否符合預(yù)期——VLAN 10的廣播幀不會出現(xiàn)在VLAN 20的端口上第三確認(rèn)STP的BPDU是否正常發(fā)送——你應(yīng)該能周期性看到STP報(bào)文這說明生成樹在正常工作。整個(gè)過程走下來三層驗(yàn)證缺一不可先ping通管理IP再跨VLAN測試隔離最后抓包確認(rèn)協(xié)議細(xì)節(jié)。只有這三步都通過這套“二層原版”開發(fā)環(huán)境才算真正落地。4. 開發(fā)過程中容易踩的坑二層網(wǎng)絡(luò)實(shí)戰(zhàn)排查記錄這套環(huán)境投入使用之后我陸陸續(xù)續(xù)踩了不少坑也積累了很多實(shí)戰(zhàn)排查經(jīng)驗(yàn)。下面這些問題和排查方法很多是常規(guī)文檔里不會寫的但對實(shí)際開發(fā)非常有幫助。4.1 常見問題與排查方向速查表現(xiàn)象可能原因排查思路PC接在VLAN 20端口上ping不通網(wǎng)關(guān)Access口VLAN配置錯(cuò)誤、Trunk未放行VLAN 20檢查端口配置是否正確在核心交換機(jī)上查看MAC地址表確認(rèn)終端MAC是否被學(xué)習(xí)到接了兩臺交換機(jī)后所有終端互ping時(shí)通時(shí)不通可能形成了環(huán)路STP未生效或模式不對查看STP端口狀態(tài)確認(rèn)是否有端口處于Discarding檢查兩端交換機(jī)STP模式是否一致Trunk鏈路上抓不到某些VLAN的廣播幀Trunk口未放行對應(yīng)VLAN或者PVID配置不當(dāng)show vlan和show interface trunk確認(rèn)允許列表抓包確認(rèn)幀是否帶TagSSH登錄交換機(jī)非??铐憫?yīng)緩慢交換機(jī)CPU被廣播報(bào)文沖擊查看CPU利用率檢查是否有環(huán)路、是否有大量未知目的MAC的廣播幀設(shè)備重啟后配置丟失配置未保存到saved-configuration執(zhí)行save命令將當(dāng)前配置寫入啟動配置文件這張表里的問題我自己全部遇到過而且每一個(gè)都真實(shí)影響過開發(fā)進(jìn)度。其中SSH響應(yīng)慢的問題最隱蔽也是最容易讓人崩潰的——表面上看起來是終端連接問題實(shí)際是網(wǎng)絡(luò)廣播風(fēng)暴把交換機(jī)的CPU拖垮了。4.2 三層排查思路為何不適合二層問題排查二層網(wǎng)絡(luò)問題有一個(gè)很重要的方法論千萬不要用排查三層問題的思路來硬套。三層網(wǎng)絡(luò)排查通常是先看路由表、看ARP、做traceroute二層網(wǎng)絡(luò)排查的核心則完全不同重點(diǎn)是看MAC地址表、看端口狀態(tài)、看STP狀態(tài)、抓協(xié)議報(bào)文。舉一個(gè)我實(shí)際遇到的例子某個(gè)接入端口上的設(shè)備突然無法和核心交換機(jī)通信。按照三層思路第一反應(yīng)是檢查IP地址、網(wǎng)段、路由然后我繞了一大圈最后發(fā)現(xiàn)是接入交換機(jī)的端口被STP阻塞了端口狀態(tài)是Discarding根本不可能轉(zhuǎn)發(fā)任何數(shù)據(jù)幀。這個(gè)就用到了二層排查的核心手段——查看STP狀態(tài)。如果你一上來就查IP配置大概率要浪費(fèi)很多時(shí)間。所以我把二層的排查思路總結(jié)為一條固定路徑第一步查物理鏈路端口link狀態(tài)、光模塊收發(fā)光功率、網(wǎng)線是否正常第二步查MAC地址表終端MAC是否被設(shè)備學(xué)習(xí)到、是動態(tài)學(xué)習(xí)還是靜態(tài)配置第三步查STP狀態(tài)端口角色、端口狀態(tài)比如Root/Alternate、Forwarding/Discarding第四步抓BPDU和普通數(shù)據(jù)幀確認(rèn)協(xié)議行為。這條路徑走下來絕大多數(shù)二層問題都能定位。4.3 環(huán)境長期維護(hù)的幾個(gè)實(shí)用習(xí)慣開發(fā)環(huán)境用久了真正拉開體驗(yàn)差距的不是設(shè)備性能而是維護(hù)習(xí)慣。這里分享幾個(gè)我長期堅(jiān)持的實(shí)用習(xí)慣。第一個(gè)習(xí)慣每完成一個(gè)階段的配置馬上導(dǎo)出配置文件存檔。H3C設(shè)備上執(zhí)行display current-configuration把輸出保存到文本文件文件名按“設(shè)備名_日期_用途”的格式命名。這套環(huán)境前后半年我攢了幾十個(gè)配置文件版本每次遇到問題都能快速回溯。第二個(gè)習(xí)慣把整個(gè)環(huán)境的物理拓?fù)?、VLAN規(guī)劃、IP地址分配畫成一張圖放在顯眼位置。人腦的記憶是不可靠的尤其是過了幾個(gè)月再回來調(diào)試如果你還需要靠show命令去反推拓?fù)湫蕰秃芏?。一張清晰的拓?fù)鋱D是所有排查工作的起點(diǎn)。第三個(gè)習(xí)慣定期做“破壞性演練”。開發(fā)環(huán)境嘛不用擔(dān)心搞壞所以我每隔一段時(shí)間就會主動制造一些問題——拔線形成環(huán)路、改錯(cuò)VLAN配置、清空MAC地址表——然后按排查流程一步步定位修復(fù)。這樣做的好處是真正遇到問題時(shí)你已經(jīng)有了肌肉記憶不會慌。5. 一些額外的思考這套方案還能怎么擴(kuò)展這套千元二層原版方案雖然定位是開發(fā)環(huán)境但它的架構(gòu)天然具備一定的可擴(kuò)展性稍微動動腦子就能玩出更多花樣。如果后續(xù)有需求做三層功能的開發(fā)驗(yàn)證可以在現(xiàn)有核心交換機(jī)上疊加一臺二手三層交換機(jī)或者用Linux主機(jī)做路由與現(xiàn)有的二層環(huán)境做VLAN間路由對接。二層的底座不動在上面掛一個(gè)三層“插件”這樣既能維持二層環(huán)境的純凈性又能擴(kuò)展三層能力的驗(yàn)證。如果要做自動化測試這套環(huán)境也非常適合。設(shè)備全部支持SSH登錄可以寫腳本批量下發(fā)配置、批量收集狀態(tài)信息。Python的Paramiko、Netmiko庫可以直接對接把交換機(jī)變成自動化測試的執(zhí)行節(jié)點(diǎn)。我在這個(gè)環(huán)境里跑過一段時(shí)間基于Robot Framework的自動化回歸測試效果不錯(cuò)。如果身邊有朋友在學(xué)網(wǎng)絡(luò)這套環(huán)境還能當(dāng)成教學(xué)沙箱。VLAN隔離、生成樹收斂、端口鏡像抓包這些教科書上的知識點(diǎn)在這套環(huán)境里都能做可視化驗(yàn)證。尤其是生成樹的收斂過程配合Wireshark抓BPDU學(xué)習(xí)效果比看十遍文檔都好。我個(gè)人在實(shí)際操作中的體會是一套“剛剛好”的開發(fā)環(huán)境比一套“大而全”的生產(chǎn)級環(huán)境更能提升開發(fā)效率。預(yù)算花得不多功能克制但關(guān)鍵能力一個(gè)不少網(wǎng)絡(luò)行為干凈可控這大概就是“1000y二層原版”這套方案的精髓所在。以后如果再搭開發(fā)環(huán)境我大概率還是會走這條路線千元預(yù)算、二層原版、長期使用。本文還有配套的精品資源點(diǎn)擊獲取