IPsec VPN

IPsec (Internet Protocol Security) - стандартизированный протокол для создания защищенных VPN туннелей с шифрованием и аутентификацией.

Обзор

IPsec обеспечивает:

  • Аутентификация - проверка подлинности сторон
  • Шифрование - защита данных от перехвата
  • Целостность - защита от изменения данных
  • Key Exchange - безопасный обмен ключами
  • Key Management - управление ключами

VyOS использует strongSwan для реализации IPsec.

Типы VPN:

  • Policy-based - на основе статических политик безопасности
  • Route-based - на основе виртуальных туннельных интерфейсов (VTI)

Применение:

  • Site-to-Site VPN между офисами
  • Remote Access (Road Warrior) для мобильных пользователей
  • Cloud connectivity (AWS, Azure, GCP)
  • Enterprise WAN

IPsec Протоколы

Authentication Header (AH) - RFC 4302

Обеспечивает:

  • Целостность данных
  • Аутентификация источника
  • Защита от replay attacks

Создает хэш на основе IP заголовка и данных.

Не обеспечивает шифрование.

Encapsulating Security Payload (ESP) - RFC 4303

Обеспечивает:

  • Шифрование данных
  • Аутентификация
  • Целостность
  • Защита от replay attacks

Рекомендуется для большинства сценариев.

IPsec Режимы

Transport Mode

IPsec заголовок вставляется между IP заголовком и заголовком протокола верхнего уровня.

[IP Header][IPsec Header][TCP/UDP Header][Data]

Используется для:

  • Host-to-host коммуникации
  • L2TP/IPsec

Tunnel Mode

Весь исходный IP пакет инкапсулируется в новый IP пакет.

[New IP Header][IPsec Header][Original IP Header][TCP/UDP Header][Data]

Используется для:

  • Site-to-Site VPN
  • Remote Access VPN
  • Gateway-to-gateway

VyOS использует Tunnel Mode по умолчанию.

IKE (Internet Key Exchange)

Протокол для безопасного согласования параметров IPsec и обмена ключами.

IKEv1

Старая версия с двумя фазами:

Phase 1 (Main Mode или Aggressive Mode):

  • Взаимная аутентификация
  • Создание защищенного канала (ISAKMP SA)
  • Обмен ключами через Diffie-Hellman

Phase 2 (Quick Mode):

  • Согласование IPsec SA
  • Создание ESP/AH туннелей

Режимы:

  • Main Mode - 6 сообщений, более безопасный (для site-to-site)
  • Aggressive Mode - 3 сообщения, менее безопасный (для road warrior)

IKEv2

Современная версия (RFC 7296):

Преимущества:

  • Меньше сообщений (4 вместо 9)
  • Встроенный NAT traversal
  • Более надежное переподключение (MOBIKE)
  • Лучшая производительность
  • Защита от DoS атак

VyOS рекомендует использовать IKEv2.

Методы аутентификации

Pre-Shared Key (PSK)

Общий секретный ключ (пароль), известный обеим сторонам.

Преимущества:

  • Простая настройка
  • Не требует PKI инфраструктуры

Недостатки:

  • Сложно масштабировать
  • Требует безопасного обмена ключом
  • Уязвим к brute-force (при слабом ключе)

Использование: Малые сети, site-to-site между 2 локациями.

RSA Keys

Использование RSA ключей для аутентификации.

Преимущества:

  • Безопаснее чем PSK
  • Проще управление чем полноценный PKI

Недостатки:

  • Требует генерации и обмена публичными ключами
  • Нет certificate revocation

X.509 Certificates (PKI)

Использование цифровых сертификатов с Certificate Authority (CA).

Преимущества:

  • Наиболее безопасный метод
  • Масштабируемость
  • Certificate revocation (CRL, OCSP)
  • Автоматическое продление сертификатов

Недостатки:

  • Сложная настройка
  • Требует PKI инфраструктуры

Использование: Корпоративные сети, remote access с множеством клиентов.

Dead Peer Detection (DPD)

Механизм обнаружения неактивных VPN туннелей.

Как работает:

  • Периодически отправляет keepalive сообщения
  • При отсутствии ответа считает peer недоступным
  • Инициирует переподключение или закрытие туннеля

Параметры:

  • action - действие при обнаружении (restart, hold, clear)
  • interval - интервал проверки (секунды)
  • timeout - таймаут ответа (секунды)

Route-based VPN (VTI)

Использует Virtual Tunnel Interface (VTI) для маршрутизации трафика через IPsec.

Преимущества

  • Динамическая маршрутизация (OSPF, BGP) через туннель
  • Проще настройка firewall (один интерфейс)
  • Гибкая маршрутизация
  • QoS и policy routing
  • Мониторинг как обычного интерфейса

Базовая конфигурация

Site A (Initiator):

# VTI интерфейс
set interfaces vti vti0 address 10.10.0.1/30
set interfaces vti vti0 description 'IPsec to Site B'

# IPsec authentication
set vpn ipsec authentication psk site-b id '203.0.113.1'
set vpn ipsec authentication psk site-b id '203.0.113.2'
set vpn ipsec authentication psk site-b secret 'SuperSecretKey123!'

# IKE group (Phase 1)
set vpn ipsec ike-group IKE-SiteB key-exchange 'ikev2'
set vpn ipsec ike-group IKE-SiteB lifetime '28800'
set vpn ipsec ike-group IKE-SiteB proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-SiteB proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-SiteB proposal 1 hash 'sha256'

# ESP group (Phase 2)
set vpn ipsec esp-group ESP-SiteB lifetime '3600'
set vpn ipsec esp-group ESP-SiteB pfs 'dh-group14'
set vpn ipsec esp-group ESP-SiteB proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-SiteB proposal 1 hash 'sha256'

# Peer configuration
set vpn ipsec site-to-site peer site-b authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer site-b authentication pre-shared-secret 'site-b'
set vpn ipsec site-to-site peer site-b connection-type 'initiate'
set vpn ipsec site-to-site peer site-b ike-group 'IKE-SiteB'
set vpn ipsec site-to-site peer site-b default-esp-group 'ESP-SiteB'
set vpn ipsec site-to-site peer site-b local-address '203.0.113.1'
set vpn ipsec site-to-site peer site-b remote-address '203.0.113.2'
set vpn ipsec site-to-site peer site-b vti bind 'vti0'
set vpn ipsec site-to-site peer site-b vti esp-group 'ESP-SiteB'

# Отключить auto-install маршрутов
set vpn ipsec options disable-route-autoinstall

# Статический маршрут через VTI
set protocols static route 192.168.2.0/24 interface vti0

commit
save

Site B (Responder):

# VTI интерфейс
set interfaces vti vti0 address 10.10.0.2/30
set interfaces vti vti0 description 'IPsec to Site A'

# IPsec authentication
set vpn ipsec authentication psk site-a id '203.0.113.1'
set vpn ipsec authentication psk site-a id '203.0.113.2'
set vpn ipsec authentication psk site-a secret 'SuperSecretKey123!'

# IKE group (Phase 1)
set vpn ipsec ike-group IKE-SiteA key-exchange 'ikev2'
set vpn ipsec ike-group IKE-SiteA lifetime '28800'
set vpn ipsec ike-group IKE-SiteA proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-SiteA proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-SiteA proposal 1 hash 'sha256'

# ESP group (Phase 2)
set vpn ipsec esp-group ESP-SiteA lifetime '3600'
set vpn ipsec esp-group ESP-SiteA pfs 'dh-group14'
set vpn ipsec esp-group ESP-SiteA proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-SiteA proposal 1 hash 'sha256'

# Peer configuration
set vpn ipsec site-to-site peer site-a authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer site-a authentication pre-shared-secret 'site-a'
set vpn ipsec site-to-site peer site-a connection-type 'respond'
set vpn ipsec site-to-site peer site-a ike-group 'IKE-SiteA'
set vpn ipsec site-to-site peer site-a default-esp-group 'ESP-SiteA'
set vpn ipsec site-to-site peer site-a local-address '203.0.113.2'
set vpn ipsec site-to-site peer site-a remote-address '203.0.113.1'
set vpn ipsec site-to-site peer site-a vti bind 'vti0'
set vpn ipsec site-to-site peer site-a vti esp-group 'ESP-SiteA'

# Отключить auto-install маршрутов
set vpn ipsec options disable-route-autoinstall

# Статический маршрут через VTI
set protocols static route 192.168.1.0/24 interface vti0

commit
save

Проверка VTI туннеля

show interfaces vti
show vpn ipsec sa
ping 10.10.0.2 source-address 10.10.0.1

Policy-based VPN

Использует traffic selectors (политики) для определения какой трафик шифруется.

Базовая конфигурация

Site A:

# IPsec authentication
set vpn ipsec authentication psk site-b id '203.0.113.1'
set vpn ipsec authentication psk site-b id '203.0.113.2'
set vpn ipsec authentication psk site-b secret 'SecretPassword!'

# IKE group
set vpn ipsec ike-group IKE-GROUP key-exchange 'ikev2'
set vpn ipsec ike-group IKE-GROUP proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-GROUP proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-GROUP proposal 1 hash 'sha256'

# ESP group
set vpn ipsec esp-group ESP-GROUP proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-GROUP proposal 1 hash 'sha256'

# Peer configuration
set vpn ipsec site-to-site peer site-b authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer site-b authentication pre-shared-secret 'site-b'
set vpn ipsec site-to-site peer site-b connection-type 'initiate'
set vpn ipsec site-to-site peer site-b ike-group 'IKE-GROUP'
set vpn ipsec site-to-site peer site-b default-esp-group 'ESP-GROUP'
set vpn ipsec site-to-site peer site-b local-address '203.0.113.1'
set vpn ipsec site-to-site peer site-b remote-address '203.0.113.2'

# Traffic selectors (policies)
set vpn ipsec site-to-site peer site-b tunnel 1 local prefix '192.168.1.0/24'
set vpn ipsec site-to-site peer site-b tunnel 1 remote prefix '192.168.2.0/24'

commit
save

Site B:

# IPsec authentication
set vpn ipsec authentication psk site-a id '203.0.113.1'
set vpn ipsec authentication psk site-a id '203.0.113.2'
set vpn ipsec authentication psk site-a secret 'SecretPassword!'

# IKE group
set vpn ipsec ike-group IKE-GROUP key-exchange 'ikev2'
set vpn ipsec ike-group IKE-GROUP proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-GROUP proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-GROUP proposal 1 hash 'sha256'

# ESP group
set vpn ipsec esp-group ESP-GROUP proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-GROUP proposal 1 hash 'sha256'

# Peer configuration
set vpn ipsec site-to-site peer site-a authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer site-a authentication pre-shared-secret 'site-a'
set vpn ipsec site-to-site peer site-a connection-type 'respond'
set vpn ipsec site-to-site peer site-a ike-group 'IKE-GROUP'
set vpn ipsec site-to-site peer site-a default-esp-group 'ESP-GROUP'
set vpn ipsec site-to-site peer site-a local-address '203.0.113.2'
set vpn ipsec site-to-site peer site-a remote-address '203.0.113.1'

# Traffic selectors (policies)
set vpn ipsec site-to-site peer site-a tunnel 1 local prefix '192.168.2.0/24'
set vpn ipsec site-to-site peer site-a tunnel 1 remote prefix '192.168.1.0/24'

commit
save

Remote Access VPN (Road Warrior)

IPsec IKEv2 для мобильных клиентов.

Конфигурация сервера

# ESP group
set vpn ipsec esp-group ESP-RW lifetime '3600'
set vpn ipsec esp-group ESP-RW pfs 'disable'
set vpn ipsec esp-group ESP-RW proposal 1 encryption 'aes128gcm128'
set vpn ipsec esp-group ESP-RW proposal 1 hash 'sha256'

# IKE group
set vpn ipsec ike-group IKE-RW key-exchange 'ikev2'
set vpn ipsec ike-group IKE-RW lifetime '7200'
set vpn ipsec ike-group IKE-RW proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-RW proposal 1 encryption 'aes128gcm128'
set vpn ipsec ike-group IKE-RW proposal 1 hash 'sha256'

# IP pool для клиентов
set vpn ipsec remote-access pool rw-pool name-server '8.8.8.8'
set vpn ipsec remote-access pool rw-pool name-server '8.8.4.4'
set vpn ipsec remote-access pool rw-pool prefix '10.255.0.0/24'

# Remote access connection
set vpn ipsec remote-access connection rw authentication client-mode 'eap-mschapv2'
set vpn ipsec remote-access connection rw authentication local-id '203.0.113.1'
set vpn ipsec remote-access connection rw authentication server-mode 'x509'
set vpn ipsec remote-access connection rw authentication x509 ca-certificate 'CA1'
set vpn ipsec remote-access connection rw authentication x509 certificate 'SERVER1'
set vpn ipsec remote-access connection rw esp-group 'ESP-RW'
set vpn ipsec remote-access connection rw ike-group 'IKE-RW'
set vpn ipsec remote-access connection rw local-address '203.0.113.1'
set vpn ipsec remote-access connection rw pool 'rw-pool'

# User authentication
set vpn ipsec remote-access connection rw authentication local-users username alice password 'SecurePass123!'
set vpn ipsec remote-access connection rw authentication local-users username bob password 'AnotherPass456!'

commit
save

Сертификаты для Remote Access

Генерация CA:

generate pki ca install ca-name CA1

Генерация серверного сертификата:

generate pki certificate sign ca-name CA1 install certificate-name SERVER1

Экспорт CA сертификата для клиентов:

show pki ca CA1 certificate

Encryption Algorithms

IKE Encryption

Рекомендуемые (по убыванию приоритета):

  • aes256gcm128 - AES-256 GCM (AEAD, самый современный)
  • aes256 - AES-256 CBC
  • aes192 - AES-192 CBC
  • aes128gcm128 - AES-128 GCM
  • aes128 - AES-128 CBC

Устаревшие (не рекомендуется):

  • 3des - Triple DES
  • des - DES

Hash Algorithms

Рекомендуемые:

  • sha512 - SHA-512
  • sha384 - SHA-384
  • sha256 - SHA-256 (оптимальный баланс)

Устаревшие:

  • sha1 - SHA-1 (уязвим)
  • md5 - MD5 (уязвим)

Diffie-Hellman Groups

Рекомендуемые:

  • 20 - NIST P-384 (ECC, высокая безопасность)
  • 19 - NIST P-256 (ECC, оптимальный)
  • 16 - 4096-bit MODP
  • 14 - 2048-bit MODP (минимальный приемлемый)

Устаревшие:

  • 5 - 1536-bit MODP
  • 2 - 1024-bit MODP (слабый)

Perfect Forward Secrecy (PFS)

PFS использует отдельные DH обмены для каждой IPsec SA:

set vpn ipsec esp-group ESP-GROUP pfs 'dh-group14'

Опции:

  • enable - использовать DH группу из IKE
  • dh-groupN - конкретная DH группа
  • disable - без PFS (не рекомендуется)

Dead Peer Detection (DPD)

Конфигурация DPD

set vpn ipsec ike-group IKE-GROUP dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-GROUP dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-GROUP dead-peer-detection timeout '120'

action:

  • restart - перезапустить туннель
  • hold - удерживать туннель
  • clear - очистить туннель

interval: Интервал проверки (секунды), по умолчанию 30.

timeout: Таймаут ответа (секунды), по умолчанию 120.

Рекомендации DPD

  • Site-to-Site: action restart, interval 30, timeout 120
  • Remote Access: action clear, interval 15, timeout 60
  • Unstable connections: меньше interval и timeout

NAT Traversal

IPsec ESP несовместим с NAT (изменяет пакеты, нарушает integrity check).

NAT-T (NAT Traversal) решает проблему:

  • Инкапсулирует ESP в UDP порт 4500
  • Автоматически определяет NAT
  • Включен по умолчанию в VyOS

Конфигурация за NAT

Если VyOS за NAT:

set vpn ipsec site-to-site peer site-b local-address '192.168.1.1'
set vpn ipsec site-to-site peer site-b remote-address '203.0.113.2'
  • local-address - внутренний IP VyOS
  • remote-address - публичный IP удаленного peer

VyOS автоматически использует NAT-T.

Примеры конфигурации

Site-to-Site VTI с IKEv2 и AES-256

HQ (Initiator):

# VTI
set interfaces vti vti10 address 172.16.0.1/30

# PSK
set vpn ipsec authentication psk branch-01 id '198.51.100.1'
set vpn ipsec authentication psk branch-01 id '203.0.113.10'
set vpn ipsec authentication psk branch-01 secret 'MyStrongPassword123!@#'

# IKE
set vpn ipsec ike-group IKE-BRANCH key-exchange 'ikev2'
set vpn ipsec ike-group IKE-BRANCH lifetime '28800'
set vpn ipsec ike-group IKE-BRANCH proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-BRANCH proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-BRANCH proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-BRANCH dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-BRANCH dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-BRANCH dead-peer-detection timeout '120'

# ESP
set vpn ipsec esp-group ESP-BRANCH lifetime '3600'
set vpn ipsec esp-group ESP-BRANCH pfs 'dh-group14'
set vpn ipsec esp-group ESP-BRANCH proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-BRANCH proposal 1 hash 'sha256'

# Peer
set vpn ipsec site-to-site peer branch-01 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer branch-01 authentication pre-shared-secret 'branch-01'
set vpn ipsec site-to-site peer branch-01 connection-type 'initiate'
set vpn ipsec site-to-site peer branch-01 ike-group 'IKE-BRANCH'
set vpn ipsec site-to-site peer branch-01 default-esp-group 'ESP-BRANCH'
set vpn ipsec site-to-site peer branch-01 local-address '198.51.100.1'
set vpn ipsec site-to-site peer branch-01 remote-address '203.0.113.10'
set vpn ipsec site-to-site peer branch-01 vti bind 'vti10'
set vpn ipsec site-to-site peer branch-01 vti esp-group 'ESP-BRANCH'

# Options
set vpn ipsec options disable-route-autoinstall

# Routing
set protocols static route 192.168.10.0/24 interface vti10

commit
save

Branch (Responder):

# VTI
set interfaces vti vti10 address 172.16.0.2/30

# PSK
set vpn ipsec authentication psk hq id '198.51.100.1'
set vpn ipsec authentication psk hq id '203.0.113.10'
set vpn ipsec authentication psk hq secret 'MyStrongPassword123!@#'

# IKE
set vpn ipsec ike-group IKE-HQ key-exchange 'ikev2'
set vpn ipsec ike-group IKE-HQ lifetime '28800'
set vpn ipsec ike-group IKE-HQ proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-HQ proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-HQ proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE-HQ dead-peer-detection action 'restart'
set vpn ipsec ike-group IKE-HQ dead-peer-detection interval '30'
set vpn ipsec ike-group IKE-HQ dead-peer-detection timeout '120'

# ESP
set vpn ipsec esp-group ESP-HQ lifetime '3600'
set vpn ipsec esp-group ESP-HQ pfs 'dh-group14'
set vpn ipsec esp-group ESP-HQ proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-HQ proposal 1 hash 'sha256'

# Peer
set vpn ipsec site-to-site peer hq authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer hq authentication pre-shared-secret 'hq'
set vpn ipsec site-to-site peer hq connection-type 'respond'
set vpn ipsec site-to-site peer hq ike-group 'IKE-HQ'
set vpn ipsec site-to-site peer hq default-esp-group 'ESP-HQ'
set vpn ipsec site-to-site peer hq local-address '203.0.113.10'
set vpn ipsec site-to-site peer hq remote-address '198.51.100.1'
set vpn ipsec site-to-site peer hq vti bind 'vti10'
set vpn ipsec site-to-site peer hq vti esp-group 'ESP-HQ'

# Options
set vpn ipsec options disable-route-autoinstall

# Routing
set protocols static route 192.168.1.0/24 interface vti10

commit
save

Hub-and-Spoke с Multiple Branches

Hub:

# VTI для Branch 1
set interfaces vti vti10 address 172.16.10.1/30
set vpn ipsec authentication psk branch-01 id 'hub'
set vpn ipsec authentication psk branch-01 id 'branch-01'
set vpn ipsec authentication psk branch-01 secret 'Branch01Secret!'

set vpn ipsec site-to-site peer branch-01 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer branch-01 authentication pre-shared-secret 'branch-01'
set vpn ipsec site-to-site peer branch-01 connection-type 'respond'
set vpn ipsec site-to-site peer branch-01 ike-group 'IKE-BRANCHES'
set vpn ipsec site-to-site peer branch-01 default-esp-group 'ESP-BRANCHES'
set vpn ipsec site-to-site peer branch-01 local-address '198.51.100.1'
set vpn ipsec site-to-site peer branch-01 remote-address '203.0.113.10'
set vpn ipsec site-to-site peer branch-01 vti bind 'vti10'
set vpn ipsec site-to-site peer branch-01 vti esp-group 'ESP-BRANCHES'

# VTI для Branch 2
set interfaces vti vti20 address 172.16.20.1/30
set vpn ipsec authentication psk branch-02 id 'hub'
set vpn ipsec authentication psk branch-02 id 'branch-02'
set vpn ipsec authentication psk branch-02 secret 'Branch02Secret!'

set vpn ipsec site-to-site peer branch-02 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer branch-02 authentication pre-shared-secret 'branch-02'
set vpn ipsec site-to-site peer branch-02 connection-type 'respond'
set vpn ipsec site-to-site peer branch-02 ike-group 'IKE-BRANCHES'
set vpn ipsec site-to-site peer branch-02 default-esp-group 'ESP-BRANCHES'
set vpn ipsec site-to-site peer branch-02 local-address '198.51.100.1'
set vpn ipsec site-to-site peer branch-02 remote-address '203.0.113.20'
set vpn ipsec site-to-site peer branch-02 vti bind 'vti20'
set vpn ipsec site-to-site peer branch-02 vti esp-group 'ESP-BRANCHES'

# Routing
set protocols static route 192.168.10.0/24 interface vti10
set protocols static route 192.168.20.0/24 interface vti20

commit
save

Remote Access с EAP-MSCHAPv2

# ESP/IKE groups
set vpn ipsec esp-group ESP-MOBILE lifetime '3600'
set vpn ipsec esp-group ESP-MOBILE proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP-MOBILE proposal 1 hash 'sha256'

set vpn ipsec ike-group IKE-MOBILE key-exchange 'ikev2'
set vpn ipsec ike-group IKE-MOBILE proposal 1 dh-group '14'
set vpn ipsec ike-group IKE-MOBILE proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE-MOBILE proposal 1 hash 'sha256'

# IP pool
set vpn ipsec remote-access pool mobile-pool name-server '8.8.8.8'
set vpn ipsec remote-access pool mobile-pool prefix '10.255.0.0/24'

# Remote access connection
set vpn ipsec remote-access connection mobile authentication client-mode 'eap-mschapv2'
set vpn ipsec remote-access connection mobile authentication local-id 'vpn.company.com'
set vpn ipsec remote-access connection mobile authentication server-mode 'x509'
set vpn ipsec remote-access connection mobile authentication x509 ca-certificate 'CompanyCA'
set vpn ipsec remote-access connection mobile authentication x509 certificate 'VPNServer'
set vpn ipsec remote-access connection mobile esp-group 'ESP-MOBILE'
set vpn ipsec remote-access connection mobile ike-group 'IKE-MOBILE'
set vpn ipsec remote-access connection mobile local-address '203.0.113.1'
set vpn ipsec remote-access connection mobile pool 'mobile-pool'

# Users
set vpn ipsec remote-access connection mobile authentication local-users username john password 'JohnPass123!'
set vpn ipsec remote-access connection mobile authentication local-users username jane password 'JanePass456!'
set vpn ipsec remote-access connection mobile authentication local-users username admin password 'AdminSecure789!'

commit
save

Операционные команды

Просмотр IPsec статуса

Все SA (Security Associations):

show vpn ipsec sa

Детали конкретного peer:

show vpn ipsec sa peer 203.0.113.10

IKE SA:

show vpn ike sa

Просмотр конфигурации

show configuration commands | grep ipsec

Статистика

show vpn ipsec statistics

Debug

Включить logging:

set vpn ipsec logging log-level 2
commit

Уровни (0-4):

  • 0 - только критичные ошибки
  • 1 - ошибки
  • 2 - информация (рекомендуется для troubleshooting)
  • 3 - debug
  • 4 - verbose debug

Просмотр логов:

show log vpn ipsec

Или через journald:

journalctl -u strongswan

Перезапуск туннеля

restart vpn ipsec peer branch-01

Все туннели:

restart vpn

Reset SA

reset vpn ipsec peer branch-01

Интеграция

С Firewall

Разрешить IKE и ESP:

# IKE (UDP 500)
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 destination port 500
set firewall ipv4 input filter rule 100 protocol udp
set firewall ipv4 input filter rule 100 description 'IPsec IKE'

# NAT-T (UDP 4500)
set firewall ipv4 input filter rule 101 action accept
set firewall ipv4 input filter rule 101 destination port 4500
set firewall ipv4 input filter rule 101 protocol udp
set firewall ipv4 input filter rule 101 description 'IPsec NAT-T'

# ESP (protocol 50)
set firewall ipv4 input filter rule 102 action accept
set firewall ipv4 input filter rule 102 protocol esp
set firewall ipv4 input filter rule 102 description 'IPsec ESP'

commit

Для VTI интерфейсов:

set firewall ipv4 input filter rule 200 action accept
set firewall ipv4 input filter rule 200 inbound-interface name vti0
set firewall ipv4 input filter rule 200 description 'Allow from VPN'

commit

С NAT

Exclude VPN трафика от NAT:

# Exclude site-to-site VPN traffic
set nat source rule 100 destination address 192.168.10.0/24
set nat source rule 100 exclude
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 192.168.1.0/24

# Regular NAT для интернета
set nat source rule 200 outbound-interface name eth0
set nat source rule 200 source address 192.168.1.0/24
set nat source rule 200 translation address masquerade

commit

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

OSPF через VTI:

set interfaces vti vti0 address 172.16.0.1/30

set protocols ospf interface vti0 area 0
set protocols ospf interface vti0 authentication md5 key-id 1 md5-key 'OspfSecret!'
set protocols ospf interface vti0 network point-to-point

commit

BGP через VTI:

set interfaces vti vti0 address 172.16.0.1/30

set protocols bgp system-as 65001
set protocols bgp neighbor 172.16.0.2 remote-as 65002
set protocols bgp neighbor 172.16.0.2 update-source 172.16.0.1

commit

Устранение неполадок

Туннель не поднимается

Проверьте статус:

show vpn ipsec sa

Если пусто - туннель не установлен.

Проверьте:

  1. Доступность peer:

    ping 203.0.113.10
  2. Firewall правила:

    show firewall

    Должны быть разрешены UDP 500, UDP 4500, ESP (50).

  3. PSK совпадает на обеих сторонах

  4. IKE и ESP параметры совпадают

  5. Логи:

    show log vpn ipsec

Phase 1 успешна, Phase 2 нет

Проверьте:

  • ESP group параметры (encryption, hash)
  • Traffic selectors (local/remote prefix)
  • Firewall не блокирует ESP

Туннель периодически падает

Проверьте:

  • DPD настройки
  • MTU проблемы (установите MTU 1400 на VTI)
  • Unstable connection (измените DPD interval)

Низкая производительность

  1. MTU optimization:

    set interfaces vti vti0 mtu 1400
    commit
  2. Hardware offloading: Проверьте поддержку AES-NI на CPU:

    cat /proc/cpuinfo | grep aes
  3. Используйте AES-GCM:

    set vpn ipsec esp-group ESP-GROUP proposal 1 encryption 'aes256gcm128'
  4. Отключите PFS (если не критично):

    set vpn ipsec esp-group ESP-GROUP pfs 'disable'

NAT Traversal проблемы

Если peer за NAT и туннель не работает:

  1. Убедитесь что UDP 4500 разрешен
  2. Проверьте что NAT-T включен (по умолчанию)
  3. Попробуйте форсировать encapsulation:
    set vpn ipsec site-to-site peer site-b force-udp-encapsulation
    commit

Certificate проблемы

Проверьте сертификаты:

show pki ca
show pki certificate

Убедитесь:

  • CA certificate установлен
  • Server certificate подписан CA
  • Certificate не истек
  • CN (Common Name) совпадает с local-id

Безопасность

Рекомендации

  1. Используйте IKEv2 - более безопасен чем IKEv1

  2. Сильные алгоритмы:

    • Encryption: AES-256-GCM или AES-256
    • Hash: SHA-256 или выше
    • DH Group: 14 или выше
  3. PFS (Perfect Forward Secrecy):

    set vpn ipsec esp-group ESP-GROUP pfs 'dh-group14'
  4. Certificate authentication для remote access (вместо PSK)

  5. Сильные PSK:

    • Минимум 20 символов
    • Случайные символы
    • Используйте password generator
  6. Firewall для VPN трафика:

    set firewall ipv4 forward filter rule 100 action accept
    set firewall ipv4 forward filter rule 100 inbound-interface name vti0
    set firewall ipv4 forward filter rule 100 destination address 192.168.1.0/24
  7. Логирование:

    set vpn ipsec logging log-level 1
  8. Регулярное обновление VyOS для security patches

  9. Monitoring состояния туннелей

  10. Certificate rotation - обновляйте сертификаты до истечения

Избегайте

  • IKEv1 Aggressive Mode (уязвим к offline attacks)
  • Weak algorithms: 3DES, MD5, SHA1, DH group < 14
  • Weak PSK (короткие или словарные пароли)
  • Отключение DPD
  • Отключение PFS (если возможно)

Производительность

Optimization

  1. Hardware AES: Используйте CPU с AES-NI инструкциями для ускорения шифрования.

  2. AES-GCM:

    set vpn ipsec esp-group ESP-GROUP proposal 1 encryption 'aes256gcm128'

    GCM быстрее CBC и обеспечивает AEAD.

  3. MTU tuning:

    set interfaces vti vti0 mtu 1400
    commit

    Уменьшает фрагментацию.

  4. MSS clamping:

    set firewall ipv4 forward filter rule 10 action accept
    set firewall ipv4 forward filter rule 10 protocol tcp
    set firewall ipv4 forward filter rule 10 tcp flags syn
    set firewall ipv4 forward filter rule 10 tcp mss 1360
  5. Rekey optimization:

    set vpn ipsec ike-group IKE-GROUP lifetime '28800'
    set vpn ipsec esp-group ESP-GROUP lifetime '3600'

    Баланс между security и performance.

Benchmark

Тестирование пропускной способности:

iperf3 -c 192.168.2.1 -t 60

Через VTI:

iperf3 -c 172.16.0.2 -B 172.16.0.1 -t 60

Лучшие практики

  1. Route-based VPN (VTI) - для гибкости
  2. IKEv2 - для надежности
  3. Certificates - для масштабируемости
  4. DPD - всегда включен
  5. PFS - для forward secrecy
  6. Logging - включен для troubleshooting
  7. Мониторинг - отслеживайте состояние туннелей
  8. Документация - описывайте каждый туннель
  9. Naming convention - понятные имена (site-name, не ip)
  10. Резервирование - backup туннели для critical links

Ограничения

  • Максимум производительности зависит от CPU (AES encryption)
  • Policy-based VPN не поддерживает динамическую маршрутизацию
  • Remote access ограничен IKEv2 (IKEv1 не поддерживается для road warrior)
  • Certificate revocation требует CRL или OCSP setup

Следующие шаги

  • WireGuard - современная альтернатива IPsec
  • OpenVPN - SSL VPN
  • VTI Interfaces - детали VTI интерфейсов
  • Firewall - защита VPN трафика
  • NAT - exclude VPN от NAT