- tocdepth
2
Настройка доступа в интернет через 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-проектах нужно получить согласование.
Пример успешного ответа на запрос
{ "peering": { "name": "article1-2", "description": "", "accept_vpc_info": { "tenant_id": "10fa547da18027332f4cc0136b2faa85", "vpc_id": "7753e2db-7b2d-4c50-9ba3-aad204415037" }, "updated_at": "2024-04-01T21:00:33", "request_vpc_info": { "tenant_id": "10fa547da18027332f4cc0136b2faa85", "vpc_id": "22fc4e0a-2cce-4f8c-9838-633f9da5acc2" }, "id": "71c7b007-f0f9-476c-b2d1-64883066bd8d", "created_at": "2024-04-01T21:00:33", "status": "ACTIVE" } }
Чтобы в дальнейшем маршрутизировать весь трафик в сторону 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, в котором создается маршрут.
Пример успешного ответа на запрос
{ "route": { "vpc_id": "22fc4e0a-2cce-4f8c-9838-633f9da5acc2", "nexthop": "71c7b007-f0f9-476c-b2d1-64883066bd8d", "type": "peering", "destination": "0.0.0.0/0", "tenant_id": "10fa547da18027332f4cc0136b2faa85", "id": "b5bdd780-fbc8-46b5-a0e3-f4a2a2768c3d" } }
Создайте маршрут из сети 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" } }
Пример успешного ответа на запрос
{ "route": { "destination": "192.168.3.0/24", "nexthop": "71c7b007-f0f9-476c-b2d1-64883066bd8d", "tenant_id": "10fa547da18027332f4cc0136b2faa85", "id": "64896c85-f392-4b19-afe6-7dceef67f00b", "type": "peering", "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-шлюз.
Пример успешного ответа на запрос
{ "snat_rule": { "id": "41855ca3-9ae3-4917-8f5b-7ecfbab66290", "nat_gateway_id": "c9997f19-217b-44de-b5e2-72fd6f1ad153", "floating_ip_id": "2c5863da-53ce-4e88-b3b1-cb88b1104160", "floating_ip_address": "87.242.121.169", "status": "PENDING_CREATE", "created_at": "2024-04-02 10:20:15.909038", "tenant_id": "10fa547da18027332f4cc0136b2faa85", "admin_state_up": true, "cidr": "192.168.3.0/24", "source_type": 1, "description": "subnet-servers-3 snat rule" } }
В консоли 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_rule": { "id": "b33bb529-687e-4036-bc1d-7089407e07a8", "floating_ip_address": "94.139.255.92", "tenant_id": "10fa547da18027332f4cc0136b2faa85", "nat_gateway_id": "c9997f19-217b-44de-b5e2-72fd6f1ad153", "protocol": "tcp", "port_id": "", "private_ip": "192.168.3.25", "internal_service_port": 80, "floating_ip_id": "6ebc0a8f-fee1-4020-be34-336ab1221c1f", "external_service_port": 8090, "created_at": "2024-04-02 11:04:26.612832", "status": "PENDING_CREATE", "admin_state_up": true, "description": "DNAT rule to access web on ecs-demo-3" } }
Чтобы проверить работу DNAT-правила, в консоли Advanced подключитесь к ВМ ecs-demo-3 и установите nginx на ecs-demo-3:
apt-get install -y nginx
Проверьте статус nginx:
systemctl status nginx.service
Чтобы проверить доступность ВМ, в браузере перейдите по IP-адресу виртуальной машины с указанием порта 8090:
![../../_images/recommendations__adv__network-api.png](../../_images/recommendations__adv__network-api.png)
Соединение установлено. Правила настроены корректно.
Была ли статья полезной?
для Dev & Test