[Документация Yandex Cloud](../../index.md) > [Yandex Virtual Private Cloud](../index.md) > [Пошаговые инструкции](index.md) > Статическая маршрутизация > Создать статический маршрут

# Создать статический маршрут

{% note info %}

Статический маршрут по умолчанию (`0.0.0.0/0`) действует на машины с публичными IP-адресами. Если вам требуется [создать NAT-инстанс](../../tutorials/routing/nat-instance/index.md), создайте его в отдельной подсети.

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

  Чтобы создать таблицу маршрутизации и добавить в нее [статические маршруты](../concepts/routing.md):

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, где требуется создать статический маршрут.
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. На панели слева выберите ![image](../../_assets/console-icons/route.svg) **Таблицы маршрутизации**.
  1. Нажмите кнопку **Создать**.
  1. Задайте имя таблицы маршрутизации. Требования к имени:

      * длина — от 3 до 63 символов;
      * может содержать строчные буквы латинского алфавита, цифры и дефисы;
      * первый символ — буква, последний — не дефис.

  1. (Опционально) Добавьте описание таблицы маршрутизации.
  1. Выберите сеть, в которой требуется создать таблицу маршрутизации.
  1. Нажмите кнопку **Добавить маршрут**.
  1. В открывшемся окне введите префикс подсети назначения в нотации CIDR.
  1. Укажите **Next hop** — IP-адрес из [разрешенных диапазонов](../concepts/network.md#subnet).
  1. Нажмите кнопку **Добавить**.
  1. Нажмите кнопку **Создать таблицу маршрутизации**.

  Чтобы использовать статические маршруты, необходимо привязать таблицу маршрутизации к подсети:

  1. На панели слева выберите ![image](../../_assets/console-icons/nodes-right.svg) **Подсети**.
  1. В строке нужной подсети нажмите кнопку ![image](../../_assets/console-icons/ellipsis.svg).
  1. В открывшемся меню выберите пункт **Привязать таблицу маршрутизации**.
  1. В открывшемся окне выберите созданную таблицу в списке.
  1. Нажмите кнопку **Привязать**.

- CLI {#cli}

  Чтобы создать таблицу маршрутизации и добавить в нее [статические маршруты](../concepts/routing.md):

  1. Посмотрите описание команды CLI для создания таблиц маршрутизации:

      ```bash
      yc vpc route-table create --help
      ```

  1. Получите идентификаторы облачных сетей в вашем облаке:

      ```bash
      yc vpc network list
      ```

      Результат:

      ```text
      +----------------------+-----------------+
      |          ID          |      NAME       |
      +----------------------+-----------------+
      | enp34hbpj8dq******** | yc-auto-subnet  |
      | enp846vf5fus******** | routes-test     |
      +----------------------+-----------------+
      ```

  1. Создайте таблицу маршрутизации в одной из сетей:

      ```bash
      yc vpc route-table create \
        --name=<имя_таблицы> \
        --network-id=<идентификатор_сети> \
        --route destination=<префикс_назначения>,next-hop=<внутренний_IP-адрес>
      ```

      Где:

      * `--name` — имя таблицы маршрутизации.
      * `--network-id` — идентификатор сети, в которой будет создана таблица.
      * `--route` — настройки маршрута, включают два параметра:

          * `destination` — префикс подсети назначения в нотации CIDR, например `0.0.0.0/0`.
          * `next-hop` — внутренний IP-адрес [виртуальной машины](../../glossary/vm.md) из [разрешенных диапазонов](../concepts/network.md#subnet), через которую будет направляться трафик, например `192.168.1.5`.

      Результат:

      ```text
      ...done
      id: enpsi6b08q2v********
      folder_id: b1gqs1teo2q2********
      created_at: "2019-06-24T09:57:54Z"
      name: test-route-table
      network_id: enp846vf5fus********
      static_routes:
      - destination_prefix: 0.0.0.0/0
        next_hop_address: 192.168.1.5
      ```

  Чтобы использовать статические маршруты, необходимо привязать таблицу маршрутизации к подсети:

  1. Получите список подсетей в вашем облаке:

      ```bash
      yc vpc subnet list
      ```

      Результат:

      ```text
      +----------------------+------------------+----------------------+----------------+---------------+------------------+
      |          ID          |       NAME       |      NETWORK ID      | ROUTE TABLE ID |     ZONE      |      RANGE       |
      +----------------------+------------------+----------------------+----------------+---------------+------------------+
      | b0cf2b0u7nhl******** | subnet-1         | enp846vf5fus******** |                | kz1-a | [192.168.0.0/24] |
      +----------------------+------------------+----------------------+----------------+---------------+------------------+
      ```

  1. Привяжите таблицу маршрутизации к одной из подсетей:

      ```bash
      yc vpc subnet update <идентификатор_подсети> \
        --route-table-id <идентификатор_таблицы_маршрутизации>
      ```

      Результат:

      ```text
      ..done
      id: b0cf2b0u7nhl********
      folder_id: b1gqs1teo2q2********
      created_at: "2019-03-12T13:27:22Z"
      name: subnet-1
      network_id: enp846vf5fus********
      zone_id: kz1-a
      v4_cidr_blocks:
      - 192.168.0.0/24
      route_table_id: enp1sdveovdp********
      ```

- Terraform {#tf}

  [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
  
  Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
  
  Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../terraform/index.md).

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../terraform/authentication.md) соответствующим способом.

  Чтобы создать таблицу маршрутизации и добавить в нее [статические маршруты](../concepts/routing.md):

  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

     * `name` — имя таблицы маршрутизации. Формат имени:

          * длина — от 3 до 63 символов;
          * может содержать строчные буквы латинского алфавита, цифры и дефисы;
          * первый символ — буква, последний — не дефис.

     * `network_id` — идентификатор сети, в которой будет создана таблица.
     * `static_route` — описание статического маршрута:

        * `destination_prefix` — префикс подсети назначения в нотации CIDR.
        * `next_hop_address` — внутренний IP-адрес виртуальной машины из [разрешенных диапазонов](../concepts/network.md#subnet), через которую будет направляться трафик.

     Пример структуры конфигурационного файла:

     ```hcl
     resource "yandex_vpc_route_table" "test-route-table" {
     name       = "<имя_таблицы_маршрутизации>"
       network_id = "<идентификатор_сети>"
       static_route {
         destination_prefix = "<префикс_назначения>"
         next_hop_address   = "<внутренний_IP-адрес>"
       }
     }
     ```

     Чтобы добавить, изменить или удалить таблицу маршрутизации, используйте ресурс `yandex_vpc_route_table` с указанием на сеть в поле `network_id` (например, `network_id = yandex_vpc_network.test_route_table.id`).

     Подробнее о параметрах ресурса `yandex_vpc_route_table` в Terraform в [документации провайдера](../../terraform/resources/vpc_route_table.md).

  1. Проверьте корректность конфигурационных файлов.

     1. В командной строке перейдите в папку, где вы создали конфигурационный файл.
     1. Выполните проверку с помощью команды:

        ```bash
        terraform plan
        ```

     Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  1. Разверните облачные ресурсы.

     1. Если в конфигурации нет ошибок, выполните команду:

        ```bash
        terraform apply
        ```

     1. Подтвердите создание ресурсов: введите в терминал слово `yes` и нажмите **Enter**.

        После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в [консоли управления](https://kz.console.yandex.cloud) или с помощью команды [CLI](../../cli/quickstart.md):

        ```bash
        yc vpc route-table list
        ```

        Результат:

        ```text
        +----------------------+-----------------------+-------------+----------------------+
        |          ID          |         NAME          | DESCRIPTION |      NETWORK-ID      |
        +----------------------+-----------------------+-------------+----------------------+
        | enpahlhr1vnl******** | terraform-route-table |             | enp0asmd9pr9******** |
        +----------------------+-----------------------+-------------+----------------------+
        ```

- API {#api}

  Чтобы создать таблицу маршрутизации и добавить в нее [статические маршруты](../concepts/routing.md), воспользуйтесь методом REST API [create](../api-ref/RouteTable/create.md) для ресурса [RouteTable](../api-ref/RouteTable/index.md) или вызовом gRPC API [RouteTableService/Create](../api-ref/grpc/RouteTable/create.md) и передайте в запросе:

  * Идентификатор каталога, в котором будет размещена таблица маршрутизации, в параметре `folderId`.
  * Имя таблицы маршрутизации в параметре `name`. Формат имени:

      * длина — от 3 до 63 символов;
      * может содержать строчные буквы латинского алфавита, цифры и дефисы;
      * первый символ — буква, последний — не дефис.

  * Идентификатор сети, в которой будет размещена таблица маршрутизации, в параметре `networkId`.
  * Префикс подсети назначения в нотации CIDR в параметре `staticRoutes[].destinationPrefix`.
  * Внутренний IP-адрес виртуальной машины, через которую будет направляться трафик, в параметре `staticRoutes[].nextHopAddress`. IP-адрес должен входить в [разрешенный диапазон](../concepts/network.md#subnet).

  Чтобы использовать статические маршруты, необходимо привязать таблицу маршрутизации к подсети. Воспользуйтесь методом REST API [update](../api-ref/Subnet/update.md) для ресурса [Subnet](../api-ref/Subnet/index.md) или вызовом gRPC API [SubnetService/Update](../api-ref/grpc/Subnet/update.md) и передайте в запросе:

  * Идентификатор подсети в параметре `subnetId`.

      Чтобы узнать идентификатор подсети, воспользуйтесь методом REST API [list](../api-ref/Subnet/list.md) для ресурса [Subnet](../api-ref/Subnet/index.md) или вызовом gRPC API [SubnetService/List](../api-ref/grpc/Subnet/list.md) и передайте в запросе идентификатор каталога в параметре `folderId`.

      О том, как узнать идентификатор каталога, читайте в разделе [Получение идентификатора каталога](../../resource-manager/operations/folder/get-id.md).

  * Идентификатор таблицы маршрутизации в параметре `routeTableId`.
  * Имя параметра `routeTableId` в параметре `updateMask`.

  {% note warning %}
  
  Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре `updateMask` (одной строкой через запятую).
  
  {% endnote %}

{% endlist %}

## Пример {#example}

Создайте таблицу маршрутизации и привяжите ее к подсети. В примере используются следующие тестовые характеристики:

* Идентификатор каталога — `b1g681qpemb4********`.
* Идентификатор сети — `enp846vf5fus********`.
* Идентификатор подсети — `b0cf2b0u7nhl********`.
* Имя таблицы маршрутизации — `test-route-table`.
* Префикс подсети назначения — `0.0.0.0/0`.
* Внутренний IP-адрес — `192.168.1.5`.

{% list tabs group=instructions %}

- CLI {#cli}

  1. Создайте таблицу маршрутизации:

      ```bash
      yc vpc route-table create \
        --name=test-route-table \
        --network-id=enp846vf5fus******** \
        --route destination=0.0.0.0/0,next-hop=192.168.1.5
      ```

  1. Привяжите таблицу маршрутизации к подсети:

      ```bash
      yc vpc subnet update b0cf2b0u7nhl******** \
        --route-table-id enp1sdveovdp********
      ```

- Terraform {#tf}

  1. Опишите в конфигурационном файле параметры таблицы маршрутизации и укажите параметр `route_table_id` для подсети:

      ```hcl
      resource "yandex_vpc_route_table" "test_route_table" {
        name       = "test-route-table"
        network_id = "enp846vf5fus********"
        static_route {
          destination_prefix = "0.0.0.0/0"
          next_hop_address   = "192.168.1.5"
        }
      }

      resource "yandex_vpc_subnet" "example_subnet" {
        name           = "example-subnet"
        network_id     = "enp846vf5fus********"
        zone           = kz1-a
        v4_cidr_blocks = ["10.2.0.0/16"]
        # Привязка таблицы маршрутизации к подсети
        route_table_id = yandex_vpc_route_table.test_route_table.id
      }
      ```

      Подробнее о ресурсах, которые вы можете создать с помощью Terraform в [документации провайдера](../../terraform/resources/vpc_route_table.md).

  1. Проверьте корректность настроек.

     1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
     1. Выполните команду:
     
        ```bash
        terraform validate
        ```
     
        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  1. Примените изменения.

     1. Выполните команду для просмотра планируемых изменений:
     
        ```bash
        terraform plan
        ```
     
        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
     
     1. Если вас устраивают планируемые изменения, внесите их:
        1. Выполните команду:
     
           ```bash
           terraform apply
           ```
     
        1. Подтвердите изменение ресурсов.
        1. Дождитесь завершения операции.

- API {#api}

  1. Чтобы создать таблицу маршрутизации, воспользуйтесь методом REST API [create](../api-ref/RouteTable/create.md) для ресурса [RouteTable](../api-ref/RouteTable/index.md) или вызовом gRPC API [RouteTableService/Create](../api-ref/grpc/RouteTable/create.md) и передайте в теле запроса:

      ```api
      {
        "folderId": "b1g681qpemb4********",
        "name": "test-route-table",
        "networkId": "enp846vf5fus********",
        "staticRoutes": [
          {
            "destinationPrefix": "0.0.0.0/0",
            "nextHopAddress": "192.168.1.5"
          }
        ]
      }
      ```

  1. Чтобы привязать таблицу маршрутизации к подсети, воспользуйтесь методом REST API [update](../api-ref/Subnet/update.md) для ресурса [Subnet](../api-ref/Subnet/index.md) или вызовом gRPC API [SubnetService/Update](../api-ref/grpc/Subnet/update.md) и передайте в теле запроса:

      ```api
      {
        "updateMask": "routeTableId",
        "subnet": {
          "routeTableId": "enpfs106jh40********"
        }
      }
      ```

{% endlist %}