
我有 2 個透過乙太網路線連接的路由器。輔助路由器的 DHCP 伺服器已停用,IP 位址為 192.168.1.2。兩個路由器都有不同的網路。如果我建立另一個具有較低指標的預設網關,那麼我可以使用第二個網路作為主要網路。
ip route add default via 192.168.1.2 dev eno1 metric 10
它按預期工作。
現在我嘗試同時使用兩個網路。是否可以建立一個linux使用者並透過輔助網關發送所有使用者流量?我嘗試了以下命令:
useradd kreator
ip rule add fwmark 42 table 42
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o eno1 -m mark --mark 42 -j SNAT --to-source 192.168.1.2
然後我跑了sudo -u kreator ping google.com
,它沒有記錄任何東西。我缺什麼?
我在 Arch linux 上,網路管理員是 NetworkManager 守護程式。
答案1
根據評論,該方法是可靠的:
- 指示作業系統查看表 42,以對 a 為
fwmark
42 的任何資料包進行路由決策:ip rule add fwmark 42 table 42
- 將替代預設路由新增至該表中:
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
- 使用以下命令標記(在表中)源自使用者擁有的進程的
mangle
所有出站資料包(在鏈中) :OUTPUT
kreator
42
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
此時,源自使用者的資料包kreator
將根據需要透過表 42 中的替代預設路由進行標記和路由。iptables
調整鏈的額外命令POSTROUTING
是錯誤的,因為它將來源 IP 變更為輔助路由器的 IP,並且可能導致路由器丟棄資料包。