HA 路由器的 NAT44 工作階段同步

NAT44SessionSync 是一個資源,用於在共享 LAN 側閘道角色的 2 台
routerd 節點間,將 active 節點的 NAT44 conntrack 工作階段同步到 standby
節點。初始實作為快照方式。routerd 按選定的 SNAT 位址取得本機
conntrack 表,並將匹配的項目還原到各 target。
通常透過 spec.when 確保僅 active 節點運行。在 VRRP 架構中,
以本機 VirtualAddress 的 role 作為條件是基本做法。
同步目標 NAT 規則
參照持有要同步的 SNAT 位址的 NAT 規則。動態 SNAT 位址從
NAT44Rule 的 status 讀取。因此,在 session sync 啟用之前,
NAT44 controller 需要已解析 snatAddress。
- apiVersion: net.routerd.net/v1alpha1
kind: NAT44SessionSync
metadata:
name: dslite-abc-sessions
spec:
mode: snapshot
interval: 2s
natRules:
- NAT44Rule/lan-to-dslite-a
- NAT44Rule/lan-to-dslite-b
- NAT44Rule/lan-to-dslite-c
excludeNatRules:
- NAT44Rule/lan-to-dslite-ra
targets:
- name: standby
host: routerd-standby.lan.example
user: routerd
restoreCommand: [sudo, conntrack]
when:
state:
VirtualAddress/lan-vip.role:
equals: master
如果位址是固定的,可以透過 snatAddresses 直接指定。
spec:
snatAddresses: [192.0.0.2, 192.0.0.3, 192.0.0.4]
還原機制
controller 執行以下操作:
conntrack --dump -o extended -n <snat-address>
extended 輸出包含 conntrack mark。routerd 將每行轉換為
delete-then-insert 還原指令碼,透過 SSH 傳送到 target。
維持 ct mark 對於將現有流保持在相同的出口路徑上至關重要。
restoreCommand 的預設值為 [conntrack]。如果 target user 需要
權限提升,請指定 [sudo, conntrack]。
確認
routerctl describe NAT44SessionSync/dslite-abc-sessions
routerd serve --controllers nat44-session-sync --config router.yaml
當 spec.when 為 false 時,狀態為 Pending / WhenFalse。當參照的
NAT44Rule 尚未解析 snatAddress 時,狀態為 Pending /
SNATAddressPending。