我正在尝试在 Google Cloud Platform 中设置一个可以成功 ping ipv6.google.com 的简单虚拟机。我正在使用这些有关 IPv6 支持的 GCP 文档,包括:
- https://cloud.google.com/vpc/docs/vpc#ipv6-addresses
- https://cloud.google.com/vpc/docs/using-vpc#subnet-enable-ipv6
- https://cloud.google.com/compute/docs/ip-addresses/configure-ipv6-address
[注:已编辑/更新以提供所使用的完整命令]
以下是我的简单且可重复的概念证明:
- 在项目中创建 VPC 网络
$ gcloud config set project my-test-project
$ gcloud compute networks create targetnet \
--subnet-mode=custom --mtu=1460 --bgp-routing-mode=regional
- 创建支持 IPv6 的子网
$ gcloud compute networks subnets create targetnet-1 \
--network=targetnet --range=10.9.9.0/24 \
--stack-type=IPV4_IPV6 --ipv6-access-type=EXTERNAL \
--region=us-west2
- 创建支持 IPv6 的实例
$ gcloud compute instances create test-1 \
--stack-type=IPV4_IPV6 --ipv6-network-tier=PREMIUM \
--subnet=targetnet-1 --zone=us-west2-a \
--image-family=debian-10 --image-project=debian-cloud \
--machine-type=e2-micro
- 添加防火墙规则以授予对实例的 SSH 访问权限
$ gcloud compute firewall-rules create target-ssh-home \
--network targetnet --allow tcp:22 --source-ranges <my IPv4 addr>
- SSH 到实例,查看网络地址和路由:
$ ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 state UP qlen 1000
inet6 2600:1900:xxxx:xxxx:0:1::/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::4001:aff:fe04:2d2/64 scope link
valid_lft forever preferred_lft forever
$ ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2600:1900:xxxx:xxxx:0:1:: dev ens4 proto kernel metric 256 pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
default via fe80::4001:aff:fe04:201 dev ens4 proto ra metric 1024 expires 85sec pref medium
- 尝试 ping 外部 IPv6 资源:
$ ping6 ipv6.google.com
PING ipv6.google.com(lax31s01-in-x0e.1e100.net (2607:f8b0:4007:80e::200e)) 56 data bytes
From fe80::4001:ff:fe00:0%ens4 (fe80::4001:ff:fe00:0%ens4): icmp_seq=1 Destination unreachable: No route
文档表明防火墙默认应该允许传出 ICMP。不过,我还尝试添加防火墙规则以允许各种形式的 ICMP(和每个)服务,看看是否有帮助。这并没有改变结果。此外,我确认 GCP 为网络添加了默认 IPv6 路由。(::/0)。
根据文档,GCP 将提供 /64,并且应为 NIC 分配该范围内的第一个地址。我在这里没有看到。我需要在主机上执行什么操作才能获得该地址吗?或者我是否遗漏了 GCP 中需要的内容?
答案1
目前不支持通过外部 IPv6 地址从 VPC 连接到 Google API 和服务。通过 IPv6 从云 VM ping 'ipv6.google.com' 的努力通常会导致无法到达目的地的 ICMP 响应。
我按照您提到的步骤复制了您的设置,在尝试 ping ipv6.google.com 时也得到了相同的“无法到达目的地:无路由”错误,但我能够非常成功地 ping 其他 IPv6 站点,例如“wikipedia.org”。
此外,为了更好地使用具有 IPv6 网络的虚拟机,您可以选择加入 GCP支持 IPv6 的负载平衡。