Исправляем проблему подключения к L2TP/IPSec VPN серверу за NAT
Столкнулись с интересной проблемой у одного из заказчиков после перенастройки 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;
- 0 – (значение по-умолчанию), предполагается, что VPN сервер подключен к интернету без NAT;
- 1 – VPN сервер находится за NAT;
- 2 — и VPN сервер и клиент находятся за NAT.
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:
По информации на 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).
Исправление ошибки 789 при подключении VPN
Сбои в ОС Windows не редкость, возникают они по разным причинам и некоторые из них могут препятствовать доступу к сети. Так, например, при наличии подключения, использующего протокол L2TP, иногда встречается ошибка с кодом 789, появляющаяся у абонентов при попытке запуска VPN с компьютера напрямую. Пользователям не впервой самостоятельно решать подобные задачи, тем более, когда речь идёт о сбоях в программной части, с аппаратными проблемами уже сложнее и чаще всего без специалиста не обойтись. Ошибка 789 VPN сообщает о сбое, случившемся на уровне безопасности в момент согласований с удалённым устройством, но попытки решить проблему путём реализации ещё одного подключения в такой ситуации безуспешны. Чаще всего сбой возникает на Windows 7 или 8, но возможен и в других версиях операционки. Если ошибок в настройке сетевого подключения нет, и система не поражена вирусами, проблема кроется в реестре. Ошибка связана с недостатком необходимых для полноценного функционирования файлов и потребуется редактирование параметров.
Исправление ошибки 789 при подключении VPN.
Что значат эти записи в реестре
Если попытка L2TP-подключения не удалась вследствие появления сбоя с кодом 789, источник проблемы сокрыт в некорректной аутентификации на базе предварительного ключа, обеспечивающего соединение по L2TP/IPSec. Для реализации функционирования процесса требуются ключи «ProhibitIpSec» и «AllowL2TPWeakCrypto». ОС Windows стандартно не может создать соединение по L2TP в отсутствии IPSec. Так, если в реестре параметр ProhibitIpSec имеет значение 1, то на устройстве с операционкой Windows 7, 8, 10 не будет осуществляться создание фильтра, который на автомате применяет проверку подлинности ЦС, тогда будет проверяться локальный либо политики IP Security. Параметр AllowL2TPWeakCrypto применяется для активации алгоритмов шифрования MD5 (Message Digest 5 шифрует любые сведения в формате 128-битного хэширования) и DES (Data Encryption Standard – стандарт симметричного шифрования, осуществляет преобразование 64-битовых блоков данных посредством 56-битового ключа). Так, ошибка 789 при соединении с L2TP внезапно появляется при удалении ключей, обеспечивающих корректность функционирования VPN-канала. Они могут пропасть после инсталляции обновлений драйверов, приложений или удаления вирусами.
Бесполезные советы по ошибке 789
Как водится, пользователи при появлении сбоев в работе Windows, в поиске решений возникшей проблемы перечитывают всю существующую информацию из сети и достаточно часто сталкиваются с совершенно безрезультатными, а иногда абсурдными способами. Один из вариантов – ошибка 789 при подключении к L2TP спровоцирована выбором неверного типа VPN. Решение предлагается гениальное:
- Перейти к настройкам VPN соединения и во вкладке «Сеть» — «Тип VPN» выбрать «Автоматически» или «PPTP».
Но ведь у нас не стоит задача, чтобы заработало подключение L2TP, и цель не заключается в поиске альтернатив, а включение PPTP не имеет никакого отношения к настройке функционирования нужного нам канала. Ещё одно из нелепых решений – обращение к провайдеру. Хотя, звонок и может быть эффективен, ведь обычно поставщик связи всегда готов поспособствовать налаживанию соединения. В данном случае он тоже поможет справиться с задачей, организовав приход мастера.
Как исправить ошибку 789 l2tp в Windows
Мы уже выяснили, что при нормально настроенной сети и исправном функционировании Windows, где, в том числе отсутствует вирусное ПО – проблема в реестре. Редактирование его вручную без имеющихся навыков не рекомендуется, поскольку при неправильных действиях вмешательство пользователя может привести к неработоспособности компьютера и повлечь за собой непоправимые последствия для операционной системы. В любом случае перед работой с реестром лучше будет создать резервную копию. Если вы являетесь опытным юзером, то ничто не мешает самостоятельно внести необходимые изменения в записи реестра, чтобы тем самым устранить ошибку 789 и затем беспрепятственно подключиться к L2TP-соединению. Выполняем такие манипуляции:
- Открываем реестр любым удобным способом (например, нажатием клавиш Win+R вызываем консоль «Выполнить», где вводим команду regedit – метод универсален. При работе с Windows 7 и более ранними версиями ОС можно открыть реестр через Пуск, запросив в поле поиска regedit).
- Реестр имеет древовидную структуру в любой из версий ОС. Так, для устранения ошибки VPN-соединения с кодом 789 идём в ветку HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters.
- Создаём или корректируем имеющиеся параметры (в строки прописываем значение 1)
- «ProhibitIpSec»=dword:00000001
- «AllowL2TPWeakCrypto»=dword:00000001.
- Подтверждаем действие.
- После выполненных манипуляций перезагружаю устройство, что необходимо для вступления в силу изменений и подключаюсь к интернету.
Испробовав этот метод для устранения ошибки 789, многие пользователи отмечают, что на Windows 10, 8, 7 проблема больше не возникает.
Проблема при работе с L2TP/IPSec под Windows которая не решается годами
Изначально, не планировал выделять для данного материала отдельный пост, но так как проблема не решается годами, решил рассказать о ней чуть подробнее. Проблема заключается в том, что из локальной сети, имеющей единственный выход в Интернет, невозможно установить одновременно более одного соединения к внешнему L2TP/IPSec VPN серверу с компов под управлением Windows.
Допустим, у вас заведено несколько пользователей на внешнем VPN L2TP сервере. По отдельности, каждый из них спокойно устанавливает соединение с сервером и работает стабильно, без сбоев. Любые попытки одновременной работы с VPN сервером других пользователей сети, использующих один внешний IP, прерывают работу друг друга, возвращая в журнал Windows код ошибки 809 .
Наблюдается такой эффект исключительно на компьютерах под управлением ОС Windows, начиная с XP и заканчивая «десяткой». Причём на Linux и MacOS всё прекрасно работает вне зависимости от того, сколько одновременно клиентов подключается к удалённому L2TP/IPSec серверу. Так что это проблема не в настройках VPN сервера или роутера, как пишут на многих форумах (да и сами мелкомягкие), а именно в некорректной работе встроенного L2TP/IPSec клиента на Windows.
Честно говоря, ранее эта проблема обходила меня стороной. Всегда использовал OpenVPN и столкнулся с ней впервые только сейчас, после поднятия L2TP VPN-сервера на роутере Keenetic . После чего и было принято решение объединять сети офисов между собой, а не давать доступ отдельным клиентам, но об этом расскажу в следующей статье.
Есть ли решение проблемы при работе с L2TP/IPSec в Windows?
Но неужели Microsoft не знает о проблеме? Знает. Как оказалось, проблема давно известна и описана в статье https://support.microsoft.com/en-us/kb/926179 . Но вот с решением беда.
Если совсем кратко, то там говорится что в случае, когда VPN сервер L2TP/IPsec находится за NAT, для корректного подключения внешних клиентов через NAT необходимо на стороне сервера и клиента внести изменение в реестр, разрешавшее UDP инкапсуляцию пакетов для L2TP и поддержку (NAT-T) для IPsec.
К сожалению, добавление в реестр параметра UDPEncapsulationContextOnSendRule 2 , о котором также написано в статье, проблемы не решает. В сети можно найти упоминание пары дополнительных ключей реестра и отключении одной службы, связанной с играми, но вся эта неведомая магия не работает. Как только появляется другой клиент под виндой, твоё соединение отваливается.
Чтобы получить хоть какую-то пользу (кроме моего негативного опыта) от моего поста, собрал несколько ссылок по теме L2TP/IPsec и NAT-T в Windows:
- Настройка сервера L2TP/IPsec за устройством NAT-T в Windows: https://support.microsoft.com/ru-ru/help/926179/how-to-configure-an-l2tp-ipsec-server-behind-a-nat-t-device-in-windows
- Реализация L2TP/IPsec VPN сервера стандартными средствами Windows 7/8 для подключения Windows/iOS/Android систем к внутренней сети: https://habr.com/ru/post/210410/
- IPSec — протокол защиты сетевого трафика на IP-уровне: https://www.ixbt.com/comm/ipsecure.shtml
Подписывайтесь на канал и узнавайте первыми о новых материалах, опубликованных на сайте.
ЕСЛИ СЧИТАЕТЕ СТАТЬЮ ПОЛЕЗНОЙ,
НЕ ЛЕНИТЕСЬ СТАВИТЬ ЛАЙКИ И ДЕЛИТЬСЯ С ДРУЗЬЯМИ.