1 個網路接口,2 個網關

1 個網路接口,2 個網關

我有 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

根據評論,該方法是可靠的:

  1. 指示作業系統查看表 42,以對 a 為fwmark42 的任何資料包進行路由決策:ip rule add fwmark 42 table 42
  2. 將替代預設路由新增至該表中:ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
  3. 使用以下命令標記(在表中)源自使用者擁有的進程的mangle所有出站資料包(在鏈中) :OUTPUTkreator42iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42

此時,源自使用者的資料包kreator將根據需要透過表 42 中的替代預設路由進行標記和路由。iptables調整鏈的額外命令POSTROUTING是錯誤的,因為它將來源 IP 變更為輔助路由器的 IP,並且可能導致路由器丟棄資料包。

相關內容