nav-img
Evolution

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

В этом сценарии описано, как развернуть две виртуальные машины ECS в одном VPC и настроить им доступ в интернет через NAT-шлюз, а также опубликовать в интернет на одной из машин NGINX.

../../_images/schm__recommendations__adv__network-api__one-vpc.svg

Создание VPC — первый шаг при разворачивании инфраструктуры в облаке. По умолчанию виртуальная частная сеть VPC — изолированный сегмент, который недоступен снаружи и из других сетей.

  1. Чтобы начать работу с API, получите токен авторизации. Он нужен для всех API-запросов в этом сценарии.

  2. Чтобы создать VPC, отправьте POST-запрос:

    https://vpc.ru-moscow-1.hc.sbercloud.ru/v1/{project_id}/vpcs

    Где project_id — ID проекта.

    Примечание

    Чтобы узнать ID проекта, в правом верхнем углу консоли Advanced наведите курсор на имя пользователя и выберите My Credentials.

    В этот запрос добавьте заголовок X-Auth-Token и токен авторизации из заголовка X-Subject-Token, полученный на первом шаге.

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

    В этом сценарии по умолчанию во всех запросах будет использоваться этот заголовок и POST-запрос, если не указано иное.

    В теле запроса задайте параметры сети:

    {
    "vpc":{
    "name":"vpc-nat-article-1",
    "description":"NAT GW scenario 1",
    "cidr":"192.168.0.0/16"
    }
    }

    Где:

    • name — название сети.

    • description – описание сети.

    • cidr — CIDR-блок сети.

  3. В сети vpc-nat-article-1 создайте две подсети (192.168.1.0/24 и 192.168.2.0/24) из выделенного CIDR-блока:

    https://vpc.ru-moscow-1.hc.sbercloud.ru/v1/{project_id}/subnets

    В теле запроса задайте параметры подсети:

    {
    "subnet":{
    "name":"subnet-servers-1",
    "description":"",
    "cidr":"192.168.1.0/24",
    "gateway_ip":"192.168.1.1",
    "ipv6_enable":false,
    "dhcp_enable":true,
    "primary_dns":"100.125.13.59",
    "secondary_dns":"100.125.65.14",
    "dnsList":[
    "100.125.13.59",
    "100.125.65.14"
    ],
    "vpc_id":"7753e2db-7b2d-4c50-9ba3-aad204415037"
    }
    }

    Где:

    • name — название подсети.

    • vpc_id — ID VPC, в котором нужно создать подсети.

    В качестве DNS использованы внутренние DNS облака, которые позволяют получить доступ к различным внутренним сервисам облака.

    Для создаваемых подсетей IPv6 отключен.

    Одним из преимуществ использования API является большая гибкость в настройке сетевых функций облака, например, в случае создания подсетей можно отключить протокол DHCP и создать подсеть меньшего размера, чем позволяет консоль через веб-интерфейс.

  4. Выделите два публичных адреса Elastic IP для организации SNAT и DNAT на NAT-шлюзе:

    https://vpc.ru-moscow-1.hc.sbercloud.ru/v1/{proroject_id}/publicips

    В теле запроса укажите:

    {
    "publicip":{
    "type":"5_bgp",
    "ip_version":4
    },
    "bandwidth":{
    "name":"bandwidth1",
    "size":5,
    "share_type":"PER"
    }
    }

    Где:

    • type — 5_bgp означает автоматическое восстановление доступности IP-адреса после аварии, а также выбирает оптимальный путь прохождения трафика для источника этого адреса при сбое сетевого соединения.

    • size — полоса пропускания в Мбит/с.

    • share_type — PER означает выделенную полосу трафика под определенный адрес. Значение WHOLE позволяет использовать общую полосу несколькими EIP и не гарантирует постоянную скорость.

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

  6. С помощью Postman создайте NAT-шлюз:

    https://nat.ru-moscow-1.hc.sbercloud.ru/v2/{project_id}/nat_gateways

    В теле запроса укажите:

    {
    "nat_gateway":{
    "name":"nat-article-1",
    "description":"",
    "router_id":"7753e2db-7b2d-4c50-9ba3-aad204415037",
    "internal_network_id":"e119b08c-b0e4-475d-8168-12b69b987e79",
    "spec":"1",
    "enterprise_project_id":"0"
    }
    }

    Где:

    • name — название NAT-шлюза.

    • router_id — ID VPC, в котором нужно создать NAT-шлюз.

    • internal_network_id — ID подсети для NAT-шлюза.

    • spec — спецификация шлюза. В этом примере 1 — спецификация small, поддерживающая до 10 000 SNAT-трансляций.

  7. Для доступа ВМ в интернет добавьте SNAT-правило:

    https://nat.ru-moscow-1.hc.sbercloud.ru/v2/{project_id}/snat_rules

    В теле запроса укажите:

    {
    "snat_rule":{
    "nat_gateway_id":"ca0b7048-3b98-4893-83c4-3dc21f3af6b2",
    "network_id":"e119b08c-b0e4-475d-8168-12b69b987e79",
    "source_type":0,
    "floating_ip_id":"2c5863da-53ce-4e88-b3b1-cb88b1104160",
    "description":"subnet-servers-1 snat rule"
    }
    }

    Где:

    • nat_gateway_id — ID NAT-шлюза, для которого нужно создать SNAT-правило.

    • network_id — ID подсети NAT-шлюза.

    • floating_ip_id — ID EIP, который будет использоваться для NAT-трансляций.

    • source_type — 0 означает, что в качестве источника для NAT может использоваться как network_id, так и CIDR-блок.

    Добавленное правило дает доступ в интернет ВМ ecs-demo-1 в подсети subnet-servers-1.

  8. Перед открытием доступа к ВМ из интернета создайте для них группы безопасности (sg-demo-1 и sg-demo-2):

    https://vpc.ru-moscow-1.hc.sbercloud.ru/v1/{project_id}/security-groups

    В теле запроса укажите:

    {
    "security_group":{
    "name":"sg-demo-1",
    "vpc_id":"7753e2db-7b2d-4c50-9ba3-aad204415037"
    }
    }

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

  9. В группе безопасности sg-demo-1 добавьте правило, разрешающее весь входящий трафик на порт 8090:

    https://vpc.ru-moscow-1.hc.sbercloud.ru/v1/{project_id}/security-group-rules

    В теле запроса укажите:

    {
    "security_group_rule":{
    "direction":"ingress",
    "port_range_min":"80",
    "ethertype":"IPv4",
    "port_range_max":"80",
    "protocol":"tcp",
    "security_group_id":"9e280b64-8a91-4e27-a402-2164941267b1"
    }
    }

    Где:

    • direction — направление правила. Это правило работает на входящий в сторону ВМ трафик.

    • port_range_min, port_range_max — диапазон портов, на которые распространяется правило.

    • ethertype — версия IP-протоколов (IPv4 или IPv6).

    • protocol — тип транспортного протокола.

    • security_group_id — ID группы, в которую нужно добавить правило.

  10. В группу безопасности sg-demo-1 добавьте правило, разрешающее входящий трафик из группы sg-demo-2, а в группу безопасности sg-demo-2 добавьте правило, разрешающее входящий трафик из группы sg-demo-1.

    В теле запроса укажите:

    {
    "security_group_rule": {
    "description":"Allow traffic from sg-demo-2",
    "direction":"ingress",
    "ethertype":"IPv4",
    "remote_group_id":"4be07b86-5588-4c7f-9795-acedfaa9d771",
    "security_group_id":"9e280b64-8a91-4e27-a402-2164941267b1"
    }
    }

    Где remote_group_id — ID группы безопасности, трафик из которой нужно разрешить.

  11. В консоли Advanced прикрепите группы безопасности к соответствующим виртуальным машинам ECS.

  12. Перед созданием DNAT-правила получите port-id виртуальной машины ecs-demo-1 с помощью GET-запроса:

    https://ecs.ru-moscow-1.hc.sbercloud.ru/v1/{project_id}/cloudservers/{ecs_id}

    Заголовок ответа OS-EXT-IPS:port_id содержит необходимую информацию.

  13. Чтобы сделать ВМ ecs-demo-1 доступной из интернета, создайте DNAT-правило для NAT-шлюза:

    https://nat.ru-moscow-1.hc.sbercloud.ru/v2/{project_id}/dnat_rules

    В теле запроса укажите:

    {
    "dnat_rule":{
    "floating_ip_id":"65da27ef-161a-4ca4-a6de-7dbe02bb0b42",
    "nat_gateway_id":"c9997f19-217b-44de-b5e2-72fd6f1ad153",
    "port_id":"3b0f9123-d902-43e6-9000-07f93f78dd8e",
    "internal_service_port":80,
    "protocol":"tcp",
    "external_service_port":8090,
    "description":"DNAT rule to access web"
    }
    }

    Где:

    • floating_ip_id — ID EIP.

    • nat_gateway_id — ID NAT-шлюза.

    • port_id — port_id виртуальной машины, который был получен ранее.

    • internal_service_port — порт, на котором развернут сервис на машине.

    • protocol — транспортный протокол, для которого выполняется трансляция.

    • external_service_port — внешний порт, по которому производится обращение для получения доступа к сервису.

  14. В консоли Advanced подключитесь к ВМ ecs-demo-1 и проверьте доступность ВМ ecs-demo-2 из подсети subnet-servers-2:

    ping 192.168.2.240
  15. Проверьте работу SNAT-правила:

    ping cloud.ru

    Правила групп безопасности настроены корректно.

  16. Чтобы проверить работу DNAT-правила и соответствующих правил группы безопасности, установите пакет nginx:

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

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

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

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