Poema IX 升級之旅
Poema IX 是一個非營利的分部式虛擬 IX,讓散佈在各地的節點透過 L2 overlay 連成一個大二層交換網路,提供 BGP 實驗交流和學習的平台。 最一開始,內網用的是 FRR 的 OSPF + VXLAN + EVPN,很標準的資料中心做法 隧道疊了三層:最內層 VXLAN 做 L2 overlay,中間包一層 GRE,最外面再套 WireGuard。 為什麼要這麼多層呢? 套 GRE 是為了借用 GRE 的 nopmtudisc 選項(就是那個 DF bit 的控制)。內網可以跑 MTU 9000 的 jumbo frame,GRE 層負責切片再送出去。OSPF 跑在 GRE 層上面,用來保證節點之間的可達性 EVPN 則靠 VXLAN 做 MAC 學習和轉發。 再來,節點是 NAT 環境,所以外面再套一層 WireGuard,把整個東西變成 UDP,順便加密。 這套架構功能上是 work 的。EVPN 自動學 MAC、自動填 FDB、OSPF 自動選路, 但是速度很慢 以前為了相容性,IX LAM MTU 9000,靠 GRE 層切片。三層封裝疊起來 overhead 不小,還有切片重組的開銷 現在回頭看,為了一個虛無縹緲的「相容性」犧牲速度,實在不值得 能不能只用一層 VXLAN? 我開始想:能不能把 GRE 和 WireGuard 都拿掉,只用純 VXLAN? 問題是,一般的 VXLAN 要求所有節點都能互相直連。傳統做法是靠上層 OSPF 來保證可達性。但我們的節點散佈在公網上,顯然不可能在公網直接跑 OSPF。 自己跑 OSPF 就又要多一層隧道——GRE 或 WireGuard 層跑 OSPF,VXLAN 層跑 EVPN。這不就繞回原點了嗎? 所以我在想:能不能 只靠 VXLAN 本身 ,不依賴 OSPF,做到依據 MAC 轉發的效果? 本地測試了一下,發現 只要 bridge 上面的 vxlan port 設了 hairpin,就可以做到轉發 。封包從一個 VXLAN port 進來,bridge 查 FDB,如果目標 MAC 在另一個 VXLAN port 後面,就從那個 port 轉發出去。不需要所有節點全互連,只要 FDB 填對了,中間節點可以幫忙轉發。 但是馬上就碰到一個新問題。 廣播風暴 L2 有一個 ...