首页 > 解决方案 > 无法 ping 位于同一 VPC 中的不同子网中的虚拟机

问题描述

我有一个 VPC。

在该 VPC 中,我subnetA的 CIDR 范围为10.238.232.0/27. 在同一个 VPC 中,我有另一个subnetB具有 CIDR 范围的 VPC 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 虚拟机?

标签: google-cloud-platformgoogle-compute-engine

解决方案


在默认 VPC 中,有一些预污染的防火墙规则允许子网之间进行内部通信,因为您似乎正在使用自定义 VPC,您需要根据需要手动创建防火墙规则,但由于您创建了一个许可防火墙规则(允许范围内所有实例的入口/出口0.0.0.0/0)应该足够了。

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

tcpdump -i ens5 src 10.238.232.9 icmp 

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


推荐阅读