Google Cloud Engine - 网络不可达(使用 NAT)

Google Cloud Engine - 网络不可达(使用 NAT)

背景与问题

我们想要对我们的一个 Compute Engine 实例进行维护(通过 apt update/upgrade 更新依赖项),但该实例无法访问公共互联网,即使网络中存在 NAT:

sudo apt update

Err:1 http://security.ubuntu.com/ubuntu jammy-jellyfish-security InRelease                                             
  Could not connect to security.ubuntu.com:80 (185.125.190.39), connection timed out Could not connect to security.ubuntu.com:80 (91.189.91.39), connection timed out Could not connect to security.ubuntu.com:80 (185.125.190.36), connection timed out
...

ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4096ms

我们无法弄清楚为什么实例无法访问公共互联网;根据以下信息,您能帮助我们找出原因吗?


信息

实例详细信息:

区域:us-central1-c

联网:

  • 公共 DNS PTR 记录:无

网络接口:

姓名 VPC 网络 VPC 子网 主要内部 IP 地址 外部 IP 地址
nic0 默认(项目默认 VPC) 默认 10.128.0.1 没有任何

防火墙:

  • HTTP 流量:关闭
  • HTTPS 流量:关闭

云 NAT 网关:

姓名 地区 VPC 网络 路由器
项目-nat 北美东北部1 默认 项目路由器

云路由器:

姓名 地区 VPC 网络 VPN 网关
项目-nat 北美东北部1 默认 没有任何

防火墙规则:

姓名 网络 方向 优先事项 源范围 目标范围 允许 否定 已禁用
默认允许 ICMP 默认 入口 65534 0.0.0.0/0 icmp 错误的
默认允许内部 默认 入口 65534 10.128.0.0/9 TCP:0-65535,UDP:0-65535,ICMP 错误的
默认允许-rdp 默认 入口 65534 0.0.0.0/0 TCP:3389 错误的
默认允许 ssh 默认 入口 65534 0.0.0.0/0 TCP:22 错误的
服务器允许-grpc-840d2afd 默认 入口 100 10.128.0.0/9 TCP:50051,TCP:50052 错误的
服务器-拒绝-全部-840d2afd 默认 入口 200 0.0.0.0/0 icmp、udp、tcp 错误的
服务器-ssh-iap-840d2afd 默认 入口 100 35.235.240.0/20 TCP:22 错误的

添加了额外的防火墙规则来测试防火墙规则是否是问题所在(但没有成功):

姓名 网络 方向 优先事项 源范围 目标范围 允许 否定 已禁用
ubuntu 存储库 默认 出口 10 (IP 地址为:security.ubuntu.com、archive.canonical.com、us-central1.gce.archive.ubuntu.com 等) TCP:80,TCP:443 错误的
服务器-虚拟机-出口-全部-https 默认 出口 10 0.0.0.0/0 TCP:80,TCP:443,TCP:8443 错误的

实例网络配置:

cat /etc/hosts

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
169.254.169.254 metadata.google.internal metadata

cat /etc/resolv.conf

nameserver 127.0.0.53
options edns0
search us-central1-c.c.project-name.internal c.project-name.internal google.internal

ifconfig

ens4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.128.0.2  netmask 255.255.255.255  broadcast 0.0.0.0
        inet6 fe80::4001:aff:fe80:2  prefixlen 64  scopeid 0x20<link>
        ether 42:01:0a:80:00:02  txqueuelen 1000  (Ethernet)
        RX packets 9167  bytes 4126195 (4.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10106  bytes 1160860 (1.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 640  bytes 61620 (61.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 640  bytes 61620 (61.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ip rule list

0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default

ip route show table all

default via 10.128.0.1 dev ens4 proto dhcp src 10.128.0.2 metric 100 
10.128.0.1 dev ens4 proto dhcp scope link src 10.128.0.2 metric 100 
local 10.128.0.2 dev ens4 table local proto kernel scope host src 10.128.0.2 
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1 
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1 
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1 
::1 dev lo proto kernel metric 256 pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
local ::1 dev lo table local proto kernel metric 0 pref medium
local fe80::4001:aff:fe80:2 dev ens4 table local proto kernel metric 0 pref medium
ff00::/8 dev ens4 table local metric 256 pref medium

dig google.com

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34116
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             300     IN      A       142.251.161.101
google.com.             300     IN      A       142.251.161.113
google.com.             300     IN      A       142.251.161.102
google.com.             300     IN      A       142.251.161.138
google.com.             300     IN      A       142.251.161.100
google.com.             300     IN      A       142.251.161.139

;; Query time: 19 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun May 07 21:28:29 UTC 2023
;; MSG SIZE  rcvd: 135

如果您需要更多信息,请告诉我。非常感谢!

答案1

根据提供的信息,可以观察到Compute Engine 实例位于美国-中央1-c区域而云 NAT 网关云路由器北美东北部1区域。它清楚地表明它们位于不同的区域/地区。另外,请注意NAT 网关区域并且无法连接到位于不同区域的虚拟机实例。

根据官方文档

Cloud NAT 网关与单个区域和单个 VPC 网络中的子网 IP 地址范围相关联。在一个 VPC 网络中创建的 Cloud NAT 网关无法为使用 VPC 网络对等互连连接的其他 VPC 网络中的虚拟机提供 NAT,即使对等互连网络中的虚拟机与网关位于同一区域。

如果修复 NAT 配置后问题仍然存在,我建议您执行连接测试并验证连接是否中断。

希望以上信息对你有用。

相关内容