无法 ping 同一 VPC 中不同子网中的虚拟机

Unable to ping VM in a different subnet residing in the same VPC

我有一个 VPC。

在该 VPC 中,我有 subnetA,CIDR 范围为 10.238.232.0/27。在同一个 VPC 中,我有另一个 subnetB,CIDR 范围为 192.168.10.0/28

vmA 部署在 subnetA,vmB 部署在 subnetB

vmA IP --> 10.238.232.9/32
vmB IP --> 192.168.10.2/32

当我从 vmA ping vmB 时,我得到的唯一响应是

# ping 192.168.10.2
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.

自从我通过控制台登录到 vmB 后,以下是我在 cosole 上看到的消息

[95544.705578] IPv4: martian source 192.168.10.2 from 10.238.232.9, on dev ens5
[95544.712774] ll header: 00000000: 42 01 c0 a8 0a 02 42 01 c0 a8 0a 01 08 00        B.....B.......
Oct 16 20:29:07 vmB kernel: [95544.705578] IPv4: martian source 192.168.10.2 from 10.238.232.9, on dev ens5
Oct 16 20:29:07 vmB kernel: [95544.712774] ll header: 00000000: 42 01 c0 a8 0a 02 42 01 c0 a8 0a 01 08 00        B.....B.......

为了排除故障,我允许 VPC 的所有入口和出口流量。我仍然无法 ping 跨子网。

在子网内 Ping 虚拟机工作得很好。

既然我也允许使用 FW 规则的所有流量,为什么我无法跨子网 ping 虚拟机?

在默认 VPC 中,有一些 pre-polutated firewall rules 允许子网之间进行内部通信,因为看起来您使用的是自定义 VPC,您需要根据需要手动创建防火墙规则,但是由于您创建了一个宽松的防火墙规则(允许Ingress/Egress范围内的所有实例0.0.0.0/0)应该足够了。

对于 discard/confirm 您的 VPC 中的任何问题,您可以利用 "Connectivity Tests" 来模拟您的实例之间的流量,输出将让您深入了解该问题,测试结果要么通过或失败,在这两种情况下,您都会看到此流程考虑了许多网络组件(防火墙规则、路由、对等互连、混合连接等),如果您的 GCP 配置中缺少某些内容,您会注意到,另一方面,如果测试结果为 PASS 那么问题很可能出在您的 VM 配置中,一个不错的选择是 运行 数据包捕获并查看数据包是否实际到达您的 VM 并被丢弃,例如,安装 tcpdump 和 运行 vmB中的如下命令(根据需要修改):

tcpdump -i ens5 src 10.238.232.9 icmp 

如果数据包被丢弃,请检查您的 iptables 和网络配置,如注释中所建议,命令 iptables -Lip route 的输出可能会有用。