
Я пытаюсь настроить простую виртуальную машину в Google Cloud Platform, которая может успешно пинговать ipv6.google.com. Я использую эти документы GCP относительно поддержки IPv6, включая:
- 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
Подключение к API и сервисам Google из VPC через внешние адреса IPv6 в настоящее время не поддерживается. Попытки пинговать 'ipv6.google.com' из Cloud VM через IPv6 часто приводят к ответу ICMP о недоступности назначения.
Я воспроизвел вашу настройку, выполнив указанные вами шаги, и также получал ту же ошибку «Destination unreachable: No route» при попытке пинговать ipv6.google.com, однако мне удалось довольно успешно пинговать другие сайты IPv6, такие как 'wikipedia.org'.
Кроме того, для наилучшего использования виртуальных машин с сетью IPv6 вы можете предпочесть включение GCP.Балансировка нагрузки с поддержкой IPv6.