Routing

根據登錄使用者通過特定冗餘路由路由流量的最佳方式?

  • January 8, 2022

我有一台 Ubuntu 20.04 機器,有 2 個乙太網介面,每個介面有 2 個 IP 地址。它是一個 AWS EC2 實例,4 個 IP 地址中的每一個都通過 NAT 附加了一個 EIP。兩個介面都連接到同一個內部子網。設置如下所示:

EC2機器:

- eni1:

  • 私有 IP1 -> 公共 IP1
  • 私有 IP2 -> 公共 IP2

- eni2:

  • 私有 IP3 -> 公共 IP3
  • 私有 IP4 -> 公共 IP4

所有 4 個地址都可以從外部到達,所以看起來一切都很好。但是,對於目前的傳出流量,始終使用私有 IP1(因此公共 IP1)。我想指定單個 SSH 使用者使用特定的 IP 地址,因此在與 Internet 上的服務通信時,它們將來自相應的公共 IP,即

使用者 1 -> 私有 IP1

使用者 2 -> 私有 IP2

使用者 3 -> 私有 IP3

使用者 4 -> 私有 IP4

實現此結果的最佳方法是什麼?

在傾注了很多小時之後,我終於自己解決了這個問題。最後,我通過添加這樣的 ip 規則使其工作:

sudo ip rule add uidrange 1000-1001 lookup if1
sudo ip rule add uidrange 1002-1004 lookup if2

然後像這樣添加 iptables 後路由規則:

$ sudo iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o interface1 -m owner --uid-owner 1000 -j SNAT --to-source IP1
-A POSTROUTING -o interface1 -m owner --uid-owner 1001 -j SNAT --to-source IP2
-A POSTROUTING -o interface2 -m owner --uid-owner 1002 -j SNAT --to-source IP3
-A POSTROUTING -o interface2 -m owner --uid-owner 1003 -j SNAT --to-source IP3

if1 和 if2 是我的自定義路由表,其中包含相應的預設路由。效果很好!也許這對將來的某人有用:)

實現這一目標的最佳方法是將 EC2 實例複製為四個實例,為每個複製分配一個 IP 地址,並讓每個使用者只使用具有他或她應該使用的 IP 地址的機器。

引用自:https://serverfault.com/questions/1089334