使用 IPTables 在 AWS 中将目标 NAT 到同一网络

使用 IPTables 在 AWS 中将目标 NAT 到同一网络

在 AWS 中,我们在同一个子网/VPC 中有 3 个实例。我们希望客户端实例向第二个分析实例发出 DNS 请求,然后该分析实例将请求转发到运行 DNS 服务的第三个实例。然后 DNS 服务应向分析实例提供响应,然后分析实例应响应客户端。

目的是为了让分析实例可以拦截客户端和 DNS 实例之间的流量以进行分析。

客户端实例 -> 分析实例(NAT) -> DNS实例

当前设置允许客户端实例通过分析实例向 DNS 实例发送 DNS 请求。DNS 实例会响应分析实例,tcpdump但客户端实例永远不会收到来自分析实例的响应。

我们在 AWS 中对执行 NAT 的分析实例进行了源/目标检查,并且已关闭。

我们首先在分​​析实例上启用转发:

sudo sysctl -w net.ipv4.ip_forward=1

然后我们将以下 IPTables 规则添加到分析实例

sudo iptables -A FORWARD -p udp --dport 53 -d 192.168.1.151 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.151
sudo iptables -t nat -A POSTROUTING -d 192.168.1.151 -s 192.168.1.156 -p udp --dport 53 -j SNAT --to 192.168.1.213

还尝试了其他POSTROUTING规则,例如:

sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -p udp -d 192.168.1.151 --dport 53 -j SNAT --to-source 192.168.1.213
sudo iptables -t nat -A POSTROUTING -p udp -d 192.168.1.151 --dport 53 -j MASQUERADE

所有这些结果都一样,客户端实例从未收到 DNS 答复。想想是什么可能阻止分析实例返回响应?

答案1

问题是 FORWARD 链不允许返回流量,因此需要以下规则:

sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

完整的解决方案如下:

sudo iptables -A FORWARD -p udp --dport 53 -d 192.168.1.151 -j ACCEPT
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.151
sudo iptables -t nat -A POSTROUTING -p udp --dport 53 -j SNAT --to 192.168.1.213

相关内容