Настройка доступа в интернет через NAT Gateway из одного VPC
В этом сценарии описано, как развернуть две виртуальные машины ECS в одном VPC и настроить им доступ в интернет через NAT-шлюз, а также опубликовать в интернет на одной из машин NGINX.
Создание VPC — первый шаг при разворачивании инфраструктуры в облаке. По умолчанию виртуальная частная сеть VPC — изолированный сегмент, который недоступен снаружи и из других сетей.
Чтобы начать работу с API, получите токен авторизации. Он нужен для всех API-запросов в этом сценарии.
Чтобы создать 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, полученный на первом шаге.
В этом сценарии по умолчанию во всех запросах будет использоваться этот заголовок и POST-запрос, если не указано иное.
В теле запроса задайте параметры сети:
{"vpc" :{"name" : "vpc-nat-article-1" ,"description" : "NAT GW scenario 1" ,"cidr" : "192.168.0.0/16"}}Где:
name — название сети.
description – описание сети.
cidr — CIDR-блок сети.
Пример успешного ответа на запросВ сети 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 и создать подсеть меньшего размера, чем позволяет консоль через веб-интерфейс.
Выделите два публичных адреса 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 и не гарантирует постоянную скорость.
Пример успешного ответа на запросВ консоли Advanced создайте две виртуальные машины ecs-demo-1 и ecs-demo-2 с ОС Linux в подсетях subnet-servers-1 и subnet-servers-2 соответственно без назначения EIP.
С помощью 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-трансляций.
Пример успешного ответа на запросДля доступа ВМ в интернет добавьте 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.
Перед открытием доступа к ВМ из интернета создайте для них группы безопасности (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"}}Пример успешного ответа на запросПо умолчанию правила в группе разрешают весь входящий трафик от ресурсов из этой же группы. Весь остальной входящий трафик запрещен. Весь исходящий трафик разрешен.
В группе безопасности 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 группы, в которую нужно добавить правило.
Пример успешного ответа на запросВ группу безопасности 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 группы безопасности, трафик из которой нужно разрешить.
Пример успешного ответа на запросВ консоли Advanced прикрепите группы безопасности к соответствующим виртуальным машинам ECS.
Перед созданием 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 содержит необходимую информацию.
Чтобы сделать ВМ 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 — внешний порт, по которому производится обращение для получения доступа к сервису.
Пример успешного ответа на запросВ консоли Advanced подключитесь к ВМ ecs-demo-1 и проверьте доступность ВМ ecs-demo-2 из подсети subnet-servers-2:
ping 192 .168.2.240Проверьте работу SNAT-правила:
ping cloud.ruПравила групп безопасности настроены корректно.
Чтобы проверить работу DNAT-правила и соответствующих правил группы безопасности, установите пакет nginx:
apt-get install -y nginxПроверьте статус nginx:
systemctl status nginx.serviceЧтобы проверить доступность ВМ, в браузере перейдите по IP-адресу виртуальной машины с указанием порта 8090:

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