tocdepth

2

Настройка доступа в интернет через NAT Gateway из двух VPC

В этом сценарии описано, как развернуть виртуальную инфраструктуру с двумя или более VPC, среди которых один VPC — центральный с NAT-шлюзом для доступа в интернет, а другие — с сервисами, связанными с центральным VPC с помощью VPC peering connection. Такая схема может использоваться для публикации множества сервисов с публичными адресами в интернет.

../../_images/schm__recommendations__adv__network-api__two-vpc.svg

Для связи 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 не пересекались друг с другом.

  1. Перед началом работы выполните сценарий с одним VPC.

  2. Создайте вторую сеть vpc-nat-article-2 с тем же CIDR-блоком, что и vpc-nat-article-1.

  3. В сети vpc-nat-article-2 создайте две подсети — 192.168.3.0/24 и 192.168.4.0/24.

  4. В консоли Advanced создайте две виртуальные машины ecs-demo-3 и ecs-demo-4 с ОС Linux в подсетях subnet-servers-3 и subnet-servers-4 соответственно без назначения EIP.

  5. С помощью 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"
        }
    }
    
  6. Чтобы в дальнейшем маршрутизировать весь трафик в сторону 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"
        }
    }
    
  7. Создайте маршрут из сети 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"
        }
    }
    
  8. Для доступа ВМ из 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"
        }
    }
    
  9. В консоли Advanced подключитесь к ВМ ecs-demo-3 и проверьте доступ в интернет:

    ping cloud.ru
    
  10. Чтобы сделать ВМ 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"
        }
    }
    
  11. Чтобы проверить работу DNAT-правила, в консоли Advanced подключитесь к ВМ ecs-demo-3 и установите nginx на ecs-demo-3:

    apt-get install -y nginx
    
  12. Проверьте статус nginx:

    systemctl status nginx.service
    
  13. Чтобы проверить доступность ВМ, в браузере перейдите по IP-адресу виртуальной машины с указанием порта 8090:

../../_images/recommendations__adv__network-api.png

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

Запустили Evolution free tier
для Dev & Test
Получить