Короткий ответ

Phase 1 (IKE SA) — это согласование криптонабора, идентичности и ключа (PSK или сертификат) по UDP 500 и, за NAT, UDP 4500 (NAT-T). Пока IKE SA нет, Phase 2 и LAN 10.0.10.0/24 не появятся. Сверьте version (IKEv1 vs IKEv2), DH/PRF/enc/integrity, remote ID и секрет. Не перебирайте алгоритмы «все сразу» на проде и не выключайте firewall на WAN.

Лог strongSwan (charon) и Windows RAS важнее зелёной галки «IPsec включён». Тишина на tcpdump udp port 500 or 4500 — сеть, не PSK.

Симптомы и как отличить

  • Клиент Windows: ошибка 809 (удалённая сторона не отвечает) или 789 (для L2TP/IPsec).
  • swanctl --list-sas / ipsec statusall пусто по IKE.
  • В логе NO_PROPOSAL_CHOSEN или AUTHENTICATION_FAILED.

Это не Phase 1, если:

  • IKE SA есть, Child SA нет — Phase 2;
  • это L2TP поверх IPsec — сначала IKE, затем PPP, L2TP;
  • нужен более простой NAT-обход — сравните с WireGuard.

Возможные причины

  1. Нет UDP 500/4500 до vpn.example.com (ACL, DNAT только 500 без 4500 за NAT).
  2. Разные IKE: клиент IKEv2, сервер только v1 (или наоборот).
  3. Несовместимый proposal: AES-GCM vs AES-CBC+SHA, DH19 vs modp1024, PRF.
  4. PSK не совпал (пробел, кодировка, другой секрет на втором устройстве).
  5. ID: IDr FQDN vs IP, leftid/rightid не те.
  6. Сертификат: просрочен, не тот EKUs, клиент не доверяет CA, имя не совпадает с ID.
  7. NAT-T выключен, клиент за NAT — IKE проходит странно, ESP без UDP encapsulation умирает (иногда выглядит как «P1 моргает»).
  8. Часы: сертификатная аутентификация чувствительна к времени.

Диагностика

1. Доходит ли IKE

На сервере:

tcpdump -n -i eth0 udp port 500 or udp port 4500
swanctl --list-conns
swanctl --list-sas
journalctl -u strongswan -u strongswan-swanctl --since '10 min ago'

Инициация с Windows:

Get-VpnConnection | Format-List Name, TunnelType, ServerAddress, ConnectionStatus, AuthenticationMethod
rasdial
Test-NetConnection vpn.example.com -Port 500

UDP-тест PowerShell ненадёжен. Ориентир — tcpdump в момент Connect.

2. Proposal

В логе ищите предложенные и принятые трансформы. strongSwan часто пишет, какой набор отвергнут. Сверьте с swanctl.conf proposals = и с политикой Windows (PowerShell Get-VpnConnection не всегда показывает DH; смотрите RRAS/GPO или Get-NetIPsecMainModeSA после частичного успеха).

Типичный рабочий IKEv2 набор (пример, не единственный): AES-GCM и DH group 19/20. Слабый modp1024 на одной стороне и запрет его на другой — NO_PROPOSAL_CHOSEN.

3. Аутентификация

AUTHENTICATION_FAILED — PSK/сертификат/ID, не firewall. Проверьте, что секрет не закоммичен с \r. Для сертификатов:

swanctl --list-certs
openssl x509 -in /etc/swanctl/x509/vpn.example.com.crt -noout -dates -ext subjectAltName

Windows: хранилище Computer, не User, для машинного туннеля.

4. NAT-T

Клиент за NAT обязан перейти на UDP 4500. Если tcpdump показывает только 500 и обрыв — фильтр 4500 или forceencaps не согласован. Windows за NAT для L2TP требует отдельного реестра (статья L2TP); для чистого IKEv2 обычно хватает UDP 4500.

Решение

Сценарий A. Тишина на 500/4500

Откройте на WAN оба порта UDP до хоста strongSwan. DNAT: и 500, и 4500. Не подменяйте IKE TCP-прокси. Проверьте, что vpn.example.com резолвится в этот WAN IP.

Сценарий B. NO_PROPOSAL_CHOSEN

Выпишите proposal сервера и клиента в заявку. Приведите к одному списку. Пример фрагмента swanctl (адаптируйте под вашу политику, не копируйте слабые наборы):

version = 2
proposals = aes256gcm16-prfsha256-ecp256

На Windows 11 IKEv2 задайте совместимый набор политикой, не «AES-256 + SHA1 + DH2» против GCM-only сервера.

Сценарий C. PSK

Смените секрет на обеих сторонах в одно окно. В swanctl — secrets { eap-... / ike-... }. Пробелы и кавычки в RouterOS/Windows — частая причина. После смены — новый Connect, старые SA сбросьте:

swanctl --terminate --ike <name>

Сценарий D. Сертификат

Проверьте цепочку, CRL/OCSP при требовании сервера, SAN = vpn.example.com для серверного ID. Клиентский сертификат — отдельный шаблон, не «любой клиентский SSL». Часы NTP.

Сценарий E. ID mismatch

local.auth.id / remote.auth.id должны совпасть с тем, что шлёт пир (FQDN, Distinguished Name, IP). Лог no matching peer config — это ID, не ключ.

Как проверить, что проблема устранена

swanctl --list-sas

Должна быть IKE SA ESTABLISHED. Windows: Get-VpnConnectionConnected, Get-NetIPsecMainModeSA. tcpdump показывает обмен и переход на 4500 при NAT. Дальше проверяйте Child SA и ping 10.0.10.10 — это уже Phase 2/маршруты.

Get-VpnConnection -Name 'Office'
Get-NetIPsecMainModeSA

Если не помогло

  • IKE есть, трафика нет — Phase 2 и LAN.
  • Только с одного оператора — UDP 4500 режет CGNAT, пробуйте forceencaps=yes на обеих сторонах (документированная опция strongSwan).
  • Обрывы через минуту — DPD/NAT, разрывы.
  • Смешали L2TP и «чистый» IKEv2 в одном профиле Windows — разведите профили.

Профилактика

  • Одна матрица proposals в документации, не «как получилось на стенде».
  • Мониторинг UDP 500/4500 и числа ESTABLISHED IKE.
  • Сертификаты с алертами по дате, не PSK в wiki.
  • NTP на шлюзе.
  • Запрет IKEv1 в новых внедрениях, если нет legacy-оборудования.

FAQ

Phase 1 и Main Mode — это одно?

Для IKEv1 Main/Aggressive — режимы Phase 1. В IKEv2 термины IKE_SA_INIT / IKE_AUTH. В заявке пишите «IKE SA», чтобы не путать с Child SA.

Почему 809 на Windows?

Часто нет ответа IKE (фильтр, NAT-T, неверный IP). Это не «неправильный пароль» — пароль чаще даёт другую ошибку после ответа сервера.

Можно ли открыть ESP (протокол 50) вместо 4500?

За NAT ESP без UDP encapsulation обычно мёртв. NAT-T как раз для этого. На чистых белых IP без NAT ESP может идти, IKE всё равно нужен.

PSK совпал, всё равно AUTHENTICATION_FAILED

Смотрите ID и EAP vs PSK vs сертификат. Смешение auth = psk с клиентом, который шлёт EAP, даст тот же симптом.

Нужно ли отключать Windows Firewall для теста?

Нет. Создайте разрешающее правило на UDP 500/4500 исходящие, если его нет. Профиль Public на домашнем Wi-Fi часто режет входящее, исходящий IKE обычно проходит.