吳元生,魏五洲
(32399部隊 江蘇 南京 211131)
隨著網絡應用的不斷深化,網鏈構建中越來越依賴IP網絡,這就為網鏈IP網絡的可用性提出了更高的要求。網絡系統(tǒng)的可用性是保證網絡正常運轉的基本條件,一旦出現(xiàn)意外造成網絡不能正常運轉,需要具備及時自我恢復的能力,為了更好地解決上述網絡中斷的問題,可以采用虛擬路由冗余協(xié)議(virtual router redundancy protocol,VRRP),該協(xié)議的作用是對以太網上終端 IP設備的默認網關信息(如IP和MAC)進行冗余備份,從而在當前路由設備宕機時,能自動及時啟用備份路由設備接管轉發(fā)工作,實現(xiàn)對用戶的透明切換,提高網絡服務質量[1]。
VRRP被設計用來實現(xiàn)IP傳輸失敗情況下的不中斷服務,具體地說,就是用于在局域網內源主機無法動態(tài)學習到首跳路由器IP地址的情況下,防止首跳路由失敗。VRRP將多個路由器都映射為一個虛擬的路由器,VRRP組中只有一個路由器代表虛擬路由器進行包的發(fā)送,即稱為主路由器,其他路由器均稱為備份路由器。當網絡中的主機發(fā)送數(shù)據(jù)包給網關,也就是發(fā)向虛擬路由器時,主路由器承擔轉發(fā)工作。如果這個主路由器在某種原因無法工作的情況下,處于備份狀態(tài)的路由器將被選擇用來代替原來的主路由器。因此,VRRP使得局域網內的主機看上去只使用了一個路由器,并且即使當前使用的首跳路由器失敗的情況下仍能夠保持通信的連續(xù)性和可靠性[2]。
問題所涉及的設備為華為S9306交換機(軟件版本V100R006C00SPC800),CSW-01和CSW-02兩臺9306交換機組成VRRP,心跳報文通過防火墻,作為網關,承載的業(yè)務主要為單播和組播,網絡拓撲組網描述如圖1所示。
CSW-01和CSW-02交換機組成VRRP,心跳報文通過防火墻,由于防火墻丟失,導致心跳報文無法到達對端,導致VRRP超時出現(xiàn)雙主機(以下簡稱雙主)現(xiàn)象。在實驗室模擬兩臺S9306交換機上不停地出現(xiàn)VRRP雙主現(xiàn)象。
1)在CSW-01和CSW-02起VRRP,CSW-01為備。心跳報文通過CSW-03到CSW-02。物理環(huán)路通過加入不同VLAN破環(huán)。
2)用測試儀構造現(xiàn)網的組播業(yè)務,同時配置網管對CSW-01光口性能監(jiān)控使用5 min一個周期。
以Vlanif101的 VRRP為例,正常情況下,CSW-01為主,CSW-02為備,出現(xiàn)問題時,CSW-02會不斷的升主。此時查看在交換機CSW-02在Vlanif101的端口上抓入方向的報文,發(fā)現(xiàn)心跳報文已經到達CSW-02,但是沒有上送到VRRP協(xié)議棧。
通過觀察日志信息發(fā)現(xiàn)CSW-01不定時VRRP震蕩,接口板CPU的遠程過程調用查詢(remote procedure call query,RPCQ)板間通信任務占用率高,該任務占用率高導致 VRRP 得不到及時處理。這里采集了兩次震蕩的信息,CSW-01和CSW-02交換機均出現(xiàn)VRRP雙主現(xiàn)象,而且反復振蕩,對業(yè)務產生了影響。
根據(jù)對CS-001、CS-002上任務數(shù)據(jù)抓包的分析,確認CS-001、CS-002上組播信息收發(fā)一致,即兩臺核心交換機確實將收到的信息如數(shù)轉發(fā)給了NE40E-X3路由器。檢查NE40E-X3路由器的組播轉發(fā)表,各組播組收發(fā)包數(shù)一致。分析其城域網口的抓包數(shù)據(jù)、故障時段,確實沒有收到相應的數(shù)據(jù)包。檢查CS-001、CS-002的告警記錄,問題時段前后無相關告警發(fā)生。檢查CR-001的告警記錄,問題時段前后無相關告警發(fā)生。
打開FW-001、FW-002的防火墻健康記錄,沒有發(fā)現(xiàn)任何記錄信息。打開防火墻的日志記錄功能,設置日志服務器參數(shù)后,點擊“應用”按鈕即可完成日志設置。重新進行聯(lián)調,發(fā)現(xiàn)了MAC地址漂移告警,隨后防火墻去能(disable)了VRRP的兩個端口。分析CS-001、CS-002上抓包數(shù)據(jù)的VRRP報文,在Vlan101上的VRRP出現(xiàn)了雙主的情況,CS-001、CS-002上Vlan101分別發(fā)出了自己的VRRP通告報文,導致防火墻發(fā)現(xiàn)MAC地址漂移。經與天融信方面聯(lián)系,確認一旦認為發(fā)生了攻擊,攻擊方向的端口將會禁止流量10 s。繼續(xù)檢查網管,發(fā)現(xiàn)CS-002上Vlan101的VRRP在組播中斷前后發(fā)生了主備倒換,并且檢查CS-002上報的事件通知,發(fā)現(xiàn)Vlan101的VRRP每隔15~20 min發(fā)生一次VRRP保護切換,很有規(guī)律。其中CS-002三個項目的值不為0,切換成Master狀態(tài)(transited to master)的次數(shù)為1589,收到advertisement報文(received advertisements)的數(shù)量為3 840 843,收到攻擊報文(received attacking packets)的個數(shù)為470。經過對CS-002上抓包數(shù)據(jù)的分析,CS-002持續(xù)收到了CS-001發(fā)來的VRRP通告信息(1次/s,目的地址224.0.0.18),但在某些情況下,CS-002確實在收到了CS-001發(fā)來的VRRP通告信息后,發(fā)出了自己的VRRP通告,即出現(xiàn)了Vlan101 VRRP雙主的情況。該情況導致FW-001認為是發(fā)生了組播攻擊,于是去能(disable)端口10 s,出現(xiàn)組播業(yè)務被中斷。
分析CS-001上的抓包數(shù)據(jù),發(fā)現(xiàn)也出現(xiàn)過Vlan 201 VRRP雙主的情況,但沒有出現(xiàn)業(yè)務中斷的情形。查看中心機內部VRRP,發(fā)現(xiàn)有過多次VRRP雙主的情況發(fā)生,但由于上端連接的是交換機,只報告了網管MAC地址發(fā)生了漂移。不像CS-001和CS-002因VRRP雙主導致防火墻因防攻擊而阻斷了業(yè)務。根據(jù)反饋回來的日志片段信息,振蕩中設備上記錄了如圖2所示的診斷日志片段。圖2所示的日志中對應的回調函數(shù)地址(callback function address)為PHY_CALLBACK,即底層訪問的回調函數(shù),處理時間超過3 s,而VRRP的超時時間恰好為3 s,可以看到由于底層訪問持續(xù)超過3 s導致VRRP處理超時,出現(xiàn)雙主。分析網絡配置,可以看到網絡中配置了網管定時采集光模塊的信息,此時會調用PHY_CALLBACK讀取光模塊信息。可以確定,CS-002上收VRRP報文異常,VRRP周期性出現(xiàn)雙主的情況。
VRRP是一種選舉型容錯協(xié)議,當主機的下一跳路由器故障時,可以及時由另一臺路由器來代替,從而保持通信的連續(xù)性和可靠性。通過部署VRRP特性可以實現(xiàn)網關的冗余保護、流量負載分擔、決策設備主備路由實現(xiàn)業(yè)務聯(lián)動等。
圖3是普通單臺S93設備VRRP報文上送的模型,報文到達端口以后,命中相關ACL,通過接口板CPU上送到主控CPU。
U2000(iManager U2000MBB網管系統(tǒng))會對S93交換機進行定時監(jiān)控,每隔15 min(該時間間隔可以設置,當前設置的時間間隔為15 min),U2000就會向S93交換機發(fā)送一系列SNMP報文來獲取交換機的各種狀態(tài)信息。當S93交換機接收到來自U2000的每一條SNMP報文后,首先會將該SNMP報文上送到主用主控板,主控板的CPU會根據(jù)報文內容解析出網管具體需要獲取交換機哪一項狀態(tài)信息,如果該信息需要從交換設備上其他單板上獲取,主控板會向目標單板發(fā)送請求消息,其他單板獲取后將結果返回主控板。以網管訪問光模塊為例,當主控板的CPU接收到SNMP報文后,會根據(jù)報文解析出光模塊在哪一塊接口板上,并向該接口板發(fā)送請求消息,接口板接收到消息后,立即通過總線獲取光模塊的實時收光功率信息。接口板獲取光模塊收光功率的過程是一個I/O操作,因此獲取速度較慢,需要占用較長的CPU處理時間。當U2000觸發(fā)一次定時監(jiān)控時,網管系統(tǒng)需要獲取S93交換機設備上所有光模塊的各項狀態(tài)信息,接口板會連續(xù)讀取各個光模塊的信息,短時間內對接口板CPU的占用達到一個峰值。
VRRP協(xié)議采用競選的方法選擇主路由器,通過比較各臺路由器優(yōu)先級的大小,優(yōu)先級最大的路由器為主路由器,狀態(tài)變?yōu)?Master。若路由器的優(yōu)先級相同,則比較網絡接口的主IP地址,主IP地址大的就成為主路由器,并由其提供實際的路由服務。主路由器選出后,其他的路由器作為備份路由器,再通過主路由器發(fā)出的 VRRP報文監(jiān)測主路由器的狀態(tài),當主路由器工作正常時,會每隔一段時間發(fā)送一個VRRP組播報文,稱為宣告報文,以通知備份路由器,主路由器處于正常工作的狀態(tài)。如果組內的備份路由器長時間沒有接收到來自主路由器的報文,則將自己的狀態(tài)轉為Master,當組內有多臺路由器時,再次執(zhí)行競選。通過這一過程會將優(yōu)先級最大的路由器選成新的主路由器,從而實現(xiàn)VRRP的備份功能[3]。S93交換機采用實時性操作系統(tǒng),其任務調度機制主要基于優(yōu)先級的調度。任務調度時,操作系統(tǒng)會根據(jù)將CPU優(yōu)先分配給任務列表中優(yōu)先級最高的任務,任務在處理過程中不可被其他任務搶占,只在任務主動放權之后,才觸發(fā)下一次任務調度。
針對VRRP雙主存在的問題,主要是底層接口訪問光模塊占用CPU時間較長,沒有及時處理VRRP報文導致,所以考慮優(yōu)化底層訪問光模塊的機制。在設備獲取光模塊信息時,進行適當放權,避免獲取光模塊信息的任務長時間占用CPU,從而可以讓CPU及時處理VRRP報文,避免協(xié)議震蕩。另一方面,由于訪問光模塊任務放權,可能會導致網管獲取光模塊的總時間變長,但總體并不影響設備處理網管請求。將交換機網管訪問光模塊的機制進行優(yōu)化,進行適當放權,可能會導致網管獲取光模塊的總時間變長,但總體并不影響設備處理網管請求,可以滿足需求[4]。鑒于以上原因和需求,通過熱補丁的方式對V100R006SPC800版本中訪問光模塊進行優(yōu)化,但是根據(jù)任務調度機制,現(xiàn)網有可能會出現(xiàn)其他任務的影響,因此需在現(xiàn)網進行驗證,徹底解決該問題。
S9306產品V1R6C00SPC800版本VRRP震蕩補丁方案驗證,如圖4所示。
1)在CSW-01和CSW-02起VRRP,CSW-01為備。心跳報文通過CSW-03到CSW-02。物理環(huán)路通過加入不同VLAN破環(huán)。
2)用測試儀構造現(xiàn)網的組播業(yè)務,同時配置網管對CSW-01光口性能監(jiān)控使用5 min(設置時間間隔為15 min)一個周期。
在復現(xiàn)VRRP震蕩的環(huán)境下打上補丁,從一個時間點到另一個時間點觀察VRRP計數(shù),經過一天時間的觀察VRRP沒有發(fā)生震蕩[5]。
VRRP雙主問題的根源在于讀取光模塊沒有放權,導致VRRP沒有得到調度,在CPU處理上存在瓶頸,以下各種事件都可能觸發(fā)CPU調度忙:
1)大量的流量處理;
2)多業(yè)務處理導致CPU高。
為徹底解決VRRP雙主問題,針對上述觸發(fā)條件進行了充分驗證,確保了該解決方案在這些場景下VRRP能正常動作,滿足了網絡可靠性和安全性要求,在網絡層保證了系統(tǒng)的高度冗余,保持了通信的連續(xù)性和可靠性。