我正在嘗試路由來自 docker 網路的流量...我已啟動並運行 Wireguard,與文件中根據目的地透過 VPN 路由所有流量的範例不同,我嘗試僅路由部分流量基於來源網路、策略路由,然後基於目的地。
本質上,我希望來自 10.30.0.0(docker 橋接網路)的所有流量都通過 wg0 接口,但返回同一網路或我的 LAN 的流量除外。所以本質上只是出站網路流量。
我讓它工作......有點......使用靜態路由。
post-up ip rule add from 10.30.0.0/16 table 200
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200
post-up ip route add 192.168.0.0/16 via 192.168.0.1 table 200
post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200
對來自 10.30.0.0 預設路由的所有流量使用表 200 是透過 wg0。回退路線是一個黑洞,萬一 wg0 宕機時的終止開關。
接下來的兩個路由負責路由 wg0 周圍的任何內部內容,否則容器無法在網路上相互通信,或無法存取任何 webgui。這非常有效。
除了我在 /etc/network/interfaces.d/wg0 中呼叫這些路由,以便使用正確的路由建立並在啟動時啟動介面。除了這條路線之外,一切都很好:
post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200
它失敗是因為當 wg0 出現時 docker 橋尚未啟動,因此它無法建立路由,因為網關遺失。目前,我將其組合在一起,並在 cron 中使用“@reboot”在 docker 網路啟動後啟動此路由。
有更優雅的解決方案嗎?我想標記來自10.30.0.0 的所有資料包,這些資料包不是發送到10.30.0.0 或192.168.0.0 的,並且(iptables -s 10.30.0.0/16!-d 192.168.0.0/16 等)必須以避免使用那條路,但我一生都無法弄清楚。
感謝任何幫助
答案1
我透過呼叫這些本地路由的主表來解決這個問題,而不是在表 200 中為它們提供路由
post-up ip rule add from 10.30.0.0/16 table 200
post-up ip rule add from 10.30.0.0/16 to 192.168.0.0/16 table main
post-up ip rule add from 10.30.0.0/16 to 10.30.0.0/16 table main
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200