需要为 NAT 实例设置正确的 iptable 规则,以防止私有子网 EC2 实例传出流量出现环回

需要为 NAT 实例设置正确的 iptable 规则,以防止私有子网 EC2 实例传出流量出现环回

我的 AWS 架构有一个带有 NAT 实例的公共子网。它将某些端口上的流量转发到托管在单独私有子网中的 EC2 实例。

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

但我还需要为我的私有 EC2 实例提供传出互联网访问。

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 的域请求没有传递到我的实例。

答案1

你的预路由必须排除本地流量,即

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 10.0.1.0/24。这确保仅针对来自外部的流量评估规则。

希望有帮助:)

相关内容