Iptables

NAT 實例需要正確的 iptable 規則,以防止私有子網 EC2 實例傳出流量環回

  • March 3, 2019

我的 AWS 架構有一個具有 NAT 實例的公共子網。它將某些埠上的流量轉發到我在單獨的私有子網中託管的 EC2 實例。

sudo iptables -t nat -A PREROUTING -p tcp –dport 80 -j DNAT –to-destination 10.0.1.126:80

但我還需要為我的私有 EC2 實例提供傳出 Internet 訪問。

sudo iptables -t nat -A POSTROUTING -o eth0 -s 10.0.1.0/24 -j MASQUERADE

這導致我的私有 EC2 實例生成的所有請求都循環回自身。需要修改哪個規則來防止這種行為,並且私有 EC2 實例生成的傳出流量被發送而不被路由回?

更新:我添加了目標 ip 作為埠 80 的公共 ip

sudo iptables -t nat -A PREROUTING -p tcp -d xx.xx.xx.xx –dport 80 -j DNAT –to-destination 10.0.1.126:80

雖然我的傳出網路呼叫沒有被環回,但我的基於 dns 的域請求沒有傳遞給我的實例。

您的PREROUTING必須排除本地流量,即

iptables -t nat -A PREROUTING -p tcp ! --source 10.0.1.0/24 --dport 80 -j DNAT --to-destination 10.0.1.126:80

注意source :前的驚嘆號! --source 10.0.1.0/24。這可確保僅針對來自外部的流量評估規則。

希望有幫助:)

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