Использование статических маршрутов IPv6 для экземпляра следующего перехода (без тегов и тегов) и шлюза следующего перехода.

1. Введение

Статические пользовательские маршруты влияют на поведение маршрутизации по умолчанию в VPC. Пользовательские маршруты IPv6 теперь поддерживают новые атрибуты следующего перехода: шлюз следующего перехода и экземпляр следующего перехода. В этой лаборатории кода описывается, как использовать пользовательские маршруты IPv6 с этими новыми параметрами следующего перехода, используя два VPC, соединенных экземпляром виртуальной машины с несколькими сетевыми адаптерами. Вы также продемонстрируете смешивание адресов ULA и GUA и обеспечение доступности ULA VPC для общедоступного Интернета с использованием новой возможности настраиваемого маршрута.

Что вы узнаете

  • Как создать собственный маршрут IPv6 со следующим переходом экземпляра следующего перехода.
  • Как создать собственный маршрут IPv6 со следующим переходом шлюза следующего перехода.

Что вам понадобится

  • Облачный проект Google

2. Прежде чем начать

Обновите проект для поддержки лаборатории кода.

В этой лаборатории кода используются переменные $variables для облегчения реализации конфигурации gcloud в Cloud Shell.

Внутри Cloud Shell выполните следующие действия.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export projectname=$(gcloud config list --format="value(core.project)")

Общая архитектура лаборатории

66f72fc758d762f7.png

Чтобы продемонстрировать оба типа следующих переходов настраиваемого маршрута, вы создадите 3 VPC: клиентский VPC, использующий адресацию GUA, серверный VPC, использующий адресацию ULA, и второй серверный VPC, использующий адресацию GUA.

Чтобы клиентский VPC мог получить доступ к серверу ULA, вы будете использовать собственный маршрут с экземпляром следующего перехода, указывающим на экземпляр шлюза с несколькими сетевыми картами. Чтобы предоставить доступ к серверу GUA (после удаления маршрута по умолчанию ::/0), вы будете использовать собственный маршрут со шлюзом следующего перехода, указывающим на Интернет-шлюз по умолчанию, для обеспечения маршрутизации через Интернет.

3. Настройка клиентского VPC

Создайте клиентское VPC

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks create client-vpc \
    --project=$projectname \
    --subnet-mode=custom \
    --mtu=1500 --bgp-routing-mode=regional

Создайте клиентскую подсеть

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks subnets create client-subnet  \
    --network=client-vpc \
    --project=$projectname \
    --range=192.168.1.0/24 \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=external \
    --region=us-central1

Запишите назначенную подсеть GUA в переменную среды с помощью этой команды.

export client_subnet=$(gcloud compute networks subnets \
    describe client-subnet \
    --project $projectname \
    --format="value(externalIpv6Prefix)" \
    --region us-central1)

Запустить экземпляр клиента

Внутри Cloud Shell выполните следующие действия:

gcloud compute instances create client-instance \
    --subnet client-subnet \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

Добавьте правило брандмауэра для клиентского трафика VPC.

Внутри Cloud Shell выполните следующие действия:

gcloud compute firewall-rules create allow-gateway-client \
    --direction=INGRESS --priority=1000 \
    --network=client-vpc --action=ALLOW \
    --rules=tcp --source-ranges=$client_subnet \
    --project=$projectname 

Добавьте правило брандмауэра, чтобы разрешить IAP для экземпляра клиента.

Внутри Cloud Shell выполните следующие действия:

gcloud compute firewall-rules create allow-iap-client \
    --direction=INGRESS --priority=1000 \
    --network=client-vpc --action=ALLOW \
    --rules=tcp:22 --source-ranges=35.235.240.0/20 \
    --project=$projectname 

Подтвердите доступ по SSH к экземпляру клиента.

Внутри Cloud Shell войдите в экземпляр клиента:

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

В случае успеха вы увидите окно терминала экземпляра клиента. Выйдите из сеанса SSH, чтобы продолжить работу с кодовой лабораторией.

4. Настройка VPC ULA-сервера

Создайте VPC сервера ULA.

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks create server-vpc1 \
    --project=$projectname \
    --subnet-mode=custom --mtu=1500 \
    --bgp-routing-mode=regional \
    --enable-ula-internal-ipv6

Создайте подсети сервера ULA.

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks subnets create server-subnet1 \
    --network=server-vpc1 \
    --project=$projectname \
    --range=192.168.0.0/24 \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=internal \
    --region=us-central1

Запишите назначенную подсеть ULA в переменную среды с помощью этой команды.

export server_subnet1=$(gcloud compute networks subnets \
    describe server-subnet1 \
    --project $projectname \
    --format="value(internalIpv6Prefix)" \
    --region us-central1)

Запустите виртуальную машину сервера с внутренним адресом ULA IPV6.

Внутри Cloud Shell выполните следующие действия:

gcloud compute instances create server-instance1 \
    --subnet server-subnet1 \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

Добавьте правило брандмауэра, чтобы разрешить доступ к серверу с клиента.

Внутри Cloud Shell выполните следующие действия:

gcloud compute firewall-rules create allow-client-server1 \
    --direction=INGRESS --priority=1000 \
    --network=server-vpc1 --action=ALLOW \
    --rules=tcp --source-ranges=$client_subnet \
    --project=$projectname 

Добавьте правило брандмауэра, чтобы разрешить IAP

Внутри Cloud Shell выполните следующие действия:

gcloud compute firewall-rules create allow-iap-server1 \
    --direction=INGRESS --priority=1000 \
    --network=server-vpc1 --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=35.235.240.0/20 \
    --project=$projectname 

Установите Apache на экземпляре сервера ULA.

Внутри Cloud Shell войдите в экземпляр клиента:

gcloud compute ssh server-instance1 \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

Внутри оболочки виртуальной машины сервера выполните следующую команду

sudo apt update && sudo apt -y install apache2

Убедитесь, что Apache работает

sudo systemctl status apache2

Перезаписать веб-страницу по умолчанию

echo '<!doctype html><html><body><h1>Hello World! From Server1!</h1></body></html>' | sudo tee /var/www/html/index.html

Выйдите из сеанса SSH, чтобы продолжить работу с кодовой лабораторией.

5. Настройка VPC GUA-сервера

Создайте VPC сервера GUA.

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks create server-vpc2 \
    --project=$projectname \
    --subnet-mode=custom --mtu=1500 \
    --bgp-routing-mode=regional

Создайте подсети сервера GUA.

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks subnets create server-subnet2 \
    --network=server-vpc2 \
    --project=$projectname \
    --range=192.168.0.0/24 \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=external \
    --region=us-central1

Запишите назначенную подсеть GUA в переменную среды с помощью этой команды.

export server_subnet2=$(gcloud compute networks subnets \
    describe server-subnet2 \
    --project $projectname \
    --format="value(externalIpv6Prefix)" \
    --region us-central1)

Запустите серверную виртуальную машину с адресом GUA IPV6.

Внутри Cloud Shell выполните следующие действия:

gcloud compute instances create server-instance2 \
    --subnet server-subnet2 \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

Добавьте правило брандмауэра, чтобы разрешить доступ внутри подсети.

Внутри Cloud Shell выполните следующие действия:

gcloud compute firewall-rules create allow-client-server2 \
    --direction=INGRESS \
    --priority=1000 \
    --network=server-vpc2 \
    --action=ALLOW \
    --rules=tcp --source-ranges=$client_subnet \
    --project=$projectname 

Добавьте правило брандмауэра, чтобы разрешить IAP

Внутри Cloud Shell выполните следующие действия:

gcloud compute firewall-rules create allow-iap-server2 \
    --direction=INGRESS \
    --priority=1000 \
    --network=server-vpc2 \
    --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=35.235.240.0/20 \
    --project=$projectname 

Подтвердите доступ по SSH к экземпляру сервера GUA и установите Apache.

Внутри Cloud Shell войдите в экземпляр клиента:

gcloud compute ssh server-instance2 \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

Внутри оболочки виртуальной машины сервера выполните следующую команду

sudo apt update && sudo apt -y install apache2

Убедитесь, что Apache работает

sudo systemctl status apache2

Перезаписать веб-страницу по умолчанию

echo '<!doctype html><html><body><h1>Hello World! From Server2!</h1></body></html>' | sudo tee /var/www/html/index.html

Выйдите из сеанса SSH, чтобы продолжить работу с кодовой лабораторией.

6. Создайте экземпляр шлюза

Удалить маршрут по умолчанию для Client VPC.

При подготовке к перенаправлению трафика ULA v6 на экземпляр с несколькими сетевыми адаптерами и отключению исходящей маршрутизации через Интернет. Удалите маршрут по умолчанию ::/0, указывающий на интернет-шлюз по умолчанию.

Внутри Cloud Shell выполните следующие действия:

export client_defroutename=$(gcloud compute routes list \
--project $projectname \
--format='value(name)' \
--filter="network:client-vpc AND destRange~'::/0'")

gcloud compute routes delete $client_defroutename \
--project $projectname \
--quiet

Запуск виртуальной машины с несколькими сетевыми адаптерами шлюза

Внутри Cloud Shell выполните следующие действия:В Cloud Shell выполните следующее:

gcloud compute instances create gateway-instance \
    --project=$projectname \
    --zone=us-central1-a \
--network-interface=stack-type=IPV4_IPV6,subnet=client-subnet,no-address \
--network-interface=stack-type=IPV4_IPV6,subnet=server-subnet1,no-address \
    --can-ip-forward

Настроить экземпляр шлюза

Внутри Cloud Shell войдите в экземпляр шлюза (успешное использование SSH может занять несколько минут, пока экземпляр загружается):

gcloud compute ssh gateway-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

Внутри оболочки виртуальной машины шлюза выполните следующую команду, чтобы включить пересылку IPv6 и продолжать принимать запросы RA с включенной пересылкой (accept_ra = 2).

sudo sysctl -w net.ipv6.conf.ens4.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens5.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens4.accept_ra_defrtr=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

Проверьте таблицу маршрутизации IPv6 на экземпляре.

ip -6 route show

Пример вывода, показывающий маршруты подсетей ULA и GUA, причем маршрут по умолчанию указывает на интерфейс GUA.

::1 dev lo proto kernel metric 256 pref medium
2600:1900:4000:7a7f:0:1:: dev ens4 proto kernel metric 256 expires 83903sec pref medium
2600:1900:4000:7a7f::/65 via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium
fd20:3df:8d5c::1:0:0 dev ens5 proto kernel metric 256 expires 83904sec pref medium
fd20:3df:8d5c::/64 via fe80::4001:c0ff:fea8:1 dev ens5 proto ra metric 1024 expires 84sec pref medium
fe80::/64 dev ens5 proto kernel metric 256 pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
default via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium

Выйдите из сеанса SSH, чтобы продолжить работу с кодовой лабораторией.

7. Создайте и протестируйте маршруты к экземпляру шлюза.

Запишите адреса серверов

Внутри Cloud Shell выполните следующие действия:

gcloud compute instances list \
   --project $projectname \
   --filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address,networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)'

При этом должны выводиться как имена экземпляров серверов, так и их префиксы IPv6. Пример вывода

server-instance1,fd20:3df:8d5c:0:0:0:0:0,
server-instance2,,2600:1900:4000:71fd:0:0:0:0

Запишите оба адреса, поскольку вы будете использовать их позже в командах Curl из экземпляра клиента. К сожалению, переменные среды нелегко использовать для их хранения, поскольку они не передаются через сеансы SSH.

Запустите команду Curl от клиента к экземпляру сервера ULA.

Чтобы увидеть поведение перед добавлением новых маршрутов. Запустите команду curl от экземпляра клиента к экземпляру сервера1.

Внутри Cloud Shell войдите в экземпляр клиента:

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

Внутри экземпляра клиента выполните скручивание, используя адрес ULA IPV6 экземпляра server1 (команда устанавливает короткий тайм-аут в 5 секунд, чтобы избежать слишком длительного ожидания скручивания)

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

Время ожидания этой команды curl должно истечь, поскольку у клиентского VPC еще нет маршрута к серверному VPC.

Давайте попробуем это исправить! Выйдите из сеанса SSH на данный момент.

Добавить собственный маршрут в клиентском VPC

Поскольку в клиентском VPC отсутствует маршрут к префиксу ULA. Давайте добавим это сейчас.

Внутри Cloud Shell выполните следующие действия:

gcloud compute routes create client-to-server1-route \
   --project=$projectname \
   --destination-range=$server_subnet1 \
   --network=client-vpc \
   --next-hop-instance=gateway-instance \
   --next-hop-instance-zone=us-central1-a

SSH обратно к экземпляру клиента:

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

Внутри экземпляра клиента попытайтесь снова подключиться к экземпляру сервера. (команда устанавливает короткий тайм-аут в 5 секунд, чтобы избежать слишком долгого ожидания скручивания)

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

Время ожидания этой команды curl все еще истекает, поскольку VPC server1 еще не имеет обратного маршрута к клиентскому VPC через экземпляр шлюза.

Выйдите из сеанса SSH, чтобы продолжить работу с кодовой лабораторией.

Добавить собственный маршрут в ULA Server VPC

Внутри Cloud Shell выполните следующие действия:

gcloud compute routes create server1-to-client-route \
   --project=$projectname \
   --destination-range=$client_subnet \
   --network=server-vpc1 \
   --next-hop-instance=gateway-instance \
   --next-hop-instance-zone=us-central1-a

SSH обратно к экземпляру клиента:

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

Внутри экземпляра клиента попытайтесь подключиться к экземпляру сервера еще раз.

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

Теперь эта команда curl работает успешно, показывая, что у вас есть сквозная доступность от экземпляра клиента к экземпляру сервера ULA. Такое подключение теперь возможно только за счет использования пользовательских маршрутов IPv6 с экземпляром следующего перехода в качестве следующего перехода.

Пример вывода

<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[fd20:3df:8d5c:0:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server1!</h1></body></html>

Выйдите из сеанса SSH, чтобы продолжить работу с кодовой лабораторией.

8. Создайте и протестируйте маршрут к интернет-шлюзу.

Пока у вас есть эта лабораторная настройка, давайте также проверим функциональность нового свойства следующего перехода: next-hop-gateway.

Запустите команду Curl от клиента к экземпляру сервера GUA.

Чтобы увидеть поведение перед добавлением новых маршрутов. Запустите команду curl от экземпляра клиента к IP-адресу сервера2.

Внутри Cloud Shell войдите в экземпляр клиента:

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

Внутри экземпляра клиента выполните скручивание к конечной точке IPv6.

curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'

Эта команда curl должна истечь по истечении времени ожидания, поскольку клиентское VPC имеет только собственный маршрут подсети и маршрут к VPC сервера 1. Чтобы получить доступ к диапазону GUA сервера server2 VPC, вам необходимо использовать интернет-шлюз по умолчанию через собственный маршрут.

Выйдите из сеанса SSH, чтобы продолжить работу с кодовой лабораторией.

Добавить собственный маршрут шлюза в клиентском VPC

Внутри Cloud Shell выполните следующие действия:

gcloud compute routes create client-to-server2-route \
   --project=$projectname \
   --destination-range=$server_subnet2 \
   --network=client-vpc \
   --next-hop-gateway=default-internet-gateway

SSH обратно к экземпляру клиента:

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

Внутри экземпляра клиента повторите тот же завиток

curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'

Теперь эта команда curl должна успешно вернуть пользовательское сообщение приветствия, указывающее, что вы можете успешно достичь IPv6-адреса другого сервера через интернет-шлюз по умолчанию.

Пример вывода:

<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[2600:1900:4000:71fd:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server2!</h1></body></html>

Выйдите из сеанса SSH, чтобы пройти раздел очистки лабораторной работы.

9. Очистка

Очистка экземпляров

Внутри Cloud Shell выполните следующие действия:

gcloud compute instances delete client-instance --zone us-central1-a --quiet --project=$projectname

gcloud compute instances delete server-instance1 --zone us-central1-a --quiet --project=$projectname

gcloud compute instances delete server-instance2 --zone us-central1-a --quiet --project=$projectname

gcloud compute instances delete gateway-instance --zone us-central1-a --quiet --project=$projectname

Очистка подсетей

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks subnets delete client-subnet --region=us-central1 --quiet --project=$projectname

gcloud compute networks subnets delete server-subnet1 --region=us-central1 --quiet --project=$projectname

gcloud compute networks subnets delete server-subnet2 --region=us-central1 --quiet --project=$projectname

Очистка правил брандмауэра

Внутри Cloud Shell выполните следующие действия:

gcloud compute firewall-rules delete allow-iap-client  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server1  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server2  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-gateway-client  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server1  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server2  --quiet --project=$projectname

Очистка пользовательских маршрутов

Внутри Cloud Shell выполните следующие действия:

gcloud compute routes delete client-to-server1-route  --quiet --project=$projectname
gcloud compute routes delete client-to-server2-route  --quiet --project=$projectname
gcloud compute routes delete server1-to-client-route  --quiet --project=$projectname

Очистка VPC

Внутри Cloud Shell выполните следующие действия:

gcloud compute networks delete client-vpc --quiet --project=$projectname
gcloud compute networks delete server-vpc1 --quiet --project=$projectname
gcloud compute networks delete server-vpc2 --quiet --project=$projectname

10. Поздравления

Вы успешно использовали статические пользовательские маршруты IPv6 с параметрами next-hop-gateway и next-hop-instance и проверили сквозную связь IPv6 с использованием этих маршрутов.

Что дальше?

Посмотрите некоторые из этих кодовых лабораторий...

Дальнейшее чтение и видео

Справочная документация