ICMP 问题排查

本教程介绍如何以迭代方式使用连接测试来识别和解决网络连接问题。

在本例中,Virtual Private Cloud 防火墙规则会阻止一个虚拟机实例的外部 IP 地址使用 ICMP 协议来 ping 另一个虚拟机的外部 IP 地址。

由于虚拟机之间的通信问题通常是网络连接问题,因此连接测试可让您了解有关可能的配置问题,以便您解决。然后,您可以再次运行连接测试以验证是否解决了相应问题。

概览

在本例中,您已在 Virtual Private Cloud 网络的同一子网中配置了两个虚拟机实例。两个虚拟机都有外部 IP 地址。当您通过将 ping 数据包从 vm1 发送到外部 IP 地址 vm2 来测试它们之间的连接时,ping 不起作用。

解决两个虚拟机之间被拒绝的 ping 问题
解决两个虚拟机之间被拒绝的 ping 问题

准备工作

在开始本教程之前,请按照运行连接测试Before you begin 部分中的所有步骤操作。

查看防火墙规则的运作方式也可能会对您有所帮助。

配置网络资源

在本部分中,您将在测试路径中配置 Google Cloud 资源。

配置 VPC 网络

您可以使用包含虚拟机的现有网络和子网,也可以创建新的网络和子网

配置两个虚拟机实例

  1. 本教程中的虚拟机实例位于同一 VPC 网络和子网中。您可以使用现有的虚拟机,也可以创建新的虚拟机
  2. 创建 vm1vm2 时,请为其分配一个外部 IP 地址。记下这些地址,以备日后使用。

创建防火墙规则 default-deny-outgoing-ping

创建虚拟机后,创建一个出站 VPC 防火墙规则(名为 default-deny-outgoing-ping)。该规则会拒绝从 vm1vm2 的 ICMP 协议。

确保此网络中没有现有的防火墙规则可以覆盖此规则。

使用下表中的值来配置此防火墙规则:

防火墙规则字段
名称 default-deny-outgoing-ping
网络 使用虚拟机所在的 VPC 网络。
优先级 1000
方向 egress
对匹配项执行的操作 deny
目标 选择 All instances in the network
目标 IP 地址范围 使用 vm2 的外部 IP 地址。
指定的协议和端口 勾选 other protocols,然后输入 icmp

创建防火墙规则 default-deny-ingress-to-vm2

创建一个名为 default-deny-ingress-to-vm2 的入站防火墙规则,以拒绝 ICMP 协议使用 vm2 的外部 IP 地址。

确保您网络中没有现有的防火墙规则可以覆盖此规则。使用下表中的值创建规则:

防火墙规则字段
名称 default-deny-ingress-to-vm2
网络 使用虚拟机所在的 VPC 网络。
优先级 65534
方向 ingress
对匹配项执行的操作 deny
目标 选择 All instances in the network
来源 IP 地址范围 使用 vm1 的外部 IP 地址。
指定的协议和端口 勾选 other protocols,然后输入 icmp

运行首次 Trace

使用 Cloud Console 运行跟踪,以确定 ICMP (ping) 数据包是否可以从 vm1 传播到 vm2 的外部 IP 地址。使用下表输入跟踪记录的值。

运行此跟踪记录后,连接测试会告知您由于防火墙规则 default-deny-outgoing-ping,跟踪记录数据包已被丢弃。

字段名称
协议 icmp
源 IP 地址 使用 vm1 的外部 IP 地址。
勾选对应的复选框 This is an external IP address used in Google Cloud.
源 IP 地址项目 验证 vm1 的项目名称。
目标 IP 地址 使用 vm2 的外部 IP 地址。
勾选对应的复选框 This is an external IP address used in Google Cloud.
目标 IP 地址项目 验证 vm2 的项目名称。

以下 Cloud Console 快照显示防火墙规则 default-deny-outgoing-ping 的跟踪记录数据包已被丢弃。

包含被拒传出 ping 的跟踪记录的控制台界面快照
包含被拒传出 ping 的跟踪记录的控制台界面快照

停用防火墙规则 default-deny-outgoing-ping 后,运行第二次跟踪记录

  1. 如需允许对 vm2 进行 ping 测试,请暂时停用防火墙规则default-deny-outgoing-ping
  2. 配置成功更新后,再次运行跟踪记录。
  3. 跟踪记录再次失败。由于此防火墙规则拒绝将入站 ICMP 数据包发送到 vm2 的外部 IP 地址,因此该数据包已被丢弃。

以下 Cloud Console 快照显示入站跟踪记录数据包可以通过 Cloud NAT,但由于前面提到的防火墙规则而无法到达 vm2

跟踪记录的控制台界面快照无法到达
包含被拒传出 ping 的跟踪记录的控制台界面快照

创建防火墙规则 allow-ping-from-known-ranges

如需允许 vm2 外部 IP 地址的入站流量,请配置一个名为 allow-ping-from-known-ranges 的新防火墙规则。

由于允许所有入站 ICMP 数据包进入 VPC 网络存在安全风险,因此,请仅指定一小部分允许将 ICMP 数据包发送到 vm2 的外部 IP 的源范围。

就本教程而言,此源范围仅包含 vm1 的外部 IP 地址,但请检查所有现有的防火墙规则或规则优先级,以确保它们不会覆盖此新规则。

使用下表中的值来配置规则:

防火墙规则字段
名称 allow-ping-from-known-ranges
网络 使用包含两个虚拟机的网络的名称。
优先级 1000
方向 入站流量
对匹配项执行的操作 allow
目标 选择 All instances in the network
来源过滤条件 IP 范围
来源 IP 地址范围 使用 vm1 的外部 IP 地址
指定的协议和端口 勾选 Other protocols,然后输入 ICMP

运行第三次 Trace

创建 allow-ping-from-known-ranges 防火墙规则后,再次 ping vm2 的外部 IP 地址。ping 正常,问题已解决。

两个虚拟机之间允许的 ping
两个虚拟机之间允许的 ping

您可以通过对包含新防火墙规则的更新配置执行另一个跟踪记录来验证此结果。这次,连接测试会告知您数据包已递送到 vm2,并且匹配的防火墙规则 allow-ping-from-known-ranges 允许将入站 ICMP 数据包发送到 vm2 的外部 IP 地址。

成功跟踪到 vm2 的控制台界面快照
成功跟踪到 vm2
的控制台界面快照

清理

如果需要,您可以停用或删除为本教程创建的以下所有 Google Cloud 资源。确保这些不是生产资源。如果您决定停用资源,请查看 Compute Engine 价格页面所有网络价格页面,以确保您不需要再为其付费。

  1. 停用删除防火墙规则。
  2. 停用删除虚拟机。
  3. 删除 VPC 子网。
  4. 删除 VPC 网络

后续步骤