我有一个 VPC,其中有两个 Compute Engine VM 实例。其中一个实例vpn-server
充当本地计算机集群的 VPN。另一个实例test-instance
已配置实例标签,如果要访问 ,它route-through-vpn
会将流量路由到。vpn-server
10.10.0.0/19
还有一个带有route-through-vpn
实例标记的 AppEngine 实例。其中运行的 Web 应用可以直接连接到我们的本地集群。
这个设置已经运行了一年多,一切正常。但昨天,一小部分 IP 地址突然停止工作了。
我所说的“停止工作”是指:
- 如果您已登录,仍然可以通过 SSH 连接到非工作 IP 地址
vpn-server
。 - 但源自的流量
test-instance
无法到达这些 IP。
其中一个失败的 IP 是10.10.0.8
。一个仍能正常工作的 IP 是10.10.0.47
。据我所知,所有地址都正确匹配地址范围10.10.0.0/19
。
为了进行调试,我登录到vpn-server
和test-instance
并尝试将 ICMP 数据包从 发送test-instance
到集群中的各个 IP 地址。我还在tcpdump
上运行了vpn-server
以便能够看到通过的流量。
对于仍在运行的 IP 地址,我在 的输出中看到了 ICMP 数据包tcpdump
,这与预期一致。但对于不再运行的 IP 地址,我在 中看不到任何内容tcpdump
,这表明 Gcloud 的路由层甚至没有将流量发送到我的vpn-server
。
为了进一步测试,我关闭了一台流量路由正常的本地计算机,并尝试对其进行 ping。ICMP 回显请求数据包出现在输出中,但tcpdump
没有回复,这与预期完全一致。
Google Cloud 的路线没有太多选择,并且没有可用的信息可以帮助我进一步调查,所以现在只能靠某人碰巧知道为什么会发生这种情况。
有谁解决过这样的问题或者知道可能是什么原因造成的?
答案1
这似乎更像是实例配置或路由表问题,如果我理解正确的话,IP 地址 10.10.xx/19 来自您的本地。我们可以丢弃防火墙规则,因为我假设您有一条类似于“允许来自源/目标 10.10.0.0 /19 的入口/出口流量”的规则,如果您看到 IP 地址 10.10.0.47 仍然有效,则意味着防火墙规则正在运行,这似乎更像是一种路由行为,您是否尝试过清理实例内的路由表?它可以帮助刷新您的路由表。我知道 GCP 有一个选项,您可以在其中使用实例作为网关这听起来和你正在做的事情很相似。