Site-to-Site VPN#

Описание#

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

Для конфигурирования Site-to-Site подключений необходимо добавить участников VPN сети с помощью команды set vpn ipsec site-to-site.

Удаленный участник VPN сети может быть идентифицирован с помощью следующих данных:

  • IPv4 или IPv6 адреса. Этот способ является самым простым и используется в случае назначения участникам VPN сети статических публичных IP адресов.

  • Имя хоста. Этот способ аналогичен предыдущему, только с одним отличием - указывается DNS имя участника VPN сети вместо IP адреса. Используется в случае, если участник имеет публичный IP адрес и DNS имя, но IP адрес может иногда изменяться.

  • Идентификатор удаленного участника VPN сети. Этот способ не предусматривает задания IP-адреса или DNS имени участника VPN сети. Используется в случае, если участник не имеет доступных публичных IP адресов (например, в случае использования трансляции адресов - NAT) или IP адреса могут быть изменены.

Каждый участник VPN сети Site-to-Site располагает следующим набором параметров:

  • authentication - набор параметров аутентификации между устройством под управлением ПО Факел и удаленным участником VPN сети:

    • id - локальный идентификатор устройства под управлением ПО Факел. Если данный параметр задан, то в процессе аутентификации он будет направлен удаленному участнику VPN сети;

    • mode - режим аутентификации между устройством под управлением ПО Факел и удаленным участником VPN сети:

      • pre-shared-secret - последовательность символов, представляющая собой общий секретный ключ, который должен быть одинаковым как для локальной, так и для удаленной стороны защищенной коммуникации;

      • rsa - общий RSA ключ, который должен быть определен в секции set vpn rsa-keys конфигурации;

      • x509 - инфраструктура сертификатов, используемая для аутентификации.

    • pre-shared-secret - общий секретный ключ, используется в случае, если задан параметр mode pre-shared-secret;

    • remote-id - идентификатор удаленного участника VPN сети, который используется вместо DNS имени или IP адреса. Данный параметр рекомендуется использовать в случае, если удаленный участник VPN сети находится за устройством с настроенным механизмом трансляции адресов (NAT) или если задан параметр mode x509;

    • rsa-key-name - общий RSA ключ, используемый для аутентификации, который должен быть определен в секции set vpn rsa-keys конфигурации;

    • use-x509-id - признак использования локального идентификатора из сертификата X.509. Данный параметр не может быть использован совместно с заданным параметром id;

    • x509 - набор параметров аутентификации с использованием сертификатов X.509:

      • ca-cert-file - путь до файла сертификата удостоверяющего центра. Используется для аутентификации удаленного участника VPN сети;

      • cert-file - путь до файла сертификата, используемого для аутентификации локального участника VPN сети по отношению к удаленному участнику;

      • crl-file - путь до файла со списком отозванных сертификатов, который используется для проверки действительности сертификата удаленного участника VPN сети;

      • key - закрытый ключ, который используется для аутентификации локального участника VPN сети по отношению к удаленному участнику:

        • file - путь до контейнера с закрытым ключом;

        • password - пароль для доступа к контейнеру с закрытым ключом (опционально).

  • connection-type - режим взаимодействия устройства под управлением ПО Факел с удаленными участниками VPN сети:

    • initiate - режим, при котором устройство пытается установить соединение с удаленным участником VPN сети сразу после применения конфигурации и после перезагрузки. В этом режиме соединение не будет установлено повторно в случае его разрыва. Рекомендуется использовать только совместно механизмом DPD или другими механизмами контроля соединений.

    • respond - режим, при котором устройство не пытается установить соединение с удаленным участником VPN сети. В этом режиме IPSec-сессия будет установлена по инициативе удаленного участника. Рекомендуется использовать в случае, если отсутствует прямое подключение к удаленному участнику, например, из-за того, что он находится за межсетевым экраном или устройством с настроенным механизмом трансляции адресов (NAT).

  • default-esp-group - группа алгоритмов для протокола ESP по умолчанию, которая будет использована при шифровании передаваемых данных. Группа может быть переопределена отдельными настройками туннеля или VTI интерфейса;

  • description - краткое описание для локального участника VPN сети;

  • dhcp-interface - признак использования IP адреса, полученного локальным участником VPN сети по протоколу DHCP, для установления IPSec сессий вместо адреса, указанного в параметре local-address;

  • force-encapsulation - признак принудительной инкапсуляции ESP пакетов в UDP. Рекомендуется использовать в случае, если между локальным и удаленным участниками VPN сети находится межсетевой экран или устройство с настроенным механизмом трансляции адресом (NAT), которое не может обрабатывать ESP пакеты;

  • ike-group - группа алгоритмов для протокола IKE, которая будет использована при обмене ключами;

  • ikev2-reauth - режим повторной аутентификации удаленного участника VPN сети при смене ключей, которая выполняется только в рамках протокола IKEv2:

    • yes - режим, при котором со сменой ключей осуществляется попытка повторного создания всех ранее созданных записей в новой таблице SA;

    • no - режим, при котором со сменой ключей не происходит изменений изменений в части записей таблицы SA;

    • inherit - режим, при котором со сменой ключей используется порядок действий по умолчанию, обусловленный выбранной группой алгоритмов для протокола IKE.

  • local-address - локальный IP адрес для подключения к данному участнику VPN сети. При значении any используется IP адрес интерфейса, на который указывает маршрут по умолчанию.

  • tunnel - классификатор трафика, при соответствии которому принимается решение о шифровании данных, перед их передачей другому участнике VPN сети:

    • disable - признак отключения данного туннеля;

    • esp-group - группа алгоритмов для протокола ESP по отношению к выбранному туннелю;

    • local - локальный отправитель трафика, для которого выполняется шифрование перед передачей данному участнику VPN сети:

      • port - номер порта отправителя, учитывается только при совместном использовании с параметром prefix;

      • prefix - IP адрес сети на локальной стороне.

    • protocol - протокол, для которого выполняется шифрование перед передачей данному участнике VPN сети;

    • remote - удаленный получатель трафика, для которого выполняется шифрование перед передачей данному участнику VPN сети:

      • port - номер порта отправителя, учитывается только при совместном использовании с параметром prefix;

      • prefix - IP адрес сети на удаленной стороне.

  • vti - набор параметров использования VTI интерфейса для шифрования трафика. Любой трафик, который будет отправлен на VTI интерфейс, будет зашифрован и отправлен данному участнику VPN сети. Использование VTI интерфейса упрощает настройку механизма IPSec и предоставляет некоторую гибкость в сложных сценариях использования, а также позволяет динамически добавлять и удалять сети, доступные через удаленного участника VPN сети, так как в этом режиме для устройства не требуется создание дополнительных записей в таблице SA или политик SP для каждой удаленной сети:

    • bind - параметр, который позволяет выбрать и привязать к данному участнике VPN сети определенный VTI интерфейс;

    • esp-group - группа алгоритмов для протокола ESP, которая будет использована для шифрования трафика, проходящего через данный VTI интерфейс.

Настройка#

Пример настройки#

Протокол IKEv1#

В данном примере рассматривается настройка взаимодействия двух устройств, которые для удобства обозначены Левой стороной и Правой стороной соответственно, при следующих условиях:

  • в качестве внешнего (WAN) интерфейса рассматривается интерфейс eth1;

  • левая подсеть с адресом 192.168.0.0/24 рассматривается как сеть головного офиса;

  • локальный IP адрес левой стороны 198.51.100.3 рассматривается как внешний (WAN) IP адрес головного офиса;

  • правая подсеть с адресом 10.0.0.0/24 рассматривается как сеть удаленного филиала;

  • локальный IP адрес правой стороны 203.0.113.2 рассматривается как внешний (WAN) IP адрес удаленного филиала;

# hq side
set vpn ipsec esp-group office-srv-esp compression 'disable'
set vpn ipsec esp-group office-srv-esp lifetime '1800'
set vpn ipsec esp-group office-srv-esp mode 'tunnel'
set vpn ipsec esp-group office-srv-esp pfs 'enable'
set vpn ipsec esp-group office-srv-esp proposal 1 encryption 'aes256'
set vpn ipsec esp-group office-srv-esp proposal 1 hash 'sha1'
set vpn ipsec ike-group office-srv-ike ikev2-reauth 'no'
set vpn ipsec ike-group office-srv-ike key-exchange 'ikev1'
set vpn ipsec ike-group office-srv-ike lifetime '3600'
set vpn ipsec ike-group office-srv-ike proposal 1 encryption 'aes256'
set vpn ipsec ike-group office-srv-ike proposal 1 hash 'sha1'
set vpn ipsec ipsec-interfaces interface 'eth1'
set vpn ipsec site-to-site peer 203.0.113.2 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 203.0.113.2 authentication pre-shared-secret 'SomePreSharedKey'
set vpn ipsec site-to-site peer 203.0.113.2 ike-group 'office-srv-ike'
set vpn ipsec site-to-site peer 203.0.113.2 local-address '198.51.100.3'
set vpn ipsec site-to-site peer 203.0.113.2 tunnel 0 allow-nat-networks 'disable'
set vpn ipsec site-to-site peer 203.0.113.2 tunnel 0 allow-public-networks 'disable'
set vpn ipsec site-to-site peer 203.0.113.2 tunnel 0 esp-group 'office-srv-esp'
set vpn ipsec site-to-site peer 203.0.113.2 tunnel 0 local prefix '192.168.0.0/24'
set vpn ipsec site-to-site peer 203.0.113.2 tunnel 0 remote prefix '10.0.0.0/21'
# branch side
set vpn ipsec esp-group office-srv-esp compression 'disable'
set vpn ipsec esp-group office-srv-esp lifetime '1800'
set vpn ipsec esp-group office-srv-esp mode 'tunnel'
set vpn ipsec esp-group office-srv-esp pfs 'enable'
set vpn ipsec esp-group office-srv-esp proposal 1 encryption 'aes256'
set vpn ipsec esp-group office-srv-esp proposal 1 hash 'sha1'
set vpn ipsec ike-group office-srv-ike ikev2-reauth 'no'
set vpn ipsec ike-group office-srv-ike key-exchange 'ikev1'
set vpn ipsec ike-group office-srv-ike lifetime '3600'
set vpn ipsec ike-group office-srv-ike proposal 1 encryption 'aes256'
set vpn ipsec ike-group office-srv-ike proposal 1 hash 'sha1'
set vpn ipsec ipsec-interfaces interface 'eth1'
set vpn ipsec site-to-site peer 198.51.100.3 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 198.51.100.3 authentication pre-shared-secret 'SomePreSharedKey'
set vpn ipsec site-to-site peer 198.51.100.3 ike-group 'office-srv-ike'
set vpn ipsec site-to-site peer 198.51.100.3 local-address '203.0.113.2'
set vpn ipsec site-to-site peer 198.51.100.3 tunnel 0 allow-nat-networks 'disable'
set vpn ipsec site-to-site peer 198.51.100.3 tunnel 0 allow-public-networks 'disable'
set vpn ipsec site-to-site peer 198.51.100.3 tunnel 0 esp-group 'office-srv-esp'
set vpn ipsec site-to-site peer 198.51.100.3 tunnel 0 local prefix '10.0.0.0/21'
set vpn ipsec site-to-site peer 198.51.100.3 tunnel 0 remote prefix '192.168.0.0/24'

После этого необходимо убедиться в результатах конфигурирования.

fakel@hq:~$ show vpn ike sa
Peer ID / IP                             Local ID / IP
------------                             -------------
203.0.113.2                              198.51.100.3

State   Encrypt   Hash   D-H Grp   NAT-T   A-Time   L-Time
-----   -------   ----   -------   -----   ------   ------
up      aes256    sha1   5         no      734      3600

fakel@hq:~$ show vpn ipsec sa
Peer ID / IP                             Local ID / IP
------------                             -------------
203.0.113.2                              198.51.100.3

Tunnel   State   Bytes Out/In   Encrypt   Hash   NAT-T   A-Time   L-Time   Proto
------   -----   ------------   -------   ----   -----   ------   ------   -----
0        up      7.5M/230.6K    aes256    sha1   no      567      1800     all

При настроенных правилах трансляции адреса отправителя (SNAT) на интерфейсе eth1 необходимо добавить исключающее правило.

# hq side
set nat source rule 10 destination address '10.0.0.0/24'
set nat source rule 10 'exclude'
set nat source rule 10 outbound-interface 'eth1'
set nat source rule 10 source address '192.168.0.0/24'
# branch side
set nat source rule 10 destination address '192.168.0.0/24'
set nat source rule 10 'exclude'
set nat source rule 10 outbound-interface 'eth1'
set nat source rule 10 source address '10.0.0.0/24'

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

# hq side
set firewall name OUTSIDE-LOCAL rule 32 action 'accept'
set firewall name OUTSIDE-LOCAL rule 32 source address '10.0.0.0/24'
# branch side
set firewall name OUTSIDE-LOCAL rule 32 action 'accept'
set firewall name OUTSIDE-LOCAL rule 32 source address '192.168.0.0/24'

Протокол IKEv2#

Рассмотрим следующую топологию сети.

../../../_images/fakel_site2site_schema.png

Примечание

Использование маски /31 для подсети туннеля допускается подключений «точка-точка» согласно RFC 3021.

Настройки на левой стороне:

set interfaces vti vti10 address '10.0.0.2/31'
set vpn ipsec esp-group ESP_DEFAULT compression 'disable'
set vpn ipsec esp-group ESP_DEFAULT lifetime '3600'
set vpn ipsec esp-group ESP_DEFAULT mode 'tunnel'
set vpn ipsec esp-group ESP_DEFAULT pfs 'dh-group19'
set vpn ipsec esp-group ESP_DEFAULT proposal 10 encryption 'aes256gcm128'
set vpn ipsec esp-group ESP_DEFAULT proposal 10 hash 'sha256'
set vpn ipsec ike-group IKEv2_DEFAULT dead-peer-detection action 'hold'
set vpn ipsec ike-group IKEv2_DEFAULT dead-peer-detection interval '30'
set vpn ipsec ike-group IKEv2_DEFAULT dead-peer-detection timeout '120'
set vpn ipsec ike-group IKEv2_DEFAULT ikev2-reauth 'no'
set vpn ipsec ike-group IKEv2_DEFAULT key-exchange 'ikev2'
set vpn ipsec ike-group IKEv2_DEFAULT lifetime '10800'
set vpn ipsec ike-group IKEv2_DEFAULT mobike 'disable'
set vpn ipsec ike-group IKEv2_DEFAULT proposal 10 dh-group '19'
set vpn ipsec ike-group IKEv2_DEFAULT proposal 10 encryption 'aes256gcm128'
set vpn ipsec ike-group IKEv2_DEFAULT proposal 10 hash 'sha256'
set vpn ipsec ipsec-interfaces interface 'eth0.201'
set vpn ipsec site-to-site peer 172.18.202.10 authentication id '172.18.201.10'
set vpn ipsec site-to-site peer 172.18.202.10 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 172.18.202.10 authentication pre-shared-secret 'secretkey'
set vpn ipsec site-to-site peer 172.18.202.10 authentication remote-id '172.18.202.10'
set vpn ipsec site-to-site peer 172.18.202.10 connection-type 'initiate'
set vpn ipsec site-to-site peer 172.18.202.10 ike-group 'IKEv2_DEFAULT'
set vpn ipsec site-to-site peer 172.18.202.10 ikev2-reauth 'inherit'
set vpn ipsec site-to-site peer 172.18.202.10 local-address '172.18.201.10'
set vpn ipsec site-to-site peer 172.18.202.10 vti bind 'vti10'
set vpn ipsec site-to-site peer 172.18.202.10 vti esp-group 'ESP_DEFAULT'

Настройки на правой стороне:

set interfaces vti vti10 address '10.0.0.3/31'
set vpn ipsec esp-group ESP_DEFAULT compression 'disable'
set vpn ipsec esp-group ESP_DEFAULT lifetime '3600'
set vpn ipsec esp-group ESP_DEFAULT mode 'tunnel'
set vpn ipsec esp-group ESP_DEFAULT pfs 'dh-group19'
set vpn ipsec esp-group ESP_DEFAULT proposal 10 encryption 'aes256gcm128'
set vpn ipsec esp-group ESP_DEFAULT proposal 10 hash 'sha256'
set vpn ipsec ike-group IKEv2_DEFAULT dead-peer-detection action 'hold'
set vpn ipsec ike-group IKEv2_DEFAULT dead-peer-detection interval '30'
set vpn ipsec ike-group IKEv2_DEFAULT dead-peer-detection timeout '120'
set vpn ipsec ike-group IKEv2_DEFAULT ikev2-reauth 'no'
set vpn ipsec ike-group IKEv2_DEFAULT key-exchange 'ikev2'
set vpn ipsec ike-group IKEv2_DEFAULT lifetime '10800'
set vpn ipsec ike-group IKEv2_DEFAULT mobike 'disable'
set vpn ipsec ike-group IKEv2_DEFAULT proposal 10 dh-group '19'
set vpn ipsec ike-group IKEv2_DEFAULT proposal 10 encryption 'aes256gcm128'
set vpn ipsec ike-group IKEv2_DEFAULT proposal 10 hash 'sha256'
set vpn ipsec ipsec-interfaces interface 'eth0.202'
set vpn ipsec site-to-site peer 172.18.201.10 authentication id '172.18.202.10'
set vpn ipsec site-to-site peer 172.18.201.10 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 172.18.201.10 authentication pre-shared-secret 'secretkey'
set vpn ipsec site-to-site peer 172.18.201.10 authentication remote-id '172.18.201.10'
set vpn ipsec site-to-site peer 172.18.201.10 connection-type 'initiate'
set vpn ipsec site-to-site peer 172.18.201.10 ike-group 'IKEv2_DEFAULT'
set vpn ipsec site-to-site peer 172.18.201.10 ikev2-reauth 'inherit'
set vpn ipsec site-to-site peer 172.18.201.10 local-address '172.18.202.10'
set vpn ipsec site-to-site peer 172.18.201.10 vti bind 'vti10'
set vpn ipsec site-to-site peer 172.18.201.10 vti esp-group 'ESP_DEFAULT'

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

  • authentication local-id/remote-id - идентификация IKE используется для валидации устройств участников VPN в процессе фазы согласования IKE. Если вы не будете использовать параметры local-id или remote-id, по умолчанию устройство будет использовать IPv4 или IPv6 адрес, соответствующий локальному или удаленному участнику VPN сети соответственно. В некоторых сетевых конфигурация, например, если используется интерфейс IPSec с динамическим адресом или устройство находится за другим устройством с настроенным механизмом трансляции адресов (NAT), идентификатор IKE, полученный от участника VPN сети, не будет совпадать со шлюзом IKE, настроенным на устройстве. Это может привести к сбою валидации в ходе Фазы 1 IKE. Поэтому очень важно убедиться в том, что параметры local-id или remote-id заданы, а также в том, что идентификатор IKE соответствует значению remote-id, сконфигурированному на другом участнике VPN сети

  • disable-route-autoinstall - данная опция отключает использование маршрутов, установленных в таблице по умолчанию с идентификатором 220 для поддержки маршрутизации в топологии Site-to-Site. Данная таблица в основном используется при настройке VTI интерфейсов.

  • dead-peer-detection action = clear | hold | restart - данная опция предусматривает периодическую отправку участнику VPN сети сообщений R_U_THERE (IKEv1) и пустых сообщений INFORMATIONAL (IKEv2) для проверки работоспособности. Значения clear, hold и restart активируют механизм DPD и определяют действия при истечении соответствующего тайм-аута. При использовании значения clear соединение разрывается без каких-либо дальнейших действий. При использовании значения hold устанавливается политика перехвата подходящего трафика с попыткой повторного согласования соединения по запросу. При использовании значения restart выполняется безусловная попытка повторного согласования соединения.

  • close-action = none | clear | hold | restart - данная опция определяет действие, которое необходимо предпринять в случае, если удаленный участник VPN сети непредвиденно удаляет дочернюю запись SA (CHILD_SA). Значение close не должно использоваться, если участник VPN сети использует повторную аутентификацию или уникальные идентификаторы. Когда данная опция установлена для участников, необходимо внимательно выбирать режим взаимодействия, задаваемый параметром connection-type. Например, если опция установлена для обоих участников VPN сети, то оба участника будут пытаться инициировать и удерживать открытыми соединения, соответствующие каждой дочерней записи SA (CHILD_SA). Это может привести к нестабильной работе устройства или исчерпанию ресурсов процессора и памяти.

Представленная ниже схема алгоритма отражает возможные комбинации в зависимости от конфигурации участника VPN сети.

../../../_images/fakel_site2site_algorithm.png

Аналогичные комбинации применимы и в случае использования механизма DPD.

Список команд#

Базовые настройки#

set vpn ipsec esp-group <text> compression <enable | disable>#
set vpn ipsec esp-group <text> lifetime <30-86400>#
set vpn ipsec esp-group <text> mode <tunnel | transport>#
set vpn ipsec esp-group <text> pfs <enable | disable | dh-groupN>#
set vpn ipsec esp-group <text> proposal <1-65535> encryption <type>#
set vpn ipsec esp-group <text> proposal <1-65535> hash <type>#
set vpn ipsec ike-group <text> ikev2-reauth <yes | no>#
set vpn ipsec ike-group <text> key-exchange <ikev1 | ikev2>#
set vpn ipsec ike-group <text> lifetime <30-86400>#
set vpn ipsec ike-group <text> proposal <1-65535> encryption <type>#
set vpn ipsec ike-group <text> proposal <1-65535> hash <type>#
set vpn ipsec ipsec-interfaces interface <ethN>#
set vpn ipsec site-to-site peer <x.x.x.x> authentication mode <pre-shared-secret | rsa | x509>'#
set vpn ipsec site-to-site peer <x.x.x.x> authentication pre-shared-secret <text>#
set vpn ipsec site-to-site peer <x.x.x.x> ike-group <text>#
set vpn ipsec site-to-site peer <x.x.x.x> local-address <x.x.x.x>#
set vpn ipsec site-to-site peer <x.x.x.x> tunnel <0-4294967295> allow-nat-networks <enable | disable>#
set vpn ipsec site-to-site peer <x.x.x.x> tunnel <0-4294967295> allow-public-networks <enable | disable>#
set vpn ipsec site-to-site peer <x.x.x.x> tunnel <0-4294967295> esp-group <text>#
set vpn ipsec site-to-site peer <x.x.x.x> tunnel <0-4294967295> local prefix <x.x.x.x/x>#
set vpn ipsec site-to-site peer <x.x.x.x> tunnel <0-4294967295> remote prefix <x.x.x.x/x>#
set interfaces vti <vtiN> address <x.x.x.x/x>#
set vpn ipsec ike-group <text> dead-peer-detection action <hold | clear | restart>#
set vpn ipsec ike-group <text> dead-peer-detection interval <2-86400>#
set vpn ipsec ike-group <text> dead-peer-detection timeout <2-86400>#
set vpn ipsec ike-group <text> mobike <enable | disable>#
set vpn ipsec ike-group <text> proposal <1-65535> dh-group <number>#
set vpn ipsec site-to-site peer <x.x.x.x> authentication id <x.x.x.x>#
set vpn ipsec site-to-site peer <x.x.x.x> authentication remote-id <x.x.x.x>#
set vpn ipsec site-to-site peer <x.x.x.x> connection-type <initiate | respond>#
set vpn ipsec site-to-site peer <x.x.x.x> ike-group <text>#
set vpn ipsec site-to-site peer <x.x.x.x> ikev2-reauth <yes | no | inherit>#
set vpn ipsec site-to-site peer <x.x.x.x> local-address <x.x.x.x>#
set vpn ipsec site-to-site peer <x.x.x.x> vti bind <vtiN>#
set vpn ipsec site-to-site peer <x.x.x.x> vti esp-group <text>#