減少 VPN 集群中的靜態路由數量
我正在嘗試為具有固定 IP 的工作節點設置高可用性 OpenVPN 集群,無論它們連接到哪個 OpenVPN 伺服器。這是一項要求,因為事物專門綁定到該 IP 地址。我計劃在每個主節點上都有一個分佈式 etcd,我推送哪個主節點具有哪些工作節點(使用 OpenVPN 連接/斷開腳本)並更新然後相應地更新每個主節點的路由表(通過查看 etcd 密鑰)。
一切都將在 docker 容器中執行。
我已經繪製了我現在的情況圖,其中有 3 個主節點(M1、M2、M3)、3 個工作節點(w1、w2、w3)和“sidecar”容器(M2M1、M3M1、M3M2)來連接每個主節點給其他大師。
使用以下路由表設置一切正常,但需要更新主節點和邊車容器上的路由。除了標準的 iptables -A FORWARD 規則以確保在介面之間轉發流量,我只需要在工作節點上添加一個 iptables 規則,例如
iptables -A POSTROUTING -o tap0 -m iprange --dst-range 5.0.0.0-5.255.255.255 -j SNAT --to-source 5.0.0.1 -t nat
對於 w1,否則它將使用主 IP 地址發送數據包。我想知道是否可以在邊車容器上設置基於策略的路由以僅具有規則
"if it's coming from tap0 and it's from an ip in 5.0.0.0/8 then put it on eth0 towards the master node inside the same subnet"
,反之亦然"if it's coming from eth0 and it's in an ip in 5.0.0.0/8 then put it on tap0 towards the vpn gateway"
。如果我能做到這一點,那麼我只需要操縱主節點上的路由我是否需要用 iptables 標記數據包,然後設置 2 個路由表,一個對應於每個標記,然後在該表上設置路由?
我之前嘗試過架設一座橋,但我無法讓它工作。
(如果有比我相當複雜的設置更好的方法來設置具有固定 IP 的 vpn 集群,請告訴我)
編輯:
在下面的答案的幫助下,我測試了 M2M1 的以下語句,效果很好:
# Create the 2 tables to add specific routes on echo "2 toeth" >> /etc/iproute2/rt_tables echo "3 totap" >> /etc/iproute2/rt_tables # Everything coming from eth0 will be going to the totap table and everything from tap0 will be going to the toeth table ip rule add table totap iif eth0 ip rule add table toeth iif tap0 # Add the routes but on the specific table ip r r 5.0.0.0/8 via 192.168.1.1 table totap ip r r 5.0.0.0/8 via 172.30.2.2 table toeth
編輯2:
如果有人有興趣玩它,我已經建立了一個github repo
您可以使用
ip rule
(參見 參考資料man ip-rule
)來設置基於源或目標 IP 以及基於源或目標介面的特定路由表。它應該能夠實現你想要的。SELECTOR := [ from PREFIX ] [ to PREFIX ] [ iif STRING ] [ oif STRING ] ...