- Вопрос или проблема
- Ответ или решение
- Настройка IPv6 для виртуальной машины в Google Cloud Platform (GCP)
- Шаг 1: Создание VPC сети
- Шаг 2: Создание подсети с поддержкой IPv6
- Шаг 3: Создание виртуальной машины с поддержкой IPv6
- Шаг 4: Настройка правил брандмауэра
- Шаг 5: Подключение к виртуальной машине и проверка настроек сети
- Шаг 6: Пинг до внешнего IPv6 ресурса
- Решение потенциальных проблем
- Заключение
Вопрос или проблема
Я пытаюсь настроить простую виртуальную машину в 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 <мой IPv4 адрес>
- 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
- Попытайтесь пинговать внешний ресурс 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, и сетевому интерфейсу следует назначить первый адрес из этого диапазона. Я этого здесь не вижу. Нужно ли мне что-то сделать на хосте, чтобы это получить? Или есть что-то, что я пропустил и что необходимо в GCP?
Подключение к API и службам Google из VPC через внешние IPv6 адреса в настоящее время не поддерживается. Попытки пинговать ‘ipv6.google.com’ из облачной виртуальной машины через IPv6 часто приводят к ответу ICMP “назначение недоступно”.
Я воспроизвел вашу настройку с шагами, которые вы упомянули, и также получал ту же ошибку “Destination unreachable: No route”, пытаясь пинговать ipv6.google.com, однако мне удалось успешно пинговать другие сайты IPv6, такие как ‘wikipedia.org’.
Кроме того, чтобы наилучшим образом использовать ВМ с сетью IPv6, вы можете предпочесть использование балансировки нагрузки GCP с поддержкой IPv6.
Я обнаружил, что даже после открытия брандмауэров на уровне GCP и ufw, мне нужно было добавить inet6 к интерфейсу по умолчанию ens4
, который настроил GCP.
На debian я отредактировал: /run/network/interfaces.d/ens4
И добавил: iface ens4 inet6 dhcp
Так что оба inet dhcp
и inet6 dhcp
были присутствуют.
Ответ или решение
Настройка IPv6 для виртуальной машины в Google Cloud Platform (GCP)
Настройка IPv6 на виртуальной машине (VM) в Google Cloud Platform (GCP) — это важный шаг для обеспечения совместимости с современными сетевыми технологиями. Давайте подробно рассмотрим, как настроить вашу виртуальную машину на GCP для успешной работы с IPv6.
Шаг 1: Создание VPC сети
Первым делом создадим виртуальную частную сеть (VPC). Это делается с помощью следующей команды:
$ gcloud config set project my-test-project
$ gcloud compute networks create targetnet \
--subnet-mode=custom --mtu=1460 --bgp-routing-mode=regional
Эта команда создаёт новую сеть с кастомной конфигурацией, подходящей для использования IPv6.
Шаг 2: Создание подсети с поддержкой IPv6
Далее, создадим подсеть, которая будет поддерживать 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
Важно указать параметр --stack-type=IPV4_IPV6
, чтобы включить поддержку IPv6.
Шаг 3: Создание виртуальной машины с поддержкой 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
Эта команда создаёт VM с поддержкой IPv6 с использованием образа Debian 10.
Шаг 4: Настройка правил брандмауэра
Чтобы получить доступ к виртуальной машине через SSH, необходимо добавить правило брандмауэра:
$ gcloud compute firewall-rules create target-ssh-home \
--network targetnet --allow tcp:22 --source-ranges <ваш IPv4 адрес>
Замените <ваш IPv4 адрес>
на ваш фактический IP-адрес, чтобы открыть доступ к вашим ресурсам.
Шаг 5: Подключение к виртуальной машине и проверка настроек сети
Подключитесь к вашей VM через SSH и выполните команды для проверки настроек.
$ ip -6 addr
$ ip -6 route
Убедитесь, что ваша сеть настроена правильно и у вас есть глобальный IPv6-адрес.
Шаг 6: Пинг до внешнего IPv6 ресурса
Попробуйте выполнить пинг до внешнего ресурса, например:
$ ping6 ipv6.google.com
Если вы получите сообщение об ошибке с указанием "Destination unreachable: No route", это может означать, что ваше сетевое подключение настроено неправильно или существует конфликт маршрутизации.
Решение потенциальных проблем
Если вы столкнётесь с проблемами, попробуйте следующее:
-
Проверьте брандмауэр: Убедитесь, что вы открыли необходимые порты и разрешили трафик IPv6.
-
Настройка интерфейса: Если использование DHCP для получения IPv6-адреса не настроено, выполните следующие действия. Откройте файл конфигурации сетевого интерфейса и добавьте следующую строку:
iface ens4 inet6 dhcp
После чего перезагрузите сетевой интерфейс, чтобы изменения вступили в силу.
-
Используйте IPv6 DNS: Проверьте, что DNS-серверы настроены на поддержку IPv6. Вы можете использовать публичные DNS-серверы от Google, например,
2001:4860:4860::8888
.
Заключение
Настройка IPv6 на виртуальной машине GCP включает в себя создание сети и подсети с поддержкой IPv6, настройку брандмауэра и сети на самой VM. Используйте приведенные выше шаги, чтобы уверенно настроить свою среду и обеспечить возможность выполнения запросов к внешним IPv6-ресурсам. Не забудьте протестировать соединение и удовлетворение требованиями конфигурации.