我正在玩 AWS EC2 实例,遇到了一个奇怪的问题。
我创建了一个具有 2 个网络接口的 EC2 实例(实例 A),以下是路由表:
default via 172.31.32.1 dev eth0
default via 172.31.32.1 dev eth1 metric 10001
169.254.169.254 dev eth0
172.31.32.0/20 dev eth0 proto kernel scope link src 172.31.42.99
172.31.32.0/20 dev eth1 proto kernel scope link src 172.31.47.72
现在我尝试使用以下命令从接口 eth0 ping 到 eth1:,ping -I eth0 172.31.47.72
但没有成功。然后我使用 tcpdump 监听 eth0 上的 icmp 流量并得到以下结果:
23:52:05.741380 IP ip-172-31-42-99 > ip-172-31-47-72: ICMP echo request, id 26033, seq 1, length 64
23:52:06.772710 IP ip-172-31-42-99 > ip-172-31-47-72: ICMP echo request, id 26033, seq 2, length 64
23:52:07.796705 IP ip-172-31-42-99 > ip-172-31-47-72: ICMP echo request, id 26033, seq 3, length 64
23:52:08.820704 IP ip-172-31-42-99 > ip-172-31-47-72: ICMP echo request, id 26033, seq 4, length 64
23:52:09.844704 IP ip-172-31-42-99 > ip-172-31-47-72: ICMP echo request, id 26033, seq 5, length 64
看起来 eth1 收到了 ICMP 请求,但 eth0 没有收到任何响应。当我尝试从 eth1 ping 到 eth0 时,也发生了类似的失败。我的 iptables 规则默认设置为“接受所有流量”。
---调试 1:执行自我 Ping---
ping -I eth0 172.31.42.99
ping -I eth1 172.31.47.72
两者都有效!!!
---调试 2:在同一子网内创建另一个实例---
我创建了另一个 EC2 实例(实例 B),其私有 IP 为 172.31.42.86。通过两个接口从实例 A 对实例 B 进行 ping 操作:
ping -I eth0 172.31.42.86
ping -I eth1 172.31.42.86
两者都有效!!!
从实例 B ping 实例 A 的两个接口:
ping 172.31.42.99
ping 172.31.47.72
两者都有效!!!
有人知道原因吗?
答案1
为什么要从一个接口 ping 到另一个接口?
如果你想测试它们创建一个单独的实例并从那里对它们两个进行 ping 操作。
请记住,VPC 网络不是您通常使用的以太网段,而是每个设备一个段的路由网络。有时,在交换网络上通常可以工作的技巧可能很难实现。