我的 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
。这确保仅针对来自外部的流量评估规则。
希望有帮助:)