Amazon-Ec2

在網關節點內,如何始終如一地通過特定介面將流量路由到外部世界?

  • November 13, 2021

我有帶有兩個網卡(eth0 和 eth2)的 linux ec2 實例。兩個網卡都附有公共 IP,並且能夠上網。這個 linux 實例對我來說充當網關節點,轉發來自無法訪問 Internet 的私有子網中的 ec2 的流量。

能夠將來自私有子網中的 ec2 實例的流量轉發到公共子網中的此網關實例。網關實例中的所有流量都在 eth0 上接收。現在我希望能夠通過 eth1 而不是 eth0 上網。我想這樣做是因為我希望外界將 eth1 的 IP 視為源 IP。

執行這些步驟可以幫助我實現這一目標

ip route add 10.0.0.0/23 <subnet of gateway cidr> dev eth2 table 2
ip rule add from <private ec2 instance's ip> table 2
ip route add default via 10.0.0.1 dev eth2 table 2
ip route flush cache

iptables -A FORWARD --in-interface eth0 -j ACCEPT #accepts traffic on eth0
iptables --table nat -A POSTROUTING --out-interface eth2 -j MASQUERADE #forwards the traffic outside via eth2

使用此設置,當我在私有子網中的 ec2 實例之外(通過網關節點)捲曲時,我看到了我期望看到的內容(即外界看到請求來自 eth1 的 ip),但是 curl 請求需要一個很長一段時間(有時甚至超時)。我會說 10 個請求中約有 5 個成功。

我在這裡想念什麼?

謝謝凱

顯然,規則的順序很重要。我可以通過這樣做來指定規則的順序。

ip 規則添加首選項 512 表 2

一旦我得到正確的排序,我就能夠通過特定的介面正確地退出。

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