城域網割接及割接引起業務中斷的案例整理分析

這是一例發生在運行MPLS ***的網絡上由ios軟件Bug引起的故障案例,我把他整理出來供大家參考和討論,故障的發生和解決都帶有偶然性,並不重要, 只希望通過討論,能夠提高我們分析問題,解決問題的能力.
一、故障緣由
某城市A城域網骨幹兩臺7206(R1和R2)上聯核心網,下聯城域,互爲備份,運行MPLS,圖就不畫了,呵呵。某日升級城域,對城域網進行調整和擴容。(下文中的城市B的城域結構有所不同,規模也大些,但在此例中也可按此結構理解,故不做詳細說明)
升級過程:
1、 升級7206ios
2、 業務割接
3、 冗餘測試、HSRP測試和全網測試、業務測試,做最後一次用戶連通性測試,OK,走人!
4、 觀察階段。
第二天,某用戶報MPLS ***網絡不通。(注:割接過程不對用戶配置進行修改!)
二、故障現象
用戶報割接城市A到另外城市B的MPLS ***業務中斷。
城市A的某用戶業務是通過CE設備以MPLS ***的形式接入到城市A的PE路由器上(就是剛剛將的升級過的骨幹路由器Cisco VXR 7206)的,同樣,城市B的某用戶業務是通過CE設備以MPLS ***的形式接入到省骨幹網相應的PE路由器。
故障現象是城市A的某用戶可以PING通城市A本地的PE路由器,城市A某用戶本地網絡連接無任何問題,但不能PING通遠端城市B的PE路由器的某用戶業務子接口。
同樣城市B的某用戶可以PING通城市B本地的PE路由器,城市B某用戶本地網絡連接無任何問題,但不能PING通遠端城市A的PE路由器。
最奇怪的是: 城市A某用戶業務所連接的PE路由器上,同時存在其他五個***的用戶,這五個***用戶網絡業務運行完全正常。 且其網絡業務的設置與某用戶業務的設置是同一類型的。所有的***業務之間的命令比較,不多一句,不少一句。
某用戶***業務,城市A和城市B之間的***及IPV4的路由完全正常!
三、排錯過程
(1)故障的隔離
第一時間在城市A某用戶***所在的省骨幹PE路由器上 Cisco 7206VXR上開設邏輯端口Loopback1, 並將Loopback1 劃入某用戶***, 此時城市B某用戶***可以收到此Loopback 地址的路由,但仍舊無法PING通該Loopback地址。因此可證明某用戶***的中斷不是新增的城域網設備引起的,問題產生在省骨幹路由器之間的MPLS交互進程上。此時我們把所有的工作重點放在省骨幹網之間的排錯上。
(2)命令處理流程
主要的處理工作如下:
1. 在城市A的骨幹路由器r2上使用命令show ip vrf 檢查mpls ***的配置和RD的名字。發現都是正確的。使用命令show ip vrf detail ***9:XXX.***和show ip vrf interface檢查某用戶***的路由屬性,和它的接口狀態和ip地址。發現都是正確的。使用命令show ip bgp neighbors/show ip bgp ***v4 all /show ip bgp ***v4 vrf ***9:XXX.***檢查城市A和城市B兩PE間的BGP關係。發現都是正確的。
2.在城市A的骨幹路由器r2上使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市A本地某用戶)和一條bgp的路由(城市B某用戶)。使用命令ping vrf ***9:XXX.*** 210.5.2.130 。測試城市A本地PE到城市A本地CE的聯通性。測試結果是通的。使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市A本地PE到城市BPE的聯通性。測試結果是ping不通。
3.然後telnet到城市B的PE路由器上,使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市B本地某用戶)和一條bgp的路由(城市A某用戶)。使用命令ping vrf ***9:XXX.*** 210.5.0.222 。測試城市B本地PE到城市B本地CE的聯通性。測試結果是通的。使用命令ping vrf ***9:XXX.*** 210.5.2.129.。測試城市BPE到城市A PE的聯通性。測試結果是ping不通。
因爲這個***兩端的路由都是正確的,而且在割接過程中沒有做任何的改動。割接後的測試也是正常的。討論後得出初步結論,認爲問題不是割接造成的。有可能是其他的原因引起。分析問題的方向應該和割接無關,重點在mpls ***的方向。
4.在城市A的骨幹路由器r2上使用命令clear ip route vrf ***9:XXX.*** *,使用命令show ip route vrf ***9:XXX.***可以看到***的路由已經有變化,bgp路由(城市B某用戶)已經消失。稍後使用命令show ip route vrf ***9:XXX.***可以看到***的路由已經有變化,除了直連的路由(城市A本地某用戶),一條bgp的路由(城市B某用戶)重新出現。在城市B的PE路由器上,使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市B本地某用戶)和一條bgp路由(城市A某用戶)。在城市A的骨幹路由器r2上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市APE的聯通性。測試結果是ping不通。
5.在城市B的PE路由器上使用命令clear ip route vrf ***9:XXX.*** *,使用命令show ip route vrf ***9:XXX.***可以看到***的路由已經有變化,bgp路由(城市A某用戶)已經消失。稍後使用命令show ip route vrf ***9:XXX.***可以看到***的路由已經有變化,除了直連的路由(城市B本地某用戶),一條bgp的路由(城市A某用戶)重新出現。在城市A的骨幹路由器r2上,使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市B本地某用戶)和一條bgp路由(城市A某用戶)。在城市A的骨幹路由器r2上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市A PE的聯通性。測試結果是ping不通。
6.在城市A的骨幹路由器r2上某用戶的子端口上使用命令shutdown,使用命令show ip route vrf ***9:XXX.***可以看到***的路由已經有變化,直連的路由(城市A本地某用戶)已經消失。使用no shutdown,使用命令show ip route vrf ***9:XXX.***可以看到***的路由已經有變化,直連的路由(城市A本地某用戶)重新出現,一條bgp的路由(城市B某用戶)仍然存在。在城市B的PE路由器上,使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市B本地某用戶)和一條新學到的bgp路由(城市A某用戶)。在城市A的骨幹路由器r2上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市APE的聯通性。測試結果是ping不通。
7.在城市B的PE路由器上某用戶的子端口上使用命令shutdown,使用命令show ip route vrf ***9:XXX.***可以看到***的路由已經有變化,直連的路由(城市B本地某用戶)已經消失。使用no shutdown,使用命令show ip route vrf ***9:XXX.***可以看到***的路由已經有變化,直連的路由(城市B本地某用戶)重新出現,一條bgp的路由(城市A某用戶)仍然存在。在城市A的骨幹路由器r2上,使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市A本地某用戶)和一條新學到的bgp路由(城市B某用戶)。在城市A的骨幹路由器r2上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市A PE的聯通性。測試結果是ping不通。
8.在城市A的骨幹路由器r2上某用戶的子端口上使用命令去掉此***的配置命令。稍後使用原來的命令重新配置。配置完畢在r2上使用命令show ip route vrf ***9:XXX.***可以看到正確的***路由,直連的路由(城市A本地某用戶)和一條bgp的路由(城市B某用戶)。在城市B的PE路由器上,使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市B本地某用戶)和一條bgp的路由(城市A某用戶)。在r2上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市APE的聯通性。測試結果是ping不通。
9.在城市A的骨幹路由器r2上某用戶的子端口上使用命令去掉此***的配置命令。使用原來的命令重新在城市A的骨幹路由器r1配置。配置完畢在r1上使用命令show ip route vrf ***9:XXX.***可以看到正確的***路由,直連的路由(城市A本地某用戶)和一條bgp的路由(城市B某用戶)。在城市B的PE路由器上,使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市B本地某用戶)和一條bgp的路由(城市A某用戶)。在r1上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市A PE的聯通性。測試結果是ping不通。爲了穩妥起見,我們又把某用戶***的配置重新挪回到r2上,並刪除r1的某用戶***配置。
10.因爲在割接前曾經升級了城市A的骨幹路由器r1和r2的IOS軟件。考慮到有可能是IOS軟件BUG引起這個問題。嘗試把r2路由器的IOS版本降級回原來使用的版本。在r2路由器上使用配置命令boot system flash disk0:c7200-p-mz.120-17.ST1.bin,存盤後執行命令reload。等r2路由器啓動完畢。在r2上使用命令show ip route vrf ***9:XXX.***可以看到正確的***路由,直連的路由(城市A本地某用戶)和一條bgp的路由(城市B某用戶)。在城市B的PE路由器上,使用命令show ip route vrf ***9:XXX.***。可以看到***的路由是正確的,分別是一條直連的路由(城市B本地某用戶)和一條bgp的路由(城市A某用戶)。在r2上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市APE的聯通性。測試結果是ping不通。
11.重複步驟10的操作,改爲使用其他的軟件版本。一共嘗試了3個軟件版本。軟件版本分別是:c7200-p-mz.122-11.T1.bin,c7200-p-mz.120-17.ST1.bin,c7200-p-mz.120-23.S1.bin
12.在城市A的骨幹路由器r2上使用命令show tag forwarding-table vrf ***9:XXX.*** X.X.X.X detail和命令show ip cef vrf ***9:XXX.*** X.X.X.X檢查城市B某用戶路由的標籤。發現標籤堆棧裏只有一級標籤。這個標籤是城市B的PE路由器分發的關於城市B某用戶路由的標籤。但是缺少了和城市A PE直連的P路由器分發的mpls標籤。這會導致城市A的PE不懂如何轉發mpls數據幀到mpls骨幹,也就是P路由器。最終的結果是導致某用戶在城市A和城市B的***不通。
13.在城市A的r2上使用命令clear ip bgp *,稍後再使用命令show tag forwarding-table vrf ***9:XXX.*** X.X.X.X detail和命令show ip cef vrf ***9:XXX.*** X.X.X.X檢查城市B某用戶路由的標籤。發現標籤堆棧裏仍然只有一級標籤。
14.重複13的操作接近10次,在這過程中也曾經使用show tech命令去檢查r2的各種狀態信息,但是沒有任何異常。在大概15點00分,突然發現show tag forwarding-table vrf ***9:XXX.*** X.X.X.X detail和命令show ip cef vrf ***9:XXX.*** X.X.X.X的輸出顯示城市B某用戶路由的標籤堆棧裏有了兩級標籤。在r2上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市APE的聯通性。測試結果是ping不通。
15.在城市A的骨幹路由器r2上使用命令show tag forwarding-table vrf ***9:XXX.*** X.X.X.X detail和命令show ip cef vrf ***9:XXX.*** X.X.X.X檢查城市B某用戶路由的標籤。同時在城市B的PE路由器上使用命令show tag forwarding-table vrf ***9:XXX.*** X.X.X.X detail。發現問題所在,城市B的PE路由器對城市B某用戶的路由的標籤在分發到城市A的PE路由器上後標籤值不一致。導致城市A PE分發的MPLS數據包到達城市BPE路由器時,城市BPE路由器不知道該怎麼處理,因爲城市A傳輸過來的數據的標籤並不是城市BPE分發的。所以城市BPE路由器只能把它丟棄。導致網絡不通。R>
16.在城市B的PE路由器上使用命令clear ip bgp *,稍後在城市A的骨幹路由器r2上使用命令show tag forwarding-table vrf ***9:XXX.*** X.X.X.X detail和命令show ip cef vrf ***9:XXX.*** X.X.X.X檢查城市B某用戶路由的標籤。同時在城市B的PE路由器上使用命令show tag forwarding-table vrf ***9:XXX.*** *.*.*.* detail。發現標籤仍然不匹配。
17.在城市B的PE路由器上某用戶的子端口上使用命令no ip address,稍後重新配置原來的ip地址。稍後在城市A的骨幹路由器r2上使用命令show tag forwarding-table vrf ***9:XXX.*** X.X.X.X detail和命令show ip cef vrf ***9:XXX.*** X.X.X.X檢查城市B某用戶路由的標籤。同時在城市B的PE路由器上使用命令show tag forwarding-table vrf ***9:XXX.*** 210.5.2.129detail。發現標籤仍然不匹配。
18.重複16的操作。但是結果仍然是標籤不匹配。
認爲應該是CISCO IOS的軟件BUG引起的問題。但是不能通過象clear ip bgp * ,no ip address 等手段解決。在CISCO尋求幫助。
19. Cisco負責支持項目的工程師,也說不出所以然的理由;在跟Cisco工程師的電話溝通的同時,我們仍舊在做嘗試,在城市A的骨幹路由器r2上某用戶的子端口上使用命令去掉此***的配置命令。使用原來的命令重新在城市A的骨幹路由器r1配置。配置完畢在r1上使用命令show tag forwarding-table vrf ***9:XXX.*** X.X.X.X detail和命令show ip cef vrf ***9:XXX.*** X.X.X.X檢查城市B某用戶路由的標籤。同時在城市B的PE路由器上使用命令show tag forwarding-table vrf ***9:XXX.*** *.*.*.* detail。發現標籤是匹配的。在r1上使用命令ping vrf ***9:XXX.*** X.X.X.X。測試城市BPE到城市APE的聯通性。測試結果是ping通。
20. 全面的網絡測試, 類似問題沒有產生!
四、故障的具體技術分析
在發生故障的當時我們分別檢查了城市A和城市B PE路由器上的路由表。在城市A的PE路由器上發現某用戶***的路由是正確的。同時在城市B的PE上也發現某用戶***的路由是正確的。也就是說城市A城市B某用戶兩端的路由都是正確的。
MPLS ***的路由正確都是不能PING通,問題出現在底層的MPLS的交換過程。這個也是CISCO早期實現MPLS ***技術時發生的軟件BUG。具體表現爲:一個MPLS ***在正常的使用過程中,突然發現不通,但是從MPLS ***路由表上看不到任何的異常。這些現象和某用戶***的故障完全一致。
經過進一步檢查,發現導致某用戶***城市A和城市B不通的直接原因是因爲城市A的省骨幹PE路由器(Cisco 7206VXR),和PE直接連接的省骨幹P路由器(Cisco GSR 12016),城市B的省骨幹PE路由器(Cisco GSR12016)這三者間的MPLS標籤的分發出現了問題。因爲MPLS ***的IP包在MPLS骨幹網中傳輸需要在IP包頭加上兩級的MPLS標籤,依次爲IP V4標籤和*** V4標籤。
IP V4標籤是由和城市A PE直接連接的P路由器分發的,*** V4標籤是由城市B PE路由器分發的。如果這兩級標籤任一不正確,都可以導致***不通。
當時就發現發生故障的PE路由器上的MPLS標籤不正確。剛開始是只收到一級的標籤,即只收到*** V4的標籤,沒有收到IP V4的標籤。努力解決了IP V4標籤的問題後又發現*** V4的標籤不正確,即由城市B PE路由器分發的標籤經過傳輸後在城市A PE路由器上顯示爲另一標籤。以上MPLS 標籤的不正確是導致城市A和城市B某用戶***路由正確但是不通的原因。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章