域配置:區(qū)域劃分、匯總與排障實(shí)戰(zhàn))
上一篇把單區(qū)域的 OSPF 骨架搭起來(lái)鄰居起來(lái)了、路由也通了很多人在這一步就覺(jué)得事情結(jié)束了。但真到現(xiàn)場(chǎng),一個(gè) OSPF 域里掛了三十幾臺(tái)設(shè)備、幾百條網(wǎng)段問(wèn)題就冒出來(lái)了LSDB鏈路狀態(tài)數(shù)據(jù)庫(kù)動(dòng)輒上千條 LSA任何一條鏈路抖動(dòng)都會(huì)觸發(fā)全網(wǎng) SPF 重算CPU 曲線(xiàn)跟著往上竄更麻煩的是某個(gè)分支的接入層天天插拔抖動(dòng)被泛洪到整個(gè)域核心也跟著抖。這時(shí)候就得上 OSPF 多區(qū)域Multi-Area OSPF用區(qū)域邊界把故障域切開(kāi)把明細(xì)路由擋在區(qū)域內(nèi)部只往骨干區(qū)送匯總。這篇接著上篇的代碼往下走講的是華為 VRP 平臺(tái)上從單區(qū)域演進(jìn)到多區(qū)域的完整配置過(guò)程區(qū)域怎么劃、ABR 怎么成型、匯總掩碼怎么算、Stub 和 NSSA 怎么選、虛連接什么情況下才能碰以及我這些年踩過(guò)的鄰居起不來(lái)、路由有但不通的坑。適合已經(jīng)能獨(dú)立配單區(qū)域 OSPF、準(zhǔn)備接手稍大一點(diǎn)網(wǎng)絡(luò)的朋友也適合正在準(zhǔn)備網(wǎng)絡(luò)方向認(rèn)證、想把理論落到命令行上的人。1. 從單區(qū)域到多區(qū)域把問(wèn)題想明白再動(dòng)手1.1 單區(qū)域 OSPF 在什么規(guī)模下開(kāi)始“撐不住”我一直不太贊成“設(shè)備超過(guò)多少臺(tái)就必須劃區(qū)域”這種拍腦袋的說(shuō)法規(guī)模不是唯一變量鏈路穩(wěn)定性和網(wǎng)絡(luò)變更頻率同樣關(guān)鍵。判斷要不要?jiǎng)邮治乙话憧慈齻€(gè)信號(hào)。第一個(gè)信號(hào)是 LSDB 體積和 SPF 計(jì)算頻率。單區(qū)域內(nèi)每臺(tái)路由器都維護(hù)同一份拓?fù)鋷?kù)任何一臺(tái)設(shè)備新增一個(gè)接口、任何一條鏈路 up/down都會(huì)產(chǎn)生新的 Router-LSA 并泛洪全域每臺(tái)設(shè)備都要跑一次完整的 SPF。十臺(tái)設(shè)備、幾十條鏈路的時(shí)候感知不到等到三五百條 LSA再疊加接入層頻繁抖動(dòng)你就會(huì)看到display cpu-usage里 OSPF 任務(wù)占比時(shí)不時(shí)冒尖。第二個(gè)信號(hào)是路由震蕩的傳播范圍。某棟樓的接入交換機(jī)端口反復(fù)閃斷本來(lái)只影響本樓但在單區(qū)域里這條 LSA 會(huì)傳到核心、傳到另一個(gè)城市的分支害得遠(yuǎn)端設(shè)備陪著重算。這種“局部故障全局買(mǎi)單”的模型是劃區(qū)域最直接的理由。第三個(gè)信號(hào)是路由條目對(duì)設(shè)備資源的占用。分支的明細(xì)網(wǎng)段在核心設(shè)備上其實(shí)沒(méi)必要逐條存在核心只關(guān)心“到某個(gè)分支走哪條路”。把明細(xì)擋在區(qū)域邊界內(nèi)核心路由表能瘦一大圈這比換硬件省錢(qián)得多。注意不要為了劃區(qū)域而劃區(qū)域。一個(gè)只有五六臺(tái)設(shè)備、鏈路極其穩(wěn)定的辦公網(wǎng)硬拆成三個(gè)區(qū)域帶來(lái)的配置復(fù)雜度和排障成本遠(yuǎn)大于那點(diǎn) LSDB 開(kāi)銷(xiāo)。1.2 區(qū)域劃分的四條硬規(guī)則與兩條軟建議OSPF 多區(qū)域有幾條規(guī)則是硬性的違反了協(xié)議直接不干活配置前必須刻在腦子里。規(guī)則一所有非骨干區(qū)域必須與骨干區(qū)域Area 0直接相連。不直接相連的區(qū)域收不到 Type 3 區(qū)域間路由也送不出去。這一點(diǎn)是很多新手翻車(chē)的地方——兩個(gè)分支區(qū)域之間拉一根線(xiàn)就想互訪(fǎng)不行必須繞回 Area 0。規(guī)則二骨干區(qū)域不能被分割。Area 0 必須是邏輯上連續(xù)的一整塊。如果物理上被切開(kāi)了比如中間一段鏈路故障或規(guī)劃失誤要用虛連接臨時(shí)縫合。規(guī)則三ABR 必須至少有一個(gè)接口在 Area 0。只有同時(shí)連接骨干區(qū)域和非骨干區(qū)域的路由器才是真正的區(qū)域邊界路由器ABR才會(huì)產(chǎn)生 Type 3 匯總 LSA。一臺(tái)設(shè)備連著兩個(gè)非骨干區(qū)域它不叫 ABR產(chǎn)生不了區(qū)域間路由。規(guī)則四ABR 只把從一個(gè)區(qū)域?qū)W到的 Type 3 路由注入到它連接的其他區(qū)域且從非骨干區(qū)域?qū)W到的 Type 3 不會(huì)回灌到另一個(gè)非骨干區(qū)域。這條規(guī)則本質(zhì)上就是 OSPF 的防環(huán)機(jī)制靠它保證區(qū)域間不會(huì)出現(xiàn)路由環(huán)路。兩條軟建議是我自己的經(jīng)驗(yàn)一是按地理或管理邊界劃區(qū)域一棟樓、一個(gè)園區(qū)、一個(gè)業(yè)務(wù)分區(qū)各成一個(gè)區(qū)域出問(wèn)題時(shí)“哪個(gè)區(qū)域的事”一目了然二是單個(gè)區(qū)域內(nèi)設(shè)備數(shù)控制在 50 臺(tái)以?xún)?nèi)、區(qū)域數(shù)控制在個(gè)位數(shù)這不是協(xié)議限制是人的排障能力限制。1.3 區(qū)域類(lèi)型選型對(duì)照表多區(qū)域落地繞不開(kāi)區(qū)域類(lèi)型的選擇。除了普通區(qū)域還有 Stub、Totally Stub、NSSA、Totally NSSA 四種。它們的差別在于“允許什么 LSA 進(jìn)來(lái)、默認(rèn)路由怎么來(lái)”我用一張表把關(guān)鍵差異列清楚后面配置時(shí)對(duì)照著看。區(qū)域類(lèi)型允許 Type 3允許 Type 4/5外部路由引入默認(rèn)路由來(lái)源典型場(chǎng)景普通區(qū)域是是區(qū)域內(nèi)有 ASBR 即可手工或 ASBR 通告骨干區(qū)、需要完整路由的核心區(qū)Stub是否禁止不能有 ASBRABR 自動(dòng)下發(fā) Type 3 默認(rèn)路由末端分支只有一條出口Totally Stub否僅默認(rèn)否禁止ABR 自動(dòng)下發(fā) Type 3 默認(rèn)路由末端分支路由表要極簡(jiǎn)NSSA是Type 5 否Type 7 是允許以 Type 7 泛洪ABR 或 ASBR 下發(fā)分支有自己的出口但想省 LSATotally NSSA否僅默認(rèn)Type 5 否Type 7 是允許ABR 下發(fā)默認(rèn)分支有出口且路由表要極簡(jiǎn)選型的判斷邏輯其實(shí)很簡(jiǎn)單這個(gè)區(qū)域有沒(méi)有自己的外部出口。沒(méi)有出口、只有一條路通骨干那就 Stub 系有出口、需要引入外部路由那就 NSSA 系。至于要不要“Totally”取決于這個(gè)區(qū)域里的設(shè)備性能和你對(duì)路由表整潔度的要求——Totally 系連 Type 3 明細(xì)都擋掉只給一條默認(rèn)路由路由器是省了但排障時(shí)你在區(qū)域內(nèi)部看不到具體網(wǎng)段得跑到 ABR 上去查。2. 拓?fù)渑c地址規(guī)劃先定邊界再敲命令2.1 案例網(wǎng)絡(luò)結(jié)構(gòu)與設(shè)備角色這次用的場(chǎng)景是一個(gè)典型的“總部加兩個(gè)分支”結(jié)構(gòu)設(shè)備角色和區(qū)域劃分如下和上篇的單區(qū)域配置保持銜接上篇里所有設(shè)備都在 Area 0這次把兩個(gè)分支切出去。核心路由器 R1位于總部屬于 Area 0同時(shí)下連兩臺(tái)匯聚設(shè)備作為整個(gè)域的骨干節(jié)點(diǎn)Router ID 規(guī)劃為 10.0.0.1??偛繀R聚 R2一側(cè)接 R1Area 0另一側(cè)下掛總部接入網(wǎng)段Area 1是第一個(gè) ABR。分支出口 R3一側(cè)接 R1 的點(diǎn)對(duì)點(diǎn)鏈路Area 0另一側(cè)下掛分支 A 的網(wǎng)段Area 2是第二個(gè) ABR。分支接入 R4純 Area 2 內(nèi)部設(shè)備負(fù)責(zé)分支 A 的終端接入。分支 B 出口 R5規(guī)劃上屬于 Area 3但物理鏈路只連到 R4Area 2不直接連骨干需要靠虛連接打通——這個(gè)設(shè)計(jì)是故意留的用來(lái)演示虛連接的正確用法和風(fēng)險(xiǎn)。外部出口 R6模擬 ISP 側(cè)通過(guò)靜態(tài)路由引入 OSPF產(chǎn)生 Type 5 外部路由。區(qū)域劃分上Area 0 只承載 R1 與 R2、R3 之間的互聯(lián)鏈路保持骨干區(qū)極簡(jiǎn)Area 1 放總部接入Area 2 放分支 AArea 3 放分支 B。這種“骨干只跑互聯(lián)、業(yè)務(wù)網(wǎng)段全下沉”的劃法是我比較推薦的骨干區(qū)的 LSDB 始終很小SPF 計(jì)算壓力低。2.2 接口地址與 Router ID 規(guī)劃表地址規(guī)劃這件事我在項(xiàng)目里見(jiàn)過(guò)太多“邊配邊想”的情況最后掩碼沖突、網(wǎng)段重疊排障排到懷疑人生。開(kāi)工前先把表拉出來(lái)配完一條勾一條效率反而高。設(shè)備接口IP 地址/掩碼所屬區(qū)域Router IDR1GE0/0/010.0.12.1/30Area 010.0.0.1R1GE0/0/110.0.13.1/30Area 0—R2GE0/0/010.0.12.2/30Area 010.0.0.2R2GE0/0/110.1.1.1/24Area 1—R2LoopBack010.1.255.1/24Area 1—R3GE0/0/010.0.13.2/30Area 010.0.0.3R3GE0/0/110.2.1.1/24Area 2—R4GE0/0/110.2.1.2/24Area 210.0.0.4R4GE0/0/210.2.2.2/24Area 2—R4GE0/0/010.0.45.2/30Area 2—R5GE0/0/010.0.45.1/30Area 310.0.0.5R5GE0/0/110.3.1.1/24Area 3—R6GE0/0/110.0.16.2/30Area 010.0.0.6Router ID 全部使用 Loopback0 地址且統(tǒng)一按 10.0.0.X 規(guī)劃好處是哪怕物理接口全換一遍Router ID 也不變鄰居關(guān)系和 LSA 的 Originator 保持穩(wěn)定排障時(shí)看日志不會(huì)對(duì)不上號(hào)。提示Router ID 一旦選定別隨便改。改 Router ID 等于換了身份所有鄰居關(guān)系會(huì)重建LSA 全部重發(fā)生產(chǎn)網(wǎng)里做這個(gè)動(dòng)作要挑窗口期。2.3 規(guī)劃階段最容易翻車(chē)的三個(gè)點(diǎn)第一是互聯(lián)鏈路掩碼用 /30 還是 /24。點(diǎn)對(duì)點(diǎn)鏈路用 /30 是基本素養(yǎng)兩個(gè)可用地址剛好夠用不會(huì)浪費(fèi)。但在 VRP 上要注意network命令用的是反掩碼/30 對(duì)應(yīng)的反掩碼是 0.0.0.3寫(xiě)錯(cuò)一位就是整個(gè)網(wǎng)段都不生效而且不會(huì)報(bào)錯(cuò)只能靠display ospf interface去查。第二是LoopBack 接口要宣告進(jìn)區(qū)域。很多人只宣告物理接口結(jié)果鄰居的 Router ID 可達(dá)但 ping 不通某些依賴(lài) Router ID 的場(chǎng)景比如虛連接直接卡住。LoopBack 是穩(wěn)定存在的地址宣告進(jìn)去區(qū)域內(nèi)的 SPF 樹(shù)才有穩(wěn)定的葉子節(jié)點(diǎn)。第三是骨干區(qū)域不要塞業(yè)務(wù)網(wǎng)段。我見(jiàn)過(guò)把辦公網(wǎng)段直接掛在 Area 0 的配置結(jié)果骨干區(qū) LSDB 膨脹到上千條完全失去了劃區(qū)域的意義。骨干區(qū)只保留設(shè)備間的互聯(lián)和必要的 LoopBack業(yè)務(wù)網(wǎng)段一律下沉到非骨干區(qū)域。3. 分步配置把骨干區(qū)先立起來(lái)3.1 Area 0 的基礎(chǔ)配置配置順序上我習(xí)慣先把骨干區(qū)徹底打通再一個(gè)區(qū)域一個(gè)區(qū)域地往外接。這樣任何一步出問(wèn)題排查范圍都很小。以下是 R1 的完整配置VRP 平臺(tái)上network用的是反掩碼這點(diǎn)和 Cisco 的寫(xiě)法一致但和華為自己文檔里某些地方的正掩碼寫(xiě)法要區(qū)分開(kāi)別混。# R1 全局配置 sysname R1 interface LoopBack0 ip address 10.0.0.1 255.255.255.255 interface GigabitEthernet0/0/0 ip address 10.0.12.1 255.255.255.252 interface GigabitEthernet0/0/1 ip address 10.0.13.1 255.255.255.252 interface GigabitEthernet0/0/2 ip address 10.0.16.1 255.255.255.252 ospf 1 router-id 10.0.0.1 area 0.0.0.0 network 10.0.0.1 0.0.0.0 network 10.0.12.0 0.0.0.3 network 10.0.13.0 0.0.0.3 network 10.0.16.0 0.0.0.3R2 和 R3 的骨干側(cè)配置同理只宣告 Area 0 內(nèi)的接口。這里有個(gè)替代寫(xiě)法在接口下直接ospf enable 1 area 0.0.0.0效果一樣但我不太推薦混用——一個(gè)網(wǎng)絡(luò)里兩種風(fēng)格并存后面接手的人看配置會(huì)很累。統(tǒng)一用一種團(tuán)隊(duì)里約定好。參數(shù)上前文沒(méi)提這里補(bǔ)一句華為設(shè)備 OSPF 默認(rèn)參考帶寬是 100 Mbit/s千兆接口 cost 為 1萬(wàn)兆接口算出來(lái)是 0.1取整后也是 1。這意味著千兆和萬(wàn)兆在選路時(shí)權(quán)重相同跨區(qū)域選路可能選錯(cuò)。如果網(wǎng)絡(luò)里有萬(wàn)兆鏈路務(wù)必調(diào)整參考帶寬ospf 1 bandwidth-reference 10000調(diào)成 10000 Mbit/s 后千兆 cost 是 10萬(wàn)兆 cost 是 1選路才有意義。這個(gè)參數(shù)全網(wǎng)必須一致否則 cost 比較就沒(méi)有可比性。3.2 非骨干區(qū)域接入與 ABR 成型骨干區(qū)鄰居全 Full 之后開(kāi)始往 R2 上掛 Area 1。關(guān)鍵在于R2 同時(shí)加入了 Area 0 和 Area 1此刻它才真正成為 ABR開(kāi)始為每個(gè)區(qū)域生成 Type 3 匯總 LSA。# R2 配置 ospf 1 router-id 10.0.0.2 area 0.0.0.0 network 10.0.12.0 0.0.0.3 area 0.0.0.1 network 10.1.1.0 0.0.0.255 network 10.1.255.0 0.0.0.255注意 Multi-Area 場(chǎng)景下network命令只是匹配接口網(wǎng)段不要求精確到接口地址但一旦網(wǎng)段重疊行為會(huì)變得很奇怪。比如 10.1.1.0/24 被宣告進(jìn) Area 1同設(shè)備的另一個(gè) 10.1.1.4/30 接口也會(huì)被一并拉進(jìn)去。規(guī)劃時(shí)盡量讓各區(qū)域網(wǎng)段互不重疊、邊界清晰。R3 到 Area 2 的配置結(jié)構(gòu)相同# R3 配置 ospf 1 router-id 10.0.0.3 area 0.0.0.0 network 10.0.13.0 0.0.0.3 area 0.0.0.2 network 10.2.1.0 0.0.0.255R4 是 Area 2 的純內(nèi)部設(shè)備只屬于 Area 2它的配置更簡(jiǎn)單但也正因?yàn)楹?jiǎn)單容易被寫(xiě)錯(cuò)成“只宣告了部分接口”導(dǎo)致區(qū)域內(nèi)部出現(xiàn)路由黑洞。# R4 配置 ospf 1 router-id 10.0.0.4 area 0.0.0.2 network 10.2.1.0 0.0.0.255 network 10.2.2.0 0.0.0.255 network 10.0.45.0 0.0.0.3R4 上10.0.45.0/30這條鏈路連的是 R5但 R5 規(guī)劃在 Area 3這段鏈路的兩個(gè)接口分屬不同區(qū)域。這是非法的——一條鏈路的兩個(gè)端點(diǎn)必須在同一個(gè)區(qū)域除非是虛連接。所以正確做法是把兩端的接口都放 Area 2再通過(guò)虛連接讓 Area 3 邏輯上連回骨干。3.3 逐段落驗(yàn)證的檢查清單每配完一層我都要跑一遍這幾條命令確認(rèn)狀態(tài)再往下一層走。一次性把配置全灌進(jìn)去再排錯(cuò)是效率最低的做法。檢查項(xiàng)命令期望結(jié)果鄰居狀態(tài)display ospf peer brief所有鄰居 State 為 Full接口是否使能display ospf interface所有規(guī)劃接口出現(xiàn)Area 號(hào)正確接口開(kāi)銷(xiāo)display ospf interface verboseCost 符合預(yù)期萬(wàn)兆明顯小于千兆本機(jī) Router IDdisplay ospf brief與規(guī)劃表一致無(wú)沖突提示區(qū)域間路由display ospf routing出現(xiàn) Type 3 路由條目實(shí)際轉(zhuǎn)發(fā)表display ip routing-table protocol ospf路由已下發(fā)無(wú) InactiveABR/ASBR 身份display ospf abr-asbrABR 節(jié)點(diǎn)標(biāo)識(shí)正確特別說(shuō)一下display ospf interface這條它的價(jià)值在于確認(rèn)“接口到底有沒(méi)有被宣告進(jìn) OSPF”。如果network反掩碼寫(xiě)錯(cuò)了一位接口不會(huì)出現(xiàn)但命令行不會(huì)有任何報(bào)錯(cuò)你會(huì)一直困惑為什么鄰居起不來(lái)。這個(gè)坑我踩過(guò)一次花了兩個(gè)小時(shí)才發(fā)現(xiàn)是反掩碼少寫(xiě)了一個(gè) 0。4. 收斂?jī)?yōu)化匯總、特殊區(qū)域與虛連接4.1 區(qū)域間路由匯總怎么算掩碼多區(qū)域最大的收益之一就是把區(qū)域內(nèi)的明細(xì)分段匯總成一條路由送到骨干核心設(shè)備只看到匯總條目。華為的命令是abr-summary注意它在產(chǎn)生 Type 3 的那個(gè)區(qū)域下配置也就是 ABR 上、屬于被匯總區(qū)域的那部分配置。假設(shè) Area 1 內(nèi)部有 10.1.1.0/24、10.1.2.0/24 一直到 10.1.15.0/24 共 16 個(gè)網(wǎng)段它們的共同前綴是 10.1.0.0/2016 個(gè) /24 恰好構(gòu)成一個(gè) /20。那么匯總配置就是# 在 R2 上配置把 Area 1 的明細(xì)匯總后發(fā)布給其他區(qū)域 ospf 1 area 0.0.0.1 abr-summary 10.1.0.0 255.255.240.0掩碼計(jì)算過(guò)程16 個(gè) /24 2 的 4 次方所以前綴長(zhǎng)度 24 - 4 20即 255.255.240.0。這里的坑在于匯總網(wǎng)段必須能覆蓋所有明細(xì)且不能覆蓋到不屬于本區(qū)域的網(wǎng)段。如果 Area 1 里還藏著 10.1.200.0/24它就不在 10.1.0.0/20 范圍內(nèi)會(huì)單獨(dú)發(fā)布這沒(méi)問(wèn)題但如果 10.1.0.0/20 覆蓋到了 Area 2 的地址那就是典型的路由黑洞——核心會(huì)把去往 Area 2 某個(gè)地址的流量錯(cuò)誤地送到 Area 1。匯總之后如果某條明細(xì)鏈路掛了只要還有別的明細(xì)在匯總路由不會(huì)撤銷(xiāo)這就叫“匯總路由的穩(wěn)定性”。代價(jià)是區(qū)域外的設(shè)備感知不到具體哪條明細(xì)斷了只能靠區(qū)域內(nèi)自己收斂。這也是我建議“匯總粒度不要太粗”的原因過(guò)度匯總會(huì)把故障完全隱藏掉。如果引入外部路由對(duì)應(yīng)還有asbr-summary在 ASBR 上配置匯總的是 Type 5 外部路由掩碼算法完全相同。這兩個(gè)命令的作用域別搞混一個(gè)管區(qū)域間Type 3一個(gè)管區(qū)域外Type 5。4.2 Stub 與 NSSA省 LSA 還是留靈活A(yù)rea 1 是總部接入?yún)^(qū)只有一條路通向骨干不需要知道外部路由也不需要自己引入外部路由這是 Stub 區(qū)域的完美候選。Stub 的好處是 ABR 不會(huì)向它注入 Type 4 和 Type 5 LSA區(qū)域內(nèi)設(shè)備的 LSDB 大幅減少同時(shí) ABR 會(huì)自動(dòng)下發(fā)一條 Type 3 默認(rèn)路由。# R2ABR上配置 ospf 1 area 0.0.0.1 stub # R7Area 1 內(nèi)部設(shè)備上必須同步配置 ospf 1 area 0.0.0.1 stub這里必須強(qiáng)調(diào)Stub 區(qū)域內(nèi)所有路由器都要配stub因?yàn)?Stub 屬性通過(guò) Hello 報(bào)文的 E-bit 傳遞一邊配一邊不配E-bit 不一致鄰居直接卡在 Init 狀態(tài)起不來(lái)。這是我在現(xiàn)場(chǎng)見(jiàn)過(guò)的高頻問(wèn)題配置完鄰居突然全 Down第一反應(yīng)應(yīng)該去看區(qū)域標(biāo)志位。如果連 Type 3 明細(xì)都不想讓區(qū)域內(nèi)部看到可以在 ABR 上加no-summary變成 Totally Stubospf 1 area 0.0.0.1 stub no-summary注意no-summary只配在 ABR 上區(qū)域內(nèi)設(shè)備只配stub。配反了狀態(tài)機(jī)就亂套鄰居可能時(shí)起時(shí)落。Area 3 的情況不同分支 B 自己有一條出口R5 上引入了一條靜態(tài)默認(rèn)這種“既有骨干通路、又有本地出口”的區(qū)域只能用 NSSA。NSSA 的核心機(jī)制是把外部路由以 Type 7 在區(qū)域內(nèi)泛洪再由 ABR 在邊界處把 Type 7 轉(zhuǎn)換成 Type 5 發(fā)布出去。# R5 與 R4 上 ospf 1 area 0.0.0.3 nssa # R5 上引入外部路由 ospf 1 import-route staticType 7 轉(zhuǎn) Type 5 的時(shí)候ABR 會(huì)檢查 P-bitPropagate bit和 FA 地址。如果引入時(shí)指定的下一跳在區(qū)域內(nèi)可達(dá)Type 7 會(huì)被轉(zhuǎn)換如果 FA 地址不可達(dá)轉(zhuǎn)換后就是一條黑洞路由。所以 NSSA 場(chǎng)景下引入外部路由時(shí)務(wù)必確認(rèn) NextHop 在區(qū)域內(nèi)可路由必要時(shí)用import-route static配合明確的 FA 地址控制。4.3 虛連接能不用就不用非用不可要小心回到 R5 的問(wèn)題Area 3 的物理鏈路只連到 R4Area 2不直接連骨干違反“非骨干區(qū)域必須與骨干直連”的規(guī)則。修復(fù)手段就是虛連接Virtual Link通過(guò) Area 2 這條傳輸區(qū)域把 Area 3 邏輯上接到 Area 0。虛連接的兩端必須都是 ABR而且必須屬于同一個(gè)傳輸區(qū)域。這里的配置點(diǎn)和直覺(jué)相反虛連接的配置放在傳輸區(qū)域下也就是 Area 2而不是目標(biāo)區(qū)域 Area 3。# R3已與 Area 0 直連的 ABR ospf 1 area 0.0.0.2 vlink-peer 10.0.0.4 # R4另一端的 ABR需要同時(shí)屬于 Area 2 和 Area 3 ospf 1 area 0.0.0.2 vlink-peer 10.0.0.3配置完R4 與 R3 之間會(huì)基于 Area 2 的路徑建立一條邏輯的點(diǎn)對(duì)點(diǎn)鏈路狀態(tài)可以通過(guò)display ospf vlink查看正常應(yīng)為 Full。關(guān)于虛連接我的態(tài)度一貫是“應(yīng)急工具不是設(shè)計(jì)工具”。原因有三第一虛連接的路徑依賴(lài)傳輸區(qū)域的內(nèi)部路由傳輸區(qū)域里任何一條鏈路抖動(dòng)虛連接跟著抖穩(wěn)定性天然弱于物理直連第二它會(huì)讓排障路徑變長(zhǎng)看 LSDB 的時(shí)候要跨區(qū)域推第三傳輸區(qū)域不能是 Stub 或 NSSA區(qū)域類(lèi)型選擇被限制死。所以更合理的做法是調(diào)整物理拓?fù)渥屆總€(gè)區(qū)域都真正直連骨干虛連接只在割接過(guò)渡期短時(shí)間使用。5. 排障實(shí)錄鄰居、路由和轉(zhuǎn)發(fā)三個(gè)層面5.1 鄰居起不來(lái)問(wèn)題一定在 Hello 報(bào)文里鄰居狀態(tài)機(jī)卡在 Init 或 Down99% 是 Hello 報(bào)文沒(méi)匹配上。Hello 報(bào)文中參與比對(duì)的字段有Hello/Dead 間隔、區(qū)域 ID、認(rèn)證信息、Stub 標(biāo)志位E-bit、網(wǎng)絡(luò)掩碼在廣播網(wǎng)絡(luò)上。任何一個(gè)不一致鄰居就停在那不動(dòng)。我常用的排查路徑是先看display ospf peer看狀態(tài)停在哪一步。停在 Init 說(shuō)明收到了對(duì)方的 Hello 但對(duì)方?jīng)]收到我的通常是單向鏈路或者 ACL 擋了組播。完全 Down 說(shuō)明連 Hello 都沒(méi)收到先確認(rèn)接口有沒(méi)有被宣告display ospf interface再看直連能不能 ping 通。提示OSPF 用 224.0.0.5 和 224.0.0.6 兩個(gè)組播地址。如果鏈路中間有設(shè)備做了組播抑制或者接口上開(kāi)了組播過(guò)濾Hello 會(huì)被靜默丟棄表現(xiàn)為“物理通、路由協(xié)議不通”很容易誤判成配置錯(cuò)誤。這里有個(gè)華為平臺(tái)特有的點(diǎn)值得單獨(dú)說(shuō)MTU 檢查。VRP 的接口默認(rèn)在 DD 報(bào)文中把 MTU 字段填 0也就是說(shuō)默認(rèn)不比對(duì) MTU。但如果接口下配置了ospf mtu-enable就會(huì)攜帶真實(shí) MTU 并參與比較這時(shí)兩端 MTU 不一致比如一端是 1500另一端因?yàn)樽咚淼朗?1400鄰居會(huì)卡在 ExStart/Exchange 反復(fù)重傳 DD 報(bào)文。排查時(shí)看display ospf interface verbose里的 MTU 值或者直接抓包看 DD 報(bào)文一眼就能定位。5.2 鄰居 Full 了但路由不全先看 LSA 類(lèi)型鄰居起來(lái)了不等于路由就通。我在現(xiàn)場(chǎng)遇到過(guò)最典型的一種Area 2 的設(shè)備能看到 Area 1 的網(wǎng)段但看不到 Area 0 里某臺(tái)設(shè)備的 LoopBack。查display ospf lsdb summary發(fā)現(xiàn) Type 3 存在再查display ospf lsdb router發(fā)現(xiàn)某臺(tái)設(shè)備的 Router-LSA 里沒(méi)有那條 LoopBack 的鏈路描述——原因很簡(jiǎn)單那臺(tái)設(shè)備的 LoopBack 根本沒(méi)被network宣告進(jìn) OSPF。另一種情況是 Stub 區(qū)域里“少路由”。如果你在 Area 1 里發(fā)現(xiàn)完全看不到外部網(wǎng)段而且display ospf lsdb ase是空的別急著懷疑配置先確認(rèn)這個(gè)區(qū)域是不是被配成了 Stub——Stub 區(qū)域本來(lái)就不接收 Type 5這是設(shè)計(jì)如此不是故障。還有一類(lèi)更隱蔽的ABR 上的 Type 3 過(guò)濾。華為支持在區(qū)域下用filter做 LSA 過(guò)濾如果前人配過(guò)filter import或filter export而沒(méi)寫(xiě)文檔你會(huì)看到“明明該有的路由就是沒(méi)有”。排查時(shí)用display current-configuration configuration ospf把整段配置拉出來(lái)看別只看自己改的那幾行。5.3 路由表里有但 ping 不通問(wèn)題多半在轉(zhuǎn)發(fā)面路由存在但業(yè)務(wù)不通說(shuō)明控制面已經(jīng)收斂問(wèn)題出在轉(zhuǎn)發(fā)面。我最常遇到的三類(lèi)第一類(lèi)是單向路由。A 到 B 有路由B 到 A 沒(méi)有回程流量被丟棄。用tracert從兩端各跑一次很快就能確認(rèn)。第二類(lèi)是路由指向了錯(cuò)誤的下一跳這種情況多發(fā)生在做了匯總之后。匯總路由把流量引到了一個(gè)實(shí)際不存在明細(xì)的路徑上形成黑洞。判斷方法是display ip routing-table 目的地址看精確匹配到哪條再看那條路由的來(lái)源是不是匯總。第三類(lèi)是接口上配置了策略路由或 ACL把本該轉(zhuǎn)發(fā)的流量擋了。這種最難查因?yàn)槁酚杀硗耆?。我的?xí)慣是先用display ip interface brief確認(rèn)接口 up再用display acl all掃一遍有沒(méi)有可疑規(guī)則最后才懷疑硬件或運(yùn)營(yíng)商側(cè)。5.4 多區(qū)域問(wèn)題速查表下面這張表是我這些年攢下來(lái)的高頻問(wèn)題對(duì)照現(xiàn)場(chǎng)排障時(shí)按“現(xiàn)象—命令—原因”三步走能省掉大量試錯(cuò)時(shí)間?,F(xiàn)象首選排查命令常見(jiàn)根因鄰居一直 Downdisplay ospf interface接口未被 network 宣告反掩碼寫(xiě)錯(cuò)鄰居停在 Initdisplay ospf peer單向鏈路、組播被過(guò)濾、ACL 攔截鄰居停在 ExStartdisplay ospf interface verbose兩端 MTU 不一致且開(kāi)啟了 mtu-enable鄰居反復(fù) Up/Downdisplay ospf errorHello/Dead 間隔不一致、認(rèn)證不匹配區(qū)域間路由缺失display ospf lsdb summaryABR 未成型、區(qū)域未直連骨干外部路由缺失display ospf lsdb ase區(qū)域被配成 Stub、ASBR 未引入?yún)R總后出現(xiàn)黑洞display ip routing-table匯總網(wǎng)段覆蓋了不屬于本區(qū)域的地址虛連接起不來(lái)display ospf vlink傳輸區(qū)域被配成 Stub、一端不是 ABR路由有但不通tracertdisplay acl all單向路由、策略路由、ACL 攔截補(bǔ)一個(gè)獨(dú)家經(jīng)驗(yàn)多區(qū)域一起上量之后別只盯著鄰居狀態(tài)。我習(xí)慣在每次變更后跑一次display ospf lsdb的條目數(shù)統(tǒng)計(jì)和基線(xiàn)比一下。如果某次變更后 Type 3 數(shù)量突然翻倍大概率是某個(gè)區(qū)域的匯總沒(méi)生效ABR 把所有明細(xì)都發(fā)出去了。這個(gè)數(shù)字比任何單條命令都更能反映整體健康狀況。最后分享一個(gè)我在實(shí)際項(xiàng)目里的體會(huì)。多區(qū)域 OSPF 的復(fù)雜度八成不在配置本身而在“你知不知道自己劃了幾個(gè)區(qū)域、每個(gè)區(qū)域是什么類(lèi)型、哪些地方做了匯總和過(guò)濾”。我現(xiàn)在的習(xí)慣是每做一個(gè)多區(qū)域方案先在文檔里畫(huà)一張區(qū)域類(lèi)型和匯總網(wǎng)段的對(duì)照表配置完成后再用display current-configuration configuration ospf把整段貼到文檔里和表格逐條核對(duì)。這套流程看起來(lái)笨但它把“配置漂移”這個(gè)最常見(jiàn)的隱患擋在了變更窗口之前——比事后拿著display ospf error一條一條猜要省心得多。