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)")
Общая архитектура лаборатории
Чтобы продемонстрировать оба типа следующих переходов настраиваемого маршрута, вы создадите 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 с использованием этих маршрутов.
Что дальше?
Посмотрите некоторые из этих кодовых лабораторий...
- Доступ к API Google с локальных хостов с использованием адресов IPv6.
- Варианты IP-адресации IPv4 и IPv6