如果没有 NAT 规则,则无法从网络命名空间 Ping 到另一个 EC2 实例

如果没有 NAT 规则,则无法从网络命名空间 Ping 到另一个 EC2 实例

我有以下设置。

我已经设置了两个 EC2 实例。我在两台机器上都添加了安全组规则以允许 ICMP 流量,并且两台机器都可以互相 ping 通。

在一台机器上,我创建了两个网络命名空间bluered。在这台机器上,我还使用名为的桥接接口设置了一个虚拟交换机v-net-0,并将命名空间连接到它。我分别将192.168.15.2和分配192.168.15.3给蓝色和红色命名空间。

我已将192.168.15.5其分配给v-net-0,因此我可以从第一个实例 ping 到命名空间。然后我发出了ping 192.168.15.2ping 192.168.15.3来 ping 蓝色和红色命名空间。它运行成功。

现在我需要从我的蓝色命名空间 ping 第二个实例。因此,我使用命令在蓝色命名空间中添加了一个路由表条目。ip netns exec blue ip route add 172.31.80.0/20 via 192.168.15.5此外,我在第一台机器上启用了 IP 转发,并使用命令添加了 NAT 规则iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j MASQUERADE

然后我发布了ip netns exec blue ping 172.31.94.241。因此,正如预期的那样,一切都成功了。

因此,根据我的理解,我们需要第一台机器中的 NAT 规则来向第二台机器指示流量来自第一台机器的 IP 地址。如果我错了,请纠正我。

我的问题是,我可以从蓝色命名空间 ping 第二台机器,而无需添加 NAT 规则。我的想法是,如果我们在第二台机器中添加一个路由条目,目的地为192.168.15.0/24,蓝色命名空间可能能够在没有 NAT 的情况下 ping 第二台机器。我试过了,但没有成功。

或者这个任务需要 NAT 吗?

感谢任何澄清和解决方案!!!

答案1

我相信您的所有分析都是正确的,我怀疑问题出在细节上。如果您的命名空间有ip route add 172.31.80.0/20 via 192.168.15.5,您的第二个 EC2 实例也有ip route add 192.168.15.0/24 via 172.31.X.Y(添加第一个 EC2 实例的 IP 地址),并且第一个实例上启用了 IP 转发,那么您应该一切就绪了。

由于您提到设置规则以允许实例相互 ping ,我怀疑防火墙阻止了您的 ping ,要么是因为您不允许子网192.168.15.0/24,要么是因为 EC2 架构实际上由于某种原因不允许该链接上的其他子网。

为了进行调试,我建议tcpdump icmp在 2 个实例上运行,以查看 ping 请求的进展情况,以及是否生成了任何回复。您也可以做同样的事情,但将第二个实例的 ping 发送到第一个实例上的命名空间,以查看请求是否到达第一个实例。祝你好运!

相关内容