Короткий ответ
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
.ovpn— OpenVPN; - нужен современный roadwarrior без L2TP — выбор протокола.
Возможные причины
- Закрыты UDP
500/4500доvpn.example.com;1701на WAN при этом ни при чём для IPsec-режима. - PSK IPsec (pre-shared key для L2TP) не совпал с сервером.
- Клиент за NAT, реестр encapsulation не задан (классика Windows).
- Сервер требует сертификат, клиент шлёт PSK — или наоборот.
- Политика IPsec на сервере не transport для L2TP, а tunnel для LAN.
ProhibitIpSec/ сторонний IPsec-агент перехватывает SA.- Учётные данные PPP (AD) неверны — уже после IPsec (691).
- Фрагментация/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 AssumeUDPEncapsulationContextOnSendRule4. PSK vs сертификат
В свойствах подключения Windows: «использовать предварительный ключ» vs сертификат машины. На RRAS — та же опция. Несовпадение = 789.
Решение
Сценарий A. 809, tcpdump тишина
Откройте UDP 500 и 4500 до VPN-сервера. Проверьте A-запись vpn.example.com. Исходящий файрвол клиента (редко) — разрешите IKE.
Сценарий B. 789, IKE виден
- Сверьте PSK.
- Выставьте
AssumeUDPEncapsulationContextOnSendRuleпо схеме NAT. - Убедитесь, что сторонний «VPN client» не держит PolicyAgent.
- На сервере политика: 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 -PassThruPSK передавайте секретно, не в историю 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). Смотрите оба.