在正確的網關上回應請求

在正確的網關上回應請求

我有一個非常簡單的場景。不幸的是我沒有找到符合這個問題的答案。我有兩個用於不同 WAN 的 Linux 路由器(=網關)(192.168.0.70 和 192.168.0.80)。兩者都將連接埠 50000 轉送到 Linux 伺服器 192.168.0.60。伺服器只有一個接口,預設網關為192.168.0.70。無需額外配置,您就會出現以下行為:

透過 192.168.0.70 傳入的請求 -> 回應工作(由於預設閘道)

透過 192.168.0.80 傳入的請求 -> 無法正常運作,因為回應需要 192.168.0.70

如何管理透過 192.168.0.80 發送的請求透過 192.168.0.80 發回?

答案1

我們必須用標記來標記新連接,然後根據標記區分傳出資料包,並使用兩個路由表中的任何一個將它們路由到適當的網關。您可能必須載入 CONNTRACK 模組,

          modprobe ip_conntrack

我們將 MAC70 稱為網關 192.168.0.70 的 MAC 位址,將 MAC80 稱為 192.168.0.80 的 MAC 位址。然後

       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC70 -p tcp --dport 50000 -j CONNMARK --set-mark 1
       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC80 -p tcp --dport 50000 -j CONNMARK --set-mark 2

這兩條規則用兩個簡單的標記來標記傳入的新連接(對於 TCP 協議,如果需要,請修改)。IE屬於該初始資料包的所有後續類型為 ESTABLISHED、RELATED 的資料包將具有相同的標記。

只能根據網關的 MAC 位址進行區分,因為每個封包的來源 IP 位址是開始連線的客戶端的 IP 位址,不是網關的那個。因此,這僅適用於乙太網路連接,因為 wifi 幀不攜帶 MAC 位址。

現在

       ip rule add fwmark 1 table router70
       ip rule add fwmark 2 table router80

這兩個命令指定使用哪個路由表(兩個),取決於連接/資料包標記。

現在我們設定兩個路由表:

        echo 200 router70 >> /etc/iproute2/rt_tables
        echo 201 router80 >> /etc/iproute2/rt_tables
        ip route add 192.168.0.0/24 dev eth0 table router70
        ip route add 192.168.0.0/24 dev eth0 table router80
        ip route add default via 192.168.0.70 table router70
        ip route add default via 192.168.0.80 table router80

這假設您的乙太網路卡名為 eth0,否則請相應更改。所有其他連接埠和/或協定的路由仍然是您已有的,無論是什麼。

你完成了。

相關內容