Настроить NAT-шлюз
Минимально необходимые роли для создания и настройки NAT-шлюза: vpc.admin
и vpc.gateways.user
.
Чтобы создать и настроить NAT-шлюз:
-
В консоли управления
перейдите в каталог, где требуется создать шлюз. -
В списке сервисов выберите Virtual Private Cloud.
-
На панели слева выберите Шлюзы.
-
Нажмите кнопку Создать.
-
Задайте имя шлюза. Требования к имени:
- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
(Опционально) Добавьте описание шлюза.
-
По умолчанию выбран тип шлюза
NAT-шлюз
. -
Нажмите кнопку Сохранить.
-
На панели слева выберите Таблицы маршрутизации.
-
Нажмите кнопку Создать, чтобы создать новую таблицу, или выберите одну из существующих.
-
Нажмите кнопку Добавить маршрут.
-
В открывшемся окне в поле Next hop выберите
Шлюз
. -
В поле Шлюз выберите созданный NAT-шлюз. Префикс назначения заполнится автоматически.
-
Нажмите кнопку Добавить.
-
Нажмите кнопку Сохранить.
Затем привяжите таблицу маршрутизации к одной из подсетей, чтобы направить трафик из нее через NAT-шлюз:
- На панели слева выберите
Подсети. - В строке нужной подсети нажмите кнопку
. - В открывшемся меню выберите пункт Привязать таблицу маршрутизации.
- В открывшемся окне выберите созданную таблицу в списке.
- Нажмите кнопку Привязать.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для создания шлюза:
yc vpc gateway create --help
-
Создайте шлюз в каталоге по умолчанию:
yc vpc gateway create \ --name test-gateway
-
Получите идентификатор шлюза:
yc vpc gateway list
Результат выполнения команды:
+----------------------+--------------+-------------+ | ID | NAME | DESCRIPTION | +----------------------+--------------+-------------+ | enpkq1v2e7p0******** | test-gateway | | +----------------------+--------------+-------------+
-
Создайте таблицу маршрутизации со шлюзом в качестве next hop и префиксом назначения
0.0.0.0/0
:yc vpc route-table create \ --name=test-route-table \ --network-name=<имя_сети> \ --route destination=0.0.0.0/0,gateway-id=enpkq1v2e7p0********
Где
--network-name
— имя сети, в которой создается таблица. -
Привяжите таблицу к подсети:
yc vpc subnet update <имя_подсети> \ --route-table-name=test-route-table
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать NAT-шлюз, указать его в качестве next hop в таблице маршрутизации и привязать таблицу к подсети используйте следующую конфигурацию:
data "yandex_vpc_network" "net" {
folder_id = "<идентификатор_каталога>"
name = "<имя_сети>"
}
resource "yandex_vpc_subnet" "subnet" {
folder_id = "<идентификатор_каталога>"
name = "<имя_подсети>"
v4_cidr_blocks = ["10.20.30.0/24"]
zone = "ru-central1-a"
network_id = data.yandex_vpc_network.net.id
route_table_id = yandex_vpc_route_table.rt.id
}
resource "yandex_vpc_gateway" "nat_gateway" {
folder_id = "<идентификатор_каталога>"
name = "test-gateway"
shared_egress_gateway {}
}
resource "yandex_vpc_route_table" "rt" {
folder_id = "<идентификатор_каталога>"
name = "test-route-table"
network_id = "<идентификатор_сети>"
static_route {
destination_prefix = "0.0.0.0/0"
gateway_id = yandex_vpc_gateway.nat_gateway.id
}
}
Где folder_id
— идентификатор каталога, в котором находится подсеть.
-
Создайте NAT-шлюз. Воспользуйтесь методом REST API create для ресурса Gateway или вызовом gRPC API GatewayService/Create и передайте в запросе:
-
Идентификатор каталога, в котором будет размещен шлюз, в параметре
folderId
. -
Имя шлюза в параметре
name
. Формат имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
-
Привяжите NAT-шлюз к новой таблице маршрутизации. Для этого воспользуйтесь методом REST API create для ресурса RouteTable или вызовом gRPC API RouteTableService/Create и передайте в запросе:
-
Идентификатор каталога, в котором будет размещена таблица маршрутизации, в параметре
folderId
. -
Имя таблицы маршрутизации в параметре
name
. Формат имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
Идентификатор сети, в которой будет размещена таблица маршрутизации, в параметре
networkId
. -
Значение
0.0.0.0/0
для префикса подсети назначения в параметреstaticRoutes[].destinationPrefix
. -
Идентификатор NAT-шлюза в параметре
staticRoutes[].gatewayId
.Чтобы узнать идентификатор NAT-шлюза, воспользуйтесь методом REST API list для ресурса Gateway или вызовом gRPC API GatewayService/List и передайте в запросе идентификатор каталога в параметре
folderId
.
-
-
Привяжите таблицу маршрутизации к подсети. Для этого воспользуйтесь методом REST API update для ресурса Subnet или вызовом gRPC API SubnetService/Update и передайте в запросе:
-
Идентификатор подсети в параметре
subnetId
.Чтобы узнать идентификатор подсети, воспользуйтесь методом REST API list для ресурса Subnet или вызовом gRPC API SubnetService/List и передайте в запросе идентификатор каталога в параметре
folderId
.О том, как узнать идентификатор каталога, читайте в разделе Получение идентификатора каталога.
-
Идентификатор таблицы маршрутизации в параметре
routeTableId
. -
Имя параметра
routeTableId
в параметреupdateMask
.
Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask
(одной строкой через запятую). -