google-cloud-platform - 无法 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 虚拟机?
解决方案
在默认 VPC 中,有一些预污染的防火墙规则允许子网之间进行内部通信,因为您似乎正在使用自定义 VPC,您需要根据需要手动创建防火墙规则,但由于您创建了一个许可防火墙规则(允许范围内所有实例的入口/出口0.0.0.0/0
)应该足够了。
要丢弃/确认 VPC 中的任何问题,您可以利用“连接测试”来模拟实例之间的流量,输出将为您提供有关问题的见解,测试结果是通过或失败,在这两种情况下,您都将考虑到许多网络组件(防火墙规则、路由、对等互连、混合连接等),请参阅此流程,如果您的 GCP 配置中缺少某些内容,您会注意到它,另一方面,如果测试结果为 PASS,那么很可能问题存在于您的虚拟机配置中,一个不错的选择是运行数据包捕获并查看数据包是否实际到达您的虚拟机并被丢弃,例如,安装 tcpdump 并在 vmB 中运行以下命令(根据需要修改它):
tcpdump -i ens5 src 10.238.232.9 icmp
如果数据包被丢弃,请检查您的 iptables 和网络配置,如命令输出注释中所建议的那样iptables -L
,ip route
可能会有用。
推荐阅读
- c++ - C++ 重载 == 比较来自不同类的对象
- java - 如何防止 XMLStreamWriter writeCharacter 方法将 \r 转换为
- android - 如何在recyclerview中根据文本长度设置列数
- docker - Nifi 1.6.0 内存泄漏
- xml - 我的项目中需要哪些 jar 来部署 JSF 应用程序?
- apache-spark - Apache Zeppelin Spark notebook 显示状态正在运行,即使它没有运行。为什么?
- matlab - Matlab SOR方法实现
- python - Python 程序完成后会弹出来
- python - 从 Python 库为 AutoML、计算机视觉生成不记名令牌
- gcc - realgcc.exe:错误:CreateProcess:没有这样的文件或目录