Cisco VPC peer-gateway 對直連BFD鄰居建立的影響

語言: CN / TW / HK

點選藍字

關注我們 FOLLOW US

作者簡介

馮亞偉

去哪兒網 NETOPS

2014年7月加入去哪兒網,擁有豐富的網路運維經驗,現負責公司IDC和骨幹傳輸網路的運維工作。

一、場景介紹

如下圖所示:兩臺思科 nexus交 換機通過 VPC 為伺服器提供雙上聯接入;伺服器通過bond0(主備模式)雙上聯到兩臺交換機上面。連線 SW1 的網絡卡為主用網絡卡,連線 SW2 的網絡卡為備用網絡卡;伺服器作為 k8s 節點需要與兩臺接入交換機建立 iBGP ,為了縮短 BGP 的收斂時間用單跳 BFD 進行鏈路故障檢測。兩臺接入交換機使用 interface vlan IP 與 Server 建立 BGP 和 BFD 鄰居。Server 與 SW2 的流量需要經過 VPC peer-link。

二、問題介紹:

Server與SW2的BGP正常建立,BFD鄰居不能正常建立。

三、問題處理

裝置IP及MAC地址:

如下圖所示:通過抓包,發現 SW2 收到 server 的 BFD 資料包後,給 server 回覆了一個 ICMP port unreachable 訊息,說明 SW2 沒有處理 server 的 BFD 資料包。

如下圖:再次仔細觀察發現, SW2 收到的來自 server 的 BFD 資料包的 TTL 值是254(正常應該是255),資料包的源 MAC 地址是 SW1 的 MAC 地址。說明資料包在經過 SW1 時, SW1 對它進行了三層轉發,因此 TTL 值才會被減1,源 MAC 地址被替換。

通過查閱 Cisco NX-OS BFD 的文件發現出於安全考慮,思科交換機在處理直連 BFD 的資料包之前會先檢查資料包的 TTL 值,如果不是255,則不會對資料包進行處理。SW2看到來自 server 的 BFD 資料包的 TTL 值為254,所以沒有處理 BFD 資料包,然後給 server 回覆了一個ICMP埠不可達訊息。

那麼,server,SW1,SW2 都屬於同一網段,為什麼 SW1 要對資料包進行三層轉發呢?要弄清楚這個問題,我們首先需要了解一下 VPC peer-gateway 的功能:
VPC peer-gateway 使交換機在收到資料包的目的MAC地址是它的 vpc peer 的 MAC 地址時,充當資料包的閘道器對其進行三層轉發,以減少了跨 VPC peer-link 的二層流量。這是一種保護 VPC Peer-link 的機制。啟用 vpc peer-gateway 後,交換機複製本地 interface vlan MAC 地址給它的 vpc peer,複製過去的 MAC 地址在它的 vpc peer 的MAC地址表中使用 G flag(Gateway flag)進行標記。
我們在實驗環境中對vpc peer-gateway 進行了觀察:

測試拓撲同場景介紹中的拓撲。
測試裝置:

測試1:SW1 啟用 vpc peer-gateway, SW2 不啟用 vpc peer-gateway,檢視兩臺交換機的 MAC 地址表。

如下圖所示:在 SW1 上啟用 vpc peer-gateway 後,其 interface vlan 400 的 MAC地址 00ea.bd5f.dfa7 在 SW2 的 MAC 地址表中有 G 標記。
傳送到 SW1的interface vlan 400 的 MAC 地址的資料包在經過 SW2 時,SW2 會對資料包進行三層轉發,資料包的源 MAC 地址會被替換為 SW2 的 MAC 地址 6c8b.d3ca.ff67,且 TTL 值會被減1。
在SW2上未啟用vpc peer-gateway,其interface vlan 400 的MAC地址 6c8b.d3ca.ff67 在 SW1 的 MAC 地址表中沒有 G 標記。
傳送到 SW2 的 interface vlan 400 的 MAC 地址的資料包在經過 SW1 時,會通過二層轉發經過 vpc peer-link ,源 MAC 地址不會改變,TTL 值也不會減1。
而在 SW1 和 SW2上 HSRP VIP 的虛擬 MAC 地址 0000.0c07.ac01 都有 G 標記。所以,傳送給 HSRP VIP 的資料包在 SW1 和 SW2 上都會進行本地三層轉發。

測試2:SW1 關閉vpc peer-gateway , SW2 啟用 vpc peer-gateway ,檢視兩臺交換機的 MAC 地址表。

如下圖所示:SW1 關閉 vpc peer-gateway 以後,其 interface vlan 400 的 MAC 地址在 SW2 的MAC地址表中的G標記消失;
SW2 啟用 vpc peer-gateway 以後,其 interface vlan 400 的 MAC 地址在 SW1 的 MAC 地址表中出現 G 標記;而在 SW1 和 SW2 上 interface vlan 400 的 HSRP VIP 的虛擬MAC地址依然都有 G 進行。

測試3:SW1 和 SW2 都關閉 vpc peer-gateway ,檢視兩臺交換機的MAC地址表。

如下圖所示:在 SW1 和 SW2 上關閉了vpc peer-gateway 以後,其 interface vlan 400 的 MAC 地址在它的 vpc peer 的 MAC 地址表中的 G 標記消失;
而 interface vlan 400 的 HSRP VIP 的虛擬 MAC 地址在兩臺 vpc peer 的 MAC 地址表中仍然有 G 標記,所以在關閉了 vpc peer-gateway 以後,以 HSRP VIP 為閘道器的要去往 vpc 域外或者其它 vlan 的資料包,在兩臺 vpc 對等體上仍然會進行本地三層轉發,而不會出現HSRP standby 裝置將去往 HSRP VIP MAC 地址的資料包通過 vpc peer-link 二層轉發到 HSRP active 裝置的現象。

測試結論:

vpc peer-gateway 的啟用會讓本地 interface vlan 的 MAC 地址在它的 VPC peer 的MAC 地址表中有 G 標記。交換機對傳送到有 G 標記的 MAC 地址的資料包進行三層轉發。
不管 vpc peer-gateway 是否啟用,HSRP VIP 的虛擬 MAC 地址在兩臺 vpc 對等體的MAC地址表中都有 G 標記,兩臺 vpc 對等體在不啟用 vpc peer-gateway 的情況下,也會本地三層轉發目的 MAC 地址是 HSRP VIP 虛擬 MAC 地址的資料包。

四、處理結果:

現在我們知道是 vpc peer-gateway 功能使 SW1 對 server 傳送給 SW2 的 BFD 資料包進行了三層轉發。 在關閉了 vpc peer-gateway 功能以後,S W1 層轉發 serve r 傳送給 SW2 的 BFD 資料包。 資料包的 TTL 不再被減 1,server 與 SW2 的 BFD 鄰居正常建立。

五、注意事項與參考文獻

在測試時發現 vpc peer-link 不使用 LACP 時,也會影響跨 vpc peer-link 的 BFD 鄰居正常建立,建議作為 vpc peer-link 的 port-channel 使用 LACP 協議。

BFD RFC:https://datatracker.ietf.org/doc/html/rfc5880

Cisco NX-OS bfd:https://www.cisco.com/c/en/us/td/docs/switches/datacenter/nexus3600/sw/92x/unicast/configuration/guide/b-cisco-nexus-3600-nx-os-unicast-routing-configuration-guide-92x/b-cisco-nexus-3600-nx-os-unicast-routing-configuration-guide-92x_chapter_010000.pdf

Cisco VPC Peer-gateway:https://community.cisco.com/t5/switching/vpc-peer-gateway/td-p/2726210

BFD over LACP portchannel:https://www.cisco.com/c/en/us/support/docs/switches/nexus-7000-series-switches/200871-BFD-for-BGP-in-AdminDown-State-on-Nexus7.html