Routing
根據登錄使用者通過特定冗餘路由路由流量的最佳方式?
我有一台 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 地址的機器。