---
canonical: https://docs.ideco.ru/v22/ru/NGFW Novum/api/services/ipsec
---

# IPsec

::: page-constructor
blocks:
  - type: content-layout-block
    textContent:
      buttons:
        - text: Классический VCE
          theme: action
          width: 'auto'
        - text: Документация
          theme: outlined
          url: https://docs.ideco.ru/v22/ru/ngfw/settings/services/ipsec
          width: 'auto'
    resetPaddings: false
    textWidth: l
    size: m
    centered: false
:::

## Соединения с устройствами

{% note info %}

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

{% endnote %}

{% cut "Получение списка соединений с устройствами" %}

```
GET /ipsec/devices
```

**Ответ на успешный запрос:**

```json5
[
    {
      "enabled": true | false,
      "id": "string",
      "name": "string",
      "type": "VTI" | "GRE",
      "xfrm_id": integer,
      "addresses": ["string"],
      "ext_interface": "string",
      "direction": "utm2device" | "device2utm",
      "auth_method": "psk" | "cert",
      "psk": "string",
      "key_id": "string",
      "key_type": "string",
      "interface_ip": "string",
      "local_networks": ["string"],
      "remote_networks": ["string"],
      "auto_routing": true | false,
      "utm_cert": "string",
      "device_cert": "string",
      "device_csr": "string",
      "device_cn": "string" | null,
      "utm_key": "string",
      "zone": "string" | null,
      "icmp_probe_dest_addr": "string",
      "netflow_index": integer,
      "cisco_compatibility": true | false,
      "legacy": true | false
    },
    ...
]
```

* `enabled` - статус соединения:
  * `true` - включено;
  * `false` - выключено.
* `id` - идентификатор соединения (строка в формате UUID);
* `name` - название соединения;
* `type` - тип соединения:
  * `VTI` - для туннельного режима;
  * `GRE` - для транспортного режима.
* `xfrm_id` - числовой идентификатор IPsec-интерфейса для этого соединения;
* `addresses` - список IP-адресов или hostname устройства, к которому осуществляется подключение. Поле `addresses` присутствует, если `direction` равен `utm2device`. Для соединений, где `type` равен `VTI`, использование более одного адреса в списке - **deprecated**. Для соединений, где `type` равен `GRE`, в списке должен быть только один адрес;
* `ext_interface` - идентификатор группы балансировки/резервирования или интерфейса, через который устанавливается соединение. Поле обязательное. Допустимые значения:
  * Для соединений, где `type` равен `GRE`, а `direction` равен `utm2device` - идентификатор с префиксом `interface.id.`;
  * Для соединений, где `type` равен `GRE`, а `direction` равен `device2utm` - идентификаторы с префиксом `interface.id.`, `any` (**deprecated**);
  * Для соединений, где `type` равен `VTI` - идентификаторы с префиксом `nexthop_group.id.` (**deprecated**), `interface.id.`, `any` (**deprecated**).
* `direction` - схема подключения NGFW Novum и устройства:
  * `utm2device` - NGFW Novum подключается к устройству;
  * `device2utm` - удаленное устройство подключается к NGFW Novum.
* `auth_method` - метод аутентификации:
  * `psk` - аутентификация по общему ключу (Pre-Shared Key);
  * `cert` - аутентификация по сертификату.
* `psk` - сессионный ключ аутентификации. Поле `psk` присутствует, если `auth_method` равен `psk`;
* `key_id` - идентификатор подключения. Поле `key_id` присутствует, если `auth_method` равен `psk`;
* `key_type` - тип идентификатора подключения:
  * `auto` - StrongSwan сам определяет тип ключа;
  * `fqdn` - идентификаторы на основе определенного доменного имени;
  * `keyid` - идентификаторы на основе ключа. Поле `key_type` присутствует, если `auth_method` равен `psk`.
* `interface_ip` - IP-адрес IPsec-интерфейса в формате `IP/prefix` или пустая строка, если адрес не задан. IP-адрес для IPsec-интерфейса не может быть нулевым (`0.0.0.0`), а также loopback (RFC 3330), multicast (RFC 3171), link-local (RFC 3927) или зарезервированным (`240.0.0.0/4`) адресом. IP-адрес должен быть обязательно задан для соединений, где `type` равен `GRE`;
* `local_networks` - для соединений, где `type` равен `VTI` - непустой список непересекающихся локальных сетей, доступных удаленному устройству, задается через идентификаторы. Для соединений, где `type` равен `GRE` - поле отсутствует. Допустимые типы:
  * `network` - подсеть;
  * `zero_subnet` - нулевая подсеть (0.0.0.0/0).
* `remote_networks` - для соединений, где `type` равен `VTI` - непустой список непересекающихся локальных сетей удаленного устройства, видимых в NGFW Novum, задается через идентификаторы. Для соединений, где `type` равен `GRE` - поле отсутствует. Допустимые типы:
  * `network` - подсеть;
  * `zero_subnet` - нулевая подсеть (0.0.0.0/0).
* `auto_routing` - режим автоматической настройки маршрутов для локальных сетей удаленного устройства. Присутствует только для соединений, где `type` равен `VTI`:
  * `true` - включен;
  * `false` - выключен.
* `utm_cert` - подписанный сертификат NGFW Novum;
* `device_cert` - подписанный сертификат удаленного устройства;
* `device_csr` - запрос на подпись сертификата, полученный от удаленного устройства. Поле `device_csr` присутствует, если `direction` равен `device2utm` и `auth_method` равен `cert`;
* `device_cn` - Common Name в запросе на подпись сертификата от удаленного устройства. Используется для валидации уникальности CN входящих подключений по сертификатам. В остальных случаях `null`;
* `utm_key` - приватный ключ, сгенерированный NGFW Novum. Поля `utm_cert`, `device_cert` и `utm_key` присутствуют, если `auth_method` равен `cert`;
* `zone` - идентификатор зоны для IPsec-интерфейса. Может быть равен `null`, если не назначен;
* `icmp_probe_dest_addr` - адрес целевого хоста ICMP-опроса. Может быть пустой строкой, если опрос отключен;
* `netflow_index` - целое число от 0 до 65535, индекс сетевого подключения для NetFlow;
* `cisco_compatibility` - разделение туннеля на отдельные Child SA для каждой пары сетей. Рекомендуется для совместимости с некоторыми устройствами (например, Cisco), если после подключения активна только часть сетей. Обязательное поле для соединений, где `type` равен `VTI`. Для соединений, где `type` равен `GRE`, поле отсутствует:
  * `true` - опция включена;
  * `false` - по умолчанию опция выключена.
* `legacy` - признак устаревшего подключения, устанавливается автоматически:
  * `true` - подключение устарело (deprecated). Необходимо пересоздать: каждое подключение должно использовать один интерфейс и один IP-адрес устройства;
  * `false` - подключение актуально.

{% endcut %}

{% cut "Создание нового соединения с устройством" %}

```
POST /ipsec/devices
```

**Json-тело запроса (все или некоторые поля):**

```json5
{
    "name": "string",
    "type": "VTI" | "GRE",
    "addresses": ["string"],
    "ext_interface": "string",
    "direction": "utm2device" | "device2utm",
    "auth_method": "psk" | "cert",
    "psk": "string",
    "key_id": "string",
    "key_type": "string",
    "interface_ip": "string",
    "local_networks": ["string"],
    "remote_networks": ["string"],
    "auto_routing": true | false,
    "utm_cert": "string",
    "device_cert": "string",
    "device_csr": "string",
    "utm_key": "string",
    "zone": "string" | null,
    "icmp_probe_dest_addr": "string",
    "netflow_index": integer,
    "cisco_compatibility": true | false
}
```

* `name` - название соединения;
* `type` - тип соединения:
  * `VTI` - для туннельного режима;
  * `GRE` - для транспортного режима.
* `addresses` - список IP-адресов или hostname устройства, к которому осуществляется подключение. Поле `addresses` присутствует, если `direction` равен `utm2device`. Для соединений, где `type` равен `VTI`, использование более одного адреса в списке - **deprecated**. Для соединений, где `type` равен `GRE`, в списке должен быть только один адрес;
* `ext_interface` - идентификатор группы балансировки/резервирования или интерфейса, через который устанавливается соединение. Поле обязательное. Допустимые значения:
  * Для соединений, где `type` равен `GRE`, а `direction` равен `utm2device` - идентификатор с префиксом `interface.id.`;
  * Для соединений, где `type` равен `GRE`, а `direction` равен `device2utm` - идентификаторы с префиксом `interface.id.`, `any` (**deprecated**);
  * Для соединений, где `type` равен `VTI` - идентификаторы с префиксом `nexthop_group.id.` (**deprecated**), `interface.id.`, `any` (**deprecated**).
* `direction` - схема подключения NGFW Novum и устройства:
  * `utm2device` - NGFW Novum подключается к устройству;
  * `device2utm` - удаленное устройство подключается к NGFW Novum.
* `auth_method` - метод аутентификации:
  * `psk` - аутентификация по общему ключу (Pre-Shared Key);
  * `cert` - аутентификация по сертификату.
* `psk` - сессионный ключ аутентификации. Поле `psk` присутствует, если `auth_method` равен `psk`;
* `key_id` - идентификатор подключения. Поле `key_id` присутствует, если `auth_method` равен `psk`;
* `key_type` - тип идентификатора подключения:
  * `auto` - StrongSwan сам определяет тип ключа;
  * `fqdn` - идентификаторы на основе определенного доменного имени;
  * `keyid` - идентификаторы на основе ключа. Поле `key_type` присутствует, если `auth_method` равен `psk`.
* `interface_ip` - IP-адрес IPsec-интерфейса в формате `IP/prefix` или пустая строка, если адрес не задан. IP-адрес для IPsec-интерфейса не может быть нулевым (`0.0.0.0`), а также loopback (RFC 3330), multicast (RFC 3171), link-local (RFC 3927) или зарезервированным (`240.0.0.0/4`) адресом. IP-адрес должен быть обязательно задан для соединений, где `type` равен `GRE`;
* `local_networks` - для соединений, где `type` равен `VTI` - непустой список непересекающихся локальных сетей, доступных удаленному устройству, задается через идентификаторы. Для соединений, где `type` равен `GRE` - поле отсутствует. Допустимые типы:
  * `network` - подсеть;
  * `zero_subnet` - нулевая подсеть (0.0.0.0/0).
* `remote_networks` - для соединений, где `type` равен `VTI` - непустой список непересекающихся локальных сетей удаленного устройства, видимых в NGFW Novum, задается через идентификаторы. Для соединений, где `type` равен `GRE` - поле отсутствует. Допустимые типы:
  * `network` - подсеть;
  * `zero_subnet` - нулевая подсеть (0.0.0.0/0).
* `auto_routing` - режим автоматической настройки маршрутов для локальных сетей удаленного устройства. Присутствует только для соединений, где `type` равен `VTI`:
  * `true` - включен;
  * `false` - выключен.
* `utm_cert` - подписанный сертификат NGFW Novum;
* `device_cert` - подписанный сертификат удаленного устройства;
* `device_csr` - запрос на подпись сертификата, полученный от удаленного устройства. Поле `device_csr` присутствует, если `direction` равен `device2utm` и `auth_method` равен `cert`;
* `utm_key` - приватный ключ, сгенерированный NGFW Novum. Поля `utm_cert`, `device_cert` и `utm_key` присутствуют, если `auth_method` равен `cert`;
* `zone` - идентификатор зоны для IPsec-интерфейса. Может быть равен `null`, если не назначен;
* `icmp_probe_dest_addr` - адрес целевого хоста ICMP-опроса. Может быть пустой строкой, если опрос отключен;
* `netflow_index` - целое число от 0 до 65535, индекс сетевого подключения для NetFlow;
* `cisco_compatibility` - разделение туннеля на отдельные Child SA для каждой пары сетей. Рекомендуется для совместимости с некоторыми устройствами (например, Cisco), если после подключения активна только часть сетей. Обязательное поле для соединений, где `type` равен `VTI`. Для соединений, где `type` равен `GRE`, поле отсутствует:
  * `true` - опция включена;
  * `false` - по умолчанию опция выключена.

**Ответ на успешный запрос:**

```json5
{
  "id": "string"
}
```

* `id` - идентификатор добавленного соединения.

{% endcut %}

{% cut "Изменение настроек соединения с устройством" %}

```
PATCH /ipsec/devices/<id соединения>
```

**Json-тело запроса (все или некоторые поля):**

```json5
{
    "name": "string",
    "addresses": ["string"],
    "ext_interface": "string",
    "psk": "string",
    "key_type": "string",
    "key_id": "string",
    "interface_ip": "string",
    "local_networks": ["string"],
    "remote_networks": ["string"],
    "auto_routing": true | false,
    "enabled": true | false,
    "zone": "string" | null,
    "icmp_probe_dest_addr": "string",
    "netflow_index": integer
}
```
* `name` - название соединения;
* `addresses` - список IP-адресов или hostname устройства, к которому осуществляется подключение. Поле присутствует, если `direction` равен `utm2device`. Для соединений, где `type` равен `GRE`, в списке должен быть только один адрес;
* `ext_interface` - идентификатор группы балансировки/резервирования или интерфейса, через который устанавливается соединение. Поле обязательное. Допустимые значения:
  * Для соединений, где `type` равен `GRE`, а `direction` равен `utm2device` - идентификатор с префиксом `interface.id.`;
  * Для соединений, где `type` равен `GRE`, а `direction` равен `device2utm` - идентификаторы с префиксом `interface.id.`, `any` (**deprecated**);
  * Для соединений, где `type` равен `VTI` - идентификаторы с префиксом `nexthop_group.id.` (**deprecated**), `interface.id.`, `any` (**deprecated**).
* `psk` - сессионный ключ аутентификации. Поле присутствует, если `auth_method` равен `psk`;
* `key_type` - тип идентификатора подключения:
  * `auto` - StrongSwan сам определяет тип ключа;
  * `fqdn` - идентификаторы на основе определенного доменного имени;
  * `keyid` - идентификаторы на основе ключа. Поле `key_type` присутствует, если `auth_method` равен `psk`.
* `key_id` - идентификатор подключения. Поле присутствует, если `auth_method` равен `psk`;
* `interface_ip` - IP-адрес IPsec-интерфейса в формате `IP/prefix`. Пустая строка, если адрес не задан.
* `local_networks` - непустой список непересекающихся локальных сетей, доступных удаленному устройству, задается через идентификатор. Присутствует только для соединений, где `type` равен `VTI`. Допустимые типы:
  * `network` - подсеть;
  * `zero_subnet` - нулевая подсеть (0.0.0.0/0).
* `remote_networks` - непустой список непересекающихся локальных сетей удаленного устройства, видимых в NGFW Novum, задается через идентификаторы. Присутствует только для соединений, где `type` равен `VTI`. Допустимые типы:
  * `network` - подсеть;
  * `zero_subnet` - нулевая подсеть (0.0.0.0/0).
* `auto_routing` - режим автоматической настройки маршрутов для локальных сетей удаленного устройства. Присутствует только для соединений, где `type` равен `VTI`:
  * `true` - включен;
  * `false` - выключен.
* `enabled` - статус соединения:
  * `true` - включено;
  * `false` - выключено.
* `zone` - идентификатор зоны для IPsec-интерфейса. Может быть равен `null`, если не назначен;
* `icmp_probe_dest_addr` - адрес целевого хоста ICMP-опроса. Может быть пустой строкой, если опрос отключен;
* `netflow_index` - целое число от 0 до 65535, индекс сетевого подключения для NetFlow.

**Ответ на успешный запрос:** 200 OK

{% endcut %}

{% cut "Удаление соединения с устройством" %}

```
DELETE /ipsec/devices/<id соединения>
```

**Ответ на успешный запрос:** 200 OK

{% endcut %}

{% cut "Получение статуса соединений с устройствами" %}

```
GET /ipsec/devices/state
```

**Ответ на успешный запрос:**

```json5
{
    "id": [
        {
            "swan_id": integer,
            "peer_config": "string",
            "state": "created" | "connecting" | "established" | "passive" | "rekeying" | "rekeyed" | "deleting" | "destroying",
            "is_used": true | false,
            "isp_id": "string",
            "remote_host": "string",
            "local_nets": ["string"],
            "remote_nets": ["string"]
        },
      ...
    ],
    ...
}
```

Для каждого соединения передается список статусов подключений:

* `id` - идентификатор соединения в формате UUID:
  * `swan_id` - идентификатор IKE_SA-подключения;
  * `peer_config` - название подключения в Strongswan;
  * `state` - состояние подключения:
    * `created` - подключение создано, но еще не инициировано;
    * `connecting` - выполняется установка подключения;
    * `established` - подключение установлено и активно;
    * `passive` - ожидание входящего подключения от удаленного устройства;
    * `rekeying` - выполняется обновление ключей;
    * `rekeyed` - ключи обновлены, старое подключение ожидает удаления;
    * `deleting` - подключение удаляется;
    * `destroying` - выполняется очистка ресурсов подключения.
  * `is_used` - признак активной передачи данных через соединение:
    * `true` - соединение используется для передачи данных;
    * `false` - соединение не используется.
  * `isp_id` - идентификатор интерфейса подключения к провайдеру, используемого данным соединением;
  * `remote_host` - IP-адрес удаленного устройства;
  * `local_nets` - список локальных сетей, доступных через данное подключение;
  * `remote_nets` - список удаленных сетей, доступных через данное подключение.

{% endcut %}

{% cut "Генерация пары "ключ - запрос на подпись"" %}

```
GET /ipsec/devices/create_csr
```

**Ответ на успешный запрос:**

```json5
{
    "key": "string",
    "csr": "string"
}
```

* `key` - приватный ключ, сгенерированный NGFW Novum;
* `csr` - запрос на подпись сертификата.

{% endcut %}

## Статические системные маршруты

{% cut "Получение списка системных маршрутов" %}

```
GET /ipsec/auto_routes
```

**Ответ на успешный запрос:**

```json5
[
  {
      "id": "string",
      "name": "string",
      "destination": ["string"],
      "nexthop": "string",
      "gateway_ip": "string" | null,
      "metric": integer,
      "enabled": true | false,
      "comment": "string"
  },
  ...
]
```

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

* `id` - идентификатор маршрута;
* `name` - название (совпадает с названием соответствующего IPsec-подключения);
* `destination` - список сетей назначения в формате `IP/prefix`;
* `nexthop` - next hop, задается одним идентификатором, допустимые типы: `nexthop.id.`;
* `gateway_ip` - IP-адрес шлюза (всегда `null`);
* `metric` - метрика маршрута;
* `enabled` - маршрут включен/выключен (всегда `true`);
* `comment` - комментарий, максимальная длина 256 символов.

{% endcut %}

## Состояние модуля

{% cut "Получение состояния модуля" %}

```
GET /ipsec/state
```

**Ответ на успешный запрос:**

```json5
{
    "enabled": true | false
}
```

* `enabled` - опция раздела **IPsec**:
  * `true` - модуль включен;
  * `false` - модуль выключен.

{% endcut %}

{% cut "Изменение состояния модуля" %}

```
PATCH /ipsec/state
```

**Json-тело запроса:**

```json5
{
    "enabled": true | false
}
```

* `enabled` - опция раздела **IPsec**:
  * `true` - модуль включен;
  * `false` - модуль выключен.

**Ответ на успешный запрос:** 200 OK

{% endcut %}
