
最近再次規劃機房搬遷案,由於需要更換核心交換器,各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。
# CX Switch,預設開啟
arp process-grat-arp

VRRP也會發送GARP

Gateway IP切換到不同設備上的最高追求
通常做核心交換器切換時,都會安排一段斷線時間,網路設備更換時基本上很難達到完美的不斷線。
通常在建置期,是可以大展手腳異動,斷線壓力很小。
不過要將既有的更替成新的,通常都已經佈滿服務使用,要大異動大斷線就沒有辦法那麼隨意,執行時需要先公告,要在公告時間內完成施作。
切換過程中,盡可能降低網路影響程度是技術與規劃能力的展現,力求減少斷線時間,最高境界甚至是「無縫切換」。
如果使用者感知不到,就可以安心且充滿信心操作。
雖然技巧普通,仍然可以用大量時間完成。
但是面對重要且具時間壓力與影響範圍要求的網路架構異動,一般的技術人員可能就不具備對應的能力能完成,建議尋求專業人員規劃與操作,確保能順利進行。
流程
參考文章:https://community.arubanetworks.com/discussion/manually-trigger-garp-on-cx
- 在 CX Switch 新增路由,確保切換後能正常。
- CX Switch 輸入指令「no ip icmp redirect」,確保在Nexthop與接收流量介面在同網段時,不會再額外發送icmp重導向封包,避免流量因此功能多複製一份。
- 在CX Switch新增SVI並設定Gateway IP與啟用,觸發GARP發送,讓部分設備能夠更新Gateway ARP。
- 在CX Switch再持續廣播發送ARP回應,加速其餘裝置能更新Gateway ARP。可用設備查看ARP,確認是否更改過。
- 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指令執行完成後,就完成切換。


# 在特權模式#下開始執行 ※記得複製到最後一行空白。
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。
