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

L2TP/IPsec на Windows — это сначала IKE (UDP 500/4500), затем L2TP (UDP 1701) уже внутри IPsec, не «голый» 1701 в интернет. Ошибка 789 почти всегда про IPsec policy/PSK/NAT-T, 809 — нет ответа IKE, 691 — логин PPP после туннеля. Не публикуйте 1701/udp на WAN «чтобы L2TP заработал»: без IPsec это устаревший и опасный путь.

Для клиента Windows за NAT нужен документированный параметр AssumeUDPEncapsulationContextOnSendRule. Сервер: RRAS или strongSwan+xl2tpd с согласованным PSK.

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

  • Профиль TunnelType L2tp, статус Disconnected, код 789/809/800.
  • На сервере нет Main Mode SA в момент Connect.
  • Реже: IPsec есть, PPP AUTH отказ (691).

Не это, если:

  • профиль IKEv2 (TunnelType Ikev2) — статьи Phase 1/2;
  • OpenVPN .ovpnOpenVPN;
  • нужен современный roadwarrior без L2TP — выбор протокола.

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

  1. Закрыты UDP 500/4500 до vpn.example.com; 1701 на WAN при этом ни при чём для IPsec-режима.
  2. PSK IPsec (pre-shared key для L2TP) не совпал с сервером.
  3. Клиент за NAT, реестр encapsulation не задан (классика Windows).
  4. Сервер требует сертификат, клиент шлёт PSK — или наоборот.
  5. Политика IPsec на сервере не transport для L2TP, а tunnel для LAN.
  6. ProhibitIpSec / сторонний IPsec-агент перехватывает SA.
  7. Учётные данные PPP (AD) неверны — уже после IPsec (691).
  8. Фрагментация/NAT timeout — разрывы, но первичный Connect тогда хотя бы иногда проходит.

Диагностика

1. Тип и код

Get-VpnConnection | Format-List Name, ServerAddress, TunnelType, AuthenticationMethod, EncryptionLevel, ConnectionStatus, RememberCredential

Сервер vpn.example.com. Повторите Connect и смотрите RasClient в Event Viewer. Зафиксируйте код.

2. UDP на пути

На шлюзе:

tcpdump -n -i eth0 udp port 500 or udp port 4500 or udp port 1701

При рабочем L2TP/IPsec с улицы на WAN должны появиться 500/4500. Голый 1701 с интернета — плохой знак (кто-то стучится без IPsec) или ошибка конфигурации.

3. NAT-T на Windows-клиенте

Документированный параметр (Microsoft):

HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent\AssumeUDPEncapsulationContextOnSendRule

Значение 2 разрешает L2TP/IPsec, когда и клиент, и сервер за NAT; 1 — когда NAT только у клиента. Меняйте с пониманием, нужен рестарт службы IPsec Policy Agent / перезагрузка.

Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent' -Name AssumeUDPEncapsulationContextOnSendRule

4. PSK vs сертификат

В свойствах подключения Windows: «использовать предварительный ключ» vs сертификат машины. На RRAS — та же опция. Несовпадение = 789.

Решение

Сценарий A. 809, tcpdump тишина

Откройте UDP 500 и 4500 до VPN-сервера. Проверьте A-запись vpn.example.com. Исходящий файрвол клиента (редко) — разрешите IKE.

Сценарий B. 789, IKE виден

  1. Сверьте PSK.
  2. Выставьте AssumeUDPEncapsulationContextOnSendRule по схеме NAT.
  3. Убедитесь, что сторонний «VPN client» не держит PolicyAgent.
  4. На сервере политика: L2TP transport + PSK/сертификат как у клиента.

Пересоздание профиля:

Remove-VpnConnection -Name 'Office-L2TP' -Force -ErrorAction SilentlyContinue
Add-VpnConnection -Name 'Office-L2TP' -ServerAddress 'vpn.example.com' -TunnelType L2tp -EncryptionLevel Required -L2tpPsk '<не в git>' -AuthenticationMethod MSChapv2 -RememberCredential -PassThru

PSK передавайте секретно, не в историю shell на общей машине.

Сценарий C. 691 / PPP

IPsec уже жив. Проверьте учётку AD, срок пароля, «разрешён dial-in» / NPS policy, MS-CHAPv2 включён на RRAS. Не путайте доменный UPN с локальным пользователем RRAS.

Сценарий D. Сервер Linux (strongSwan + xl2tpd)

IKE должен отдавать transport к UDP 1701, не путать с tunnel-режимом site-to-site в том же conn. Порт 1701 слушайте на внутреннем интерфейсе/loopback после IPsec, не как публичный сервис.

Сценарий E. Долгий Connect потом обрыв

Если первый Connect иногда проходит — keepalive/NAT, не порты. Статья разрывов. Для новых внедрений предпочтительнее IKEv2 или WireGuard, L2TP — legacy.

Стенд: RRAS за NAT и клиент за NAT

Классика SMB: Windows Server RRAS с серым IP, на роутере проброшены только UDP 500, без 4500. Клиент в кафе за NAT начинает IKE на 500, NAT-T требует 4500, tcpdump на WAN показывает обрыв. Ошибка 809. Лечение — DNAT 4500 на тот же хост, что и 500, не «открыть 1701».

Второй стенд: 4500 есть, PSK в GUI клиента с пробелом в конце, в RRAS — без. 789. Сверяйте длину секрета, не «переустановите драйвер WAN Miniport».

Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\PolicyAgent' |
  Select-Object AssumeUDPEncapsulationContextOnSendRule
Get-NetFirewallRule -PolicyStore ActiveStore | Where-Object DisplayName -match 'IPsec|IKE' |
  Select-Object DisplayName, Direction, Action, Enabled

Исходящий IKE на клиенте Windows 11 обычно не режется. Входящий 1701 на клиенте не нужен. Если корпоративный EDR блокирует svchost PolicyAgent — смотрите его лог, не RRAS.

После успеха PPP проверьте, что пул RAS не пересекается с 10.0.10.0/24 и 10.8.0.0/24 другого WG на том же шлюзе. Иначе получите «L2TP коннектится, LAN странная» уже на маршрутах.

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

Get-VpnConnection -Name 'Office-L2TP'
Get-NetIPsecMainModeSA
Get-NetIPsecQuickModeSA
ipconfig
Test-NetConnection 10.0.10.10

Статус Connected, есть IPv4 в 10.8.0.0/24 (или пул RRAS), ping/RDP к LAN. На сервере tcpdump 500/4500 в момент коннекта, 1701 не торчит в WAN.

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

  • IKEv2 с того же сервера работает, L2TP нет — оставьте IKEv2, не чините L2TP без требования старых клиентов.
  • Только с мобильных операторов — CGNAT и UDP; пробуйте IKEv2 с forceencaps или WireGuard.
  • Ошибка 868 — DNS имени vpn.example.com, не L2TP.
  • Маршрутов нет после Connect — маршруты.

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

  • Новые клиенты: IKEv2/WireGuard, L2TP не развивать.
  • Не публиковать 1701/udp.
  • PSK длинный, в секрет-хранилище, ротация по увольнениям.
  • Документировать NAT-T реестр в образе Windows.
  • NPS логировать отказы PPP отдельно от IPsec.

FAQ

Нужно ли пробрасывать 1701 на роутере?

Для L2TP/IPsec с интернета — нет как WAN-сервис. Пробрасывают 500 и 4500. 1701 идёт внутри ESP.

Чем 789 отличается от 809?

809 — нет ответа IKE (сеть/NAT-T/IP). 789 — ответ мог быть, политика IPsec/PSK/сертификат не сошлись (или NAT encapsulation).

Можно ли оставить EncryptionLevel Optional?

Не для L2TP с улицы. Required. Optional открывает путь к слабому согласованию.

MS-CHAPv2 ещё жив?

Для legacy L2TP — да, и это слабое место. Компенсируйте длиной пароля, NPS, лучше мигрируйте на IKEv2 с сертификатом или EAP.

Get-VpnConnection не видит подключение из GUI

Профиль пользователя vs all-user (-AllUserConnection). Смотрите оба.