背景与问题
我们想要对我们的一个 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 配置后问题仍然存在,我建议您执行连接测试并验证连接是否中断。
希望以上信息对你有用。