切換 Gateway IP 到 CX Switch 與Gratuitous ARP

切換 Gateway IP 到 CX Switch 與Gratuitous ARP

Gateway IP從Fortigate切換到CX Switch上,過程不掉Ping

最近再次規劃機房搬遷案,由於需要更換核心交換器,各VLAN Gateway IP都在舊核心交換器上,到時,新舊並行,Endpoint ARP紀錄中Gateway IP對應的MAC就要從舊核心交換器變成新核心交換器,才能讓網路體驗不中斷。

萬一Endpoint 的ARP沒有順利轉換,這樣Endpoint仍會把跨網段封包丟往舊核心交換器上,直到ARP Cache被清除或是得到新Gateway IP設備的ARP回應之前,Endpoint都是無網際網路能力,過程約在數秒或是分鐘。

之前在做L3切換時,有先預期到以上狀況,實際卻沒有發現有太大異狀,Endpoint有順利更新ARP中的Gateway IP,這是由於Gratuitous ARP作用。

Gratuitous ARP – Definition and Use Cases – Practical Networking .net

CX Switch的IP異動或是啟用時,會發出GARP去宣告變化後IP的MAC(即為CX Switch),讓Endpoint可以更新ARP,可以避免等到ARP過期才更新。

CX Switch的GARP指令

CX Switch預設開啟,除了介面IP,其餘像是VRRP IP或是Active Gateway IP等,也都會宣告GARP。

arp process-grat-arp

# CX Switch,預設開啟
arp process-grat-arp

VRRP也會發送GARP

Gateway IP切換到不同設備上的最高追求

通常做核心交換器切換時,都會安排一段斷線時間,網路設備更換時基本上很難達到完美的不斷線。

通常在建置期,是可以大展手腳異動,斷線壓力很小。

不過要將既有的更替成新的,通常都已經佈滿服務使用,要大異動大斷線就沒有辦法那麼隨意,執行時需要先公告,要在公告時間內完成施作。

切換過程中,盡可能降低網路影響程度是技術與規劃能力的展現,力求減少斷線時間,最高境界甚至是「無縫切換」。

如果使用者感知不到,就可以安心且充滿信心操作。

雖然技巧普通,仍然可以用大量時間完成。

但是面對重要且具時間壓力與影響範圍要求的網路架構異動,一般的技術人員可能就不具備對應的能力能完成,建議尋求專業人員規劃與操作,確保能順利進行。

流程

參考文章:https://community.arubanetworks.com/discussion/manually-trigger-garp-on-cx

  1. 在 CX Switch 新增路由,確保切換後能正常。
  2. CX Switch 輸入指令「no ip icmp redirect」,確保在Nexthop與接收流量介面在同網段時,不會再額外發送icmp重導向封包,避免流量因此功能多複製一份。
  3. 在CX Switch新增SVI並設定Gateway IP與啟用,觸發GARP發送,讓部分設備能夠更新Gateway ARP。
  4. 在CX Switch再持續廣播發送ARP回應,加速其餘裝置能更新Gateway ARP。可用設備查看ARP,確認是否更改過。
  5. Old Gateway Device移除IP或是停用介面,避免IP衝突。

※此流程可以做到無縫切換的可能性,也就是不掉Ping。

切換Gateway IP難點:ARP Cache

雖然有GARP,但不一定每個裝置能夠順利切換。

測試CX Switch Ping、Gateway 9004 Ping、手機 Ping、手機跑SpeedTest。

SpeedTest是延遲敏感,只要一有狀況,立刻掉速,掉速不打緊因為代表還能在測速期間切換Gateway IP ARP,而萬一測速中斷,那就能明顯感知到。

CX Switch支援GARP,所以基本上能做到秒切。

Gateway 9004 Ping在過程中,就沒辦法透過GARP順利切換,需要藉由一般ARP機制更新,更新時間範圍在數秒到三十秒左右都有可能。

嘗試使用其他設備Ping,就可能觸發ARP回覆,但是Ping的1秒間隔時間太久,而且除非傳輸有問題或是ARP ageout,不然不會去觸發ARP查詢。白話就是「不穩定」。

放棄用各種Ping觸發ARP更新的方案。

為了確保能穩定更新所有設備的ARP,在Linux系統有工具指令「Arping」可以使用,而且CX Switch可以進入到shell模式,因此可以直接用CX Switch用工具指令去發送ARP回應封包,藉此更新所有裝置ARP Cache,先切到CX Switch上,再關掉舊Gateway裝置的IP或介面。

進入CX Switch Shell中,使用Arping。

# 在特權模式#輸入,進入shell模式
start-shell
# 提升權限,變成/home/admin#位置
sudo su
# 查看 IP Profile List
ip netns 
# 查看 特定 IP Profile 的配置,找到要發送ARP的介面
ip netns <Profile> exec ifconfig
# 切換到特定IP Profile環境
ip netns <Profile> exec bash

arping建議指令

arping -I vlan100 -s 10.91.100.254 -UbA 10.91.100.254
參數功能說明
-I
指定網路介面,例如 -I eth0。不指定時可能會自動選擇。 ※大寫的I。
-c發送封包數量,例如 -c 5 發送 5 個 ARP 封包後結束。
-b僅顯示回應(不顯示發送的訊息)。
-A發送 ARP Reply(Gratuitous ARP),宣告「我的 MAC 對應某個 IP」。
-U發送 Unsolicited ARP(不經請求,直接送出 ARP 回覆)。常用來更新 ARP 快取,例如切換 Gateway。
-s指定來源 IP。例如 -s 192.168.1.1 搭配 -U,可偽裝成 Gateway 發送。

CX Switch切換並進入ARP回應的指令組合

舉例:

VLAN100的Gateway IP在Fortigate上,Gateway IP為10.91.100.254。
CX Switch透過shell模式,確認VLAN介面在swns配置檔中。

流程:直接在CX Switch輸入指令組合後,馬上關閉Fortigate Vlan100介面,等到CX Switch指令執行完成後,就完成切換。

Fortigate
Vlan 100的Client ARP Table
# 在特權模式#下開始執行 ※記得複製到最後一行空白。
conf t
int vlan 100
ip addr 10.91.100.254/24
no shutdown
end
start-shell
sudo su
ip netns exec swns bash
arping -I vlan100 -c 20 -s 10.91.100.254 -UbA 10.91.100.254
exit 
exit 
# 測試裝置 Gateway 9004 指令 ※記得複製到最後一行空白。
show clock
show arp vlan 100
ping 168.95.1.1 count 1000
show clock
show arp vlan 100

無縫切換的驗證截圖

Gateway9004的ping是接收到就馬上再傳遞下一個,因此可視為連續且敏感的流量。

在切換前,ARP為Fortigate 00:09:0f,「過程不掉Ping」,切換後,ARP變成CX Switch。