Столкнулись с интересной проблемой у одного из заказчиков после перенастройки VPN сервера Windows Server 2012 с PPTP на L2TP/ IPSec (из за отключения поддержки PPTP VPN в iOS). Изнутри корпоративной сети VPN клиенты без каких-либо проблем подключаются к VPN серверу, а вот внешние Windows клиенты при попытке установить соединение с L2TP VPN сервером, выдают такую ошибку:
The network connection between your computer and the VPN server could not be established because the remote server is not responding. This could be because one of the network devices (e.g. firewalls, NAT, routers, etc) between your computer and the remote server is not configured to allow VPN connections. Please contact your Administrator or your service provider to determine which device may be causing the problem.
В других версиях Windows о наличии аналогичной проблемы могут свидетельствовать ошибки VPN подключения 800, 794 или 809.
Стоит отметить, что данный VPN сервер находится за NAT, а на маршрутизаторе настроен проброс портов, необходимых для работы L2TP:
- UDP 1701 — Layer 2 Forwarding Protocol (L2F) & Layer 2 Tunneling Protocol(L2TP)
- UDP 500
- UDP 4500 NAT-T – IPSec Network Address Translator Traversal
- Protocol 50 ESP
В правилах Windows Firewall VPN сервера эти порты также открыты. Т.е. используется классическая конфигурация. Для подключения используется встроенный VPN клиент Windows.
VPN ошибка 809 для L2TP/IPSec в Windows за NAT
Как оказалось, проблема эта уже известна и описана в статье https://support.microsoft.com/en-us/kb/926179. По умолчанию встроенный VPN клиент Windows не поддерживает подключение к L2TP/IPsec через NAT. Дело в том, что IPsec использует протокол ESP (Encapsulating Security Payload) для шифрования пакетов, а протокол ESP не поддерживает PAT (Port Address Translation). Если вы хотите использовать IPSec для коммуникации, Microsoft рекомендует использовать белые IP адреса на VPN сервере.
Но есть и обходное решение. Можно исправить этот недостаток, включив поддержку протокола NAT—T, который позволяет инкапсулировать пакеты протокола ESP 50 в UDP пакеты по порту 4500. NAT-T включен по-умолчанию почти во всех операционных системах (iOS, Android, Linux), кроме Windows.
Если VPN сервер L2TP/IPsec находится за NAT, то для корректного подключения внешних клиентов через NAT необходимо на стороне Windows сервера и клиента внести изменение в реестр, разрешающее UDP инкапсуляцию пакетов для L2TP и поддержку (NAT-T) для IPsec.
- Откройте редактор реестра
regedit.exe
и перейдите в ветку:- Для Windows 10,8.1,7 и Windows Server 2016,2012R2,2008R2 — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
- Для Windows XP/Windows Server 2003 — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec
- Создайте DWORD параметр с именем AssumeUDPEncapsulationContextOnSendRule и значением 2;Примечание. Возможные значения параметра AssumeUDPEncapsulationContextOnSendRule:
- 0 – (значение по-умолчанию), предполагается, что VPN сервер подключен к интернету без NAT;
- 1 – VPN сервер находится за NAT;
- 2 — и VPN сервер и клиент находятся за NAT.
- Осталось перезагрузить компьютер и убедиться, что VPN туннель успешно создается.
Можно использовать командлет PowerShell для внесения изменений в реестр:
Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 –Force;
После включения поддержки NAT-T, вы сможете успешно подключаться к VPN серверу с клиента через NAT (в том числе двойной NAT).
L2TP VPN не работает на некоторых Windows компьютерах в локальной сети
Есть еще один интересный баг. Если в вашей локальной сети несколько Windows компьютеров, вы не сможете установить более одного одновременного подключения к внешнему L2TP/IPSec VPN серверу. Если при наличии активного VPN туннеля с одного клиента, вы попытаетесь подключиться к тому же самому VPN серверу с другого компьютера, появится ошибка с кодом 809 или 789:
Error 789: The L2TP connection attempt failed because the security layer encountered a processing error during initial negotiations with the remove computer.
По информации на TechNet проблема связана с некорректной реализацией клиента L2TP/IPSec клиента в Windows (не исправляется уже много лет).
Для исправления этого бага нужно изменить два параметра реестра в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters и перезагрузите компьютре:
- AllowL2TPWeakCrypto – изменить на 00000001 (ослабляет уровень шифрования, для L2TP/IPSec используются алгоритмы MD5 и DES)
- ProhibitIPSec – изменить на 00000000 (включает шифрование IPsec, которое часто отключается некоторыми VPN клиентами или утилитами)
Для изменения этих параметров реестра достаточно выполнить команды:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v AllowL2TPWeakCrypto /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v ProhibitIpSec /t REG_DWORD /d 0 /f
Это включает поддержку нескольких одновременных L2TP/IPSec-подключений в Windows через общий внешний IP адрес (работает на всех версиях, начиная с Windows XP и заканчивая Windows 10).
ПОМОГЛО!!! СПС! 8-D
отлично ман, все работает.
Скажите, а как быть в ситуации, когда сервер находится за NAT-маршрутизатором, а клиент — какие-то за ним, а какие-то нет?
В этой статье именно такая конфигурация и описана. Кленты подключаются к серверу за NAT. Если есть клиенты внутри сети, при доступе к VPN серверу напрямую (без NAT) при такой настройке проблем также не должно быть.
Здравствуйте.
Спасибо за ответ.
Я имел в виду ситуацию, когда клиенский ПК #1 подкл.к Интернету через маршрутизатор с NAT, а клиентский ПК #2 подкл.к Интернету напрямую (т.е., сам имеет внешний (маршрутизируемый) адрес.
Вы так меня поняли?
Не много не так, понял, в любом случае для VPN сервера это значение не имеет 🙂
Ок. Спасибо.
порт 1701 не TCP, а тоже UDP
Вы правы. Используется 1701 UDP — поправил.
Помогло. Спасибо.
Это решает проблему с подключением, но есть одно НО!
Больше одного подключения не получается поднять. Пока подключен один, второй не подключится.
В других статьях писали, что была проблема с вышибанием, но сути это не меняет.
Используя L2TP/IPsec с windows-клиентом за NAT — вы можете поднять только одно подключение. Как это обойти пока не нашел.
Сейчас нет такого стенда с L2TP и NAT под рукой… Проверить не могу…
Какие ошибки на клиенте и в сервере в логах при втором подключении?
Сделал все по инструкции — нет VPN через L2TP с ключом.
Спасибо одному АНОНИМу с сайта
https://mdex-nn.ru/page/problema-l2tpipsec-v-windows.html
помог советом:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters]
«AllowL2TPWeakCrypto»=dword:00000001
«ProhibitIPSec»=dword:00000000
После этого все заработало!
Windows10 x64 prof v.1909 (сборка ОС 18363.535)
Спасибо и тебе SimDmit за ссылку на Анонима
Смог наконец то избавиться от ошибки 809.
VPN на Server 2008 R2, клиент Windows 10
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters]
«AllowL2TPWeakCrypto»=dword:00000001
«ProhibitIPSec»=dword:00000000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec
«AssumeUDPEncapsulationContextOnSendRule»=dword:00000002
Помогло! СПАСИБО! Две недели страданий решились за 3 мин.
Походу данная проблема наблюдается и когда win server и w10 находятся за NAT и подключаются (пытаются подключиться) к VPN серверу с белым фиксированным IP (структура: есть VPN с белым фиксированным IP (на synology) и есть w ser2016 и w10 на другом конце города (они за nat) — сервер 2016 вообще отказывается соединяться (ош 809), а w10 соединяется, но вылетает через разное время)
Android телефоны без проблем работают ))))
ОПЕЧАТКА
«Создайте DWORD параметр с именем AssumeUDPEncapsulationContextOnSendRuleи значением 2;»
Пропущен пробел после имени параметра.
Немного не понял про проброс портов на роутере. Смог сделать первые три, а вот не понял чо делать с Protocol 50 ESP. Что это значит?
Тут все зависит от роутера. В некоторых можно просто включить опцию ESP, или может называться ipsec чтобы разрешить такой vpn трафик.
Для работы L2TP/IPsec сервера за NAT нужно:
пробросить порт 500 UDP
пробросить порт 4500 UDP
внести изменения в реестр для включения NAT-T как на сервере, так и на клиенте (только для Windows)
Вопреки распространенному заблуждению порт 1701 UDP пробрасывать не нужно.
Может кто знает: на компьютере два IP адреса, например, 192.168.100.2 (192.168.100.0/24) и 192.168.200.2 (192.168.200.0/24), а в качестве шлюза указан 192.168.200.1. При попытке подключения по L2TP IPsec к VPN серверу система использует исходящий IP адрес 192.168.100.2, а не 192.168.200.2. Как это можно исправить?
Кто шлюз по умолчанию? Ну и смотрите таблицу маршрутизации, можно прописать маршрут для указанного VPN руками через нужный интерфейс
Добрый день!
Вопрос по последнему разделу, а именно когда из одной локальной сети 2 и более клиента не могут подключиться к одному внешнему VPN серверу. VPN сервер имеет белый IP, соответственно, клиенты (win10) за NAT. Инструкция по добавлению записей в реестр выполнена, но не помогло, к сожалению.
Тут только разбираться с логами на стороне vpn клиента и сервера. искать там какое-то упоминание о причины ошибки.
обновления Windows от 11 января 2022 года делают невозможным подключение через VPN (L2TP)
Windows 10 — KB5009543
Windows 11 — KB5009566
Решается удалением обновлений, или можно отключить/ослабить IPSec (не везде применимо):
REGEDIT4
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters]
"ProhibitIpSec"=dword:00000001
ты просто лучший! Спасибо! 2 дня пытаюсь понять в чём проблема
отключение шифрования крайняя мера, к которой не рекомендуется прибегать. На мой взгляд, лучше удалить установленные обновления и ждать решения проблемы от Microsoft.
РЕШЕНИЕ: удаление следующих пакетов обновлений для ОС
Windows 10 — KB5009543
Windows 10 — Kb5008876
Windows 10 LTSC — KB5009557
Windows 11 — KB5009566
Как удалить обновление через Powershell:
wusa /uninstall /kb:5009543
wusa /uninstall /kb:5008876
wusa /uninstall /kb:5009566
Капец меня чуть с работы не уволили , я уже на что только не грешил )))
windows 2008 r2 находится за роутером
коннектится по внешнему ip к микротику по vpn l2tp
если vpn подключение с дефолтным маршрутом, то проброс порта с микротика работает
если не дефолтное, то не пробрасывается
грешу на винду
куда она шлёт пакеты ?
или шлёт кривые на микротик ?