Настройка доступа в интернет через NAT Gateway из двух VPC
В этом сценарии описано, как развернуть виртуальную инфраструктуру с двумя или более VPC, среди которых один VPC — центральный с NAT-шлюзом для доступа в интернет, а другие — с сервисами, связанными с центральным VPC с помощью VPC peering connection. Такая схема может использоваться для публикации множества сервисов с публичными адресами в интернет.
Для связи VPC между собой используется VPC peering connection. Весь трафик по умолчанию из vpc-nat-article-2 попадает в vpc-nat-article-1, где происходит SNAT-трансляция source-адресов виртуальных машин ecs-demo-3 и ecs-demo-4, а также DNAT-трансляция публичных адресов EIP для доступа к сервисам, развернутым в ВМ ecs-demo-3 и ecs-demo-4 из публичной сети.
Хотя использование пересекающихся CIDR-блоков в VPC допускается, необходимо, чтобы подсети внутри этих VPC не пересекались друг с другом.
Перед началом работы выполните сценарий с одним VPC.
Создайте вторую сеть vpc-nat-article-2 с тем же CIDR-блоком, что и vpc-nat-article-1.
В сети vpc-nat-article-2 создайте две подсети — 192.168.3.0/24 и 192.168.4.0/24.
В консоли Advanced создайте две виртуальные машины ecs-demo-3 и ecs-demo-4 с ОС Linux в подсетях subnet-servers-3 и subnet-servers-4 соответственно без назначения EIP.
С помощью Postman создайте VPC peering connection для связи двух VPC:
https : // vpc . ru - moscow - 1. hc . sbercloud . ru / v2 .0 / vpc / peeringsВ теле запроса укажите параметры соединения:
{"peering" :{"name" : "article1-2" ,"request_vpc_info" :{"vpc_id" : "22fc4e0a-2cce-4f8c-9838-633f9da5acc2"},"accept_vpc_info" :{"vpc_id" : "7753e2db-7b2d-4c50-9ba3-aad204415037"}}}Где vpc_id — ID двух VPC, которые нужно соединить.
Для создания соединения VPC peering между VPC в разных IAM-проектах нужно получить согласование.
Пример успешного ответа на запросЧтобы в дальнейшем маршрутизировать весь трафик в сторону NAT-шлюза в сети vpc-nat-article-1, в таблице маршрутизации по умолчанию создайте статический маршрут в сторону vpc-nat-article-1:
https : // vpc . ru - moscow - 1. hc . sbercloud . ru / v2 .0 / vpc / routesВ теле запроса укажите параметры маршрута:
{"route" :{"type" : "peering" ,"nexthop" : "71c7b007-f0f9-476c-b2d1-64883066bd8d" ,"destination" : "0.0.0.0/0" ,"vpc_id" : "22fc4e0a-2cce-4f8c-9838-633f9da5acc2"}}Где:
type — тип маршрута.
next-hop — ID соединения VPC peering.
destination — все возможные source-подсети.
vpc_id — ID VPC, в котором создается маршрут.
Пример успешного ответа на запросСоздайте маршрут из сети vpc-nat-article-1 в сторону vpc-nat-article-2 для подсетей 192.168.3.0/24 и 192.168.4.0/24 с телом запроса:
{"route" :{"type" : "peering" ,"nexthop" : "71c7b007-f0f9-476c-b2d1-64883066bd8d" ,"destination" : "192.168.3.0/24" ,"vpc_id" : "7753e2db-7b2d-4c50-9ba3-aad204415037"}}Пример успешного ответа на запросДля доступа ВМ из vpc-nat-article-2 в интернет добавьте SNAT-правило:
https : // nat . ru - moscow - 1. hc . sbercloud . ru / v2 / { project_id } / snat_rulesВ теле запроса укажите:
{"snat_rule" :{"nat_gateway_id" : "c9997f19-217b-44de-b5e2-72fd6f1ad153" ,"cidr" : "192.168.3.0/24" ,"source_type" : 1 ,"floating_ip_id" : "2c5863da-53ce-4e88-b3b1-cb88b1104160" ,"description" : "subnet-servers-3 snat rule"}}Где:
nat_gateway_id — ID NAT-шлюза, для которого нужно создать SNAT-правило.
network_id — ID подсети NAT-шлюза.
floating_ip_id — ID EIP, который будет использоваться для NAT-трансляций.
source_type — 1 подразумевает сценарий DirectConnect и позволяет указать произвольный CIDR-блок из любого VPC вместо network_id, которые есть только в том же VPC, где развернут NAT-шлюз.
Пример успешного ответа на запросВ консоли Advanced подключитесь к ВМ ecs-demo-3 и проверьте доступ в интернет:
ping cloud.ruЧтобы сделать ВМ ecs-demo-3 доступной из интернета, с помощью Postman создайте DNAT-правило:
https : // nat . ru - moscow - 1. hc . sbercloud . ru / v2 / { project_id } / dnat_rulesВ теле запроса укажите:
{"dnat_rule" :{"floating_ip_id" : "6ebc0a8f-fee1-4020-be34-336ab1221c1f" ,"nat_gateway_id" : "c9997f19-217b-44de-b5e2-72fd6f1ad153" ,"private_ip" : "192.168.3.25" ,"internal_service_port" : 80 ,"protocol" : "tcp" ,"external_service_port" : 8090 ,"description" : "DNAT rule to access web on ecs-demo-3"}}Где:
floating_ip_id — ID EIP. В этом примере используется новый EIP.
nat_gateway_id — ID NAT-шлюза.
private_ip — приватный IP-адрес виртуальной машины, к которой нужен доступ из интернета.
internal_service_port — порт, на котором развернут сервис на машине.
protocol — транспортный протокол, для которого выполняется трансляция.
external_service_port — внешний порт, по которому производится обращение для получения доступа к сервису.
Пример успешного ответа на запросЧтобы проверить работу DNAT-правила, в консоли Advanced подключитесь к ВМ ecs-demo-3 и установите nginx на ecs-demo-3:
apt-get install -y nginxПроверьте статус nginx:
systemctl status nginx.serviceЧтобы проверить доступность ВМ, в браузере перейдите по IP-адресу виртуальной машины с указанием порта 8090:

Соединение установлено. Правила настроены корректно.