VPN IPSec не работает: причины ошибок L2TP и IKEv2 и способы исправления в Windows

Разбираем, почему VPN IPSec не работает в Windows: ошибки 789, 809, проблемы NAT, настройки реестра, службы и порты. Пошаговые решения для L2TP и IKEv2.

Как устроен VPN IPSec и почему он может не работать

IPSec — это набор протоколов для защиты IP-трафика, который используется в VPN-подключениях L2TP/IPSec и IKEv2. Понимание базовой архитектуры помогает быстрее находить причину сбоя.

Когда вы инициируете подключение L2TP/IPSec, происходит двухэтапный процесс. Сначала клиент отправляет L2TP-пакет на сервер, что запускает согласование IPSec — обмен ключами и установку ассоциаций безопасности (SA). Этот этап может занять от нескольких секунд до двух минут в зависимости от скорости соединения и настроек. Только после успешного согласования IPSec запускается сам сеанс L2TP, и появляется запрос имени пользователя и пароля.

Если сбой происходит до запроса учетных данных, проблема почти всегда связана с IPSec: неверный предварительный ключ, сертификат, блокировка портов или несовместимость NAT. Если запрос пароля появился, но подключение все равно не удается, вероятнее всего, проблема в аутентификации PPP или настройках сервера.

IPSec использует несколько протоколов и портов: UDP 500 для IKE (обмен ключами), UDP 4500 для NAT-T (обход NAT), ESP (протокол 50) для шифрования данных и UDP 1701 для L2TP. Любой из этих элементов может быть заблокирован файрволом или неправильно настроен, что приводит к ошибкам подключения.

Основные ошибки VPN IPSec: коды 789, 809, 800 и другие

При неудачном подключении L2TP/IPSec Windows выводит код ошибки, который помогает сузить круг поиска. Рассмотрим самые распространенные.

Ошибка 789 — "Попытка L2TP-подключения не удалась из-за ошибки, произошедшей на уровне безопасности во время согласований с удаленным компьютером". Эта ошибка часто появляется при неверном предварительном ключе, неподдерживаемом алгоритме шифрования или проблемах с IPSec. Также она возникает, когда несколько Windows-компьютеров в одной локальной сети пытаются одновременно подключиться к одному L2TP/IPSec серверу через общий внешний IP-адрес.

Ошибка 809 — "Не удалось установить связь между компьютером и VPN-сервером". Обычно указывает на проблему с NAT-T: сервер или клиент находится за NAT, и UDP-инкапсуляция не настроена. В этом случае помогает изменение параметра реестра AssumeUDPEncapsulationContextOnSendRule.

Ошибка 800 — "Не удается установить соединение с VPN-сервером". Причины могут быть разными: сервер недоступен, порты закрыты, неверный тип VPN или проблемы с IPSec.

Ошибка 721 — "Удаленный компьютер не отвечает". Хотя эта ошибка чаще связана с PPTP, она также может появляться при проблемах с GRE-протоколом (IP 47) или TCP-портом 1723, если вы используете PPTP. Для L2TP/IPSec эта ошибка менее характерна.

Если вы видите сообщение "Не удалось установить связь по сети между компьютером и VPN-сервером, так как удаленный сервер не отвечает", проверьте доступность сервера, открытые порты и правильность адреса.

Проблемы с NAT и NAT-T: почему L2TP/IPSec не работает за маршрутизатором

Одна из самых частых причин, почему VPN IPSec не работает, — это наличие NAT (трансляции сетевых адресов) между клиентом и сервером. IPSec изначально не поддерживает NAT, поскольку ESP-протокол шифрует содержимое пакета, и изменение IP-адреса при трансляции нарушает целостность.

Для решения этой проблемы был разработан NAT-T (Network Address Translation Traversal), который инкапсулирует IPSec-пакеты в UDP-дейтаграммы на порту 4500. NAT-T включен по умолчанию в большинстве операционных систем, включая iOS, Android и Linux, но в Windows его поддержка для L2TP/IPSec может требовать дополнительной настройки.

Если ваш VPN-сервер находится за NAT, а клиент — в другой сети, вам нужно изменить параметр реестра AssumeUDPEncapsulationContextOnSendRule. Он находится в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent (для Windows 7/10/11 и Server 2008R2/2012R2/2016/2019/2022).

Возможные значения:

  • 0 — сервер подключен к интернету без NAT (по умолчанию)
  • 1 — сервер находится за NAT
  • 2 — и сервер, и клиент находятся за NAT

После изменения параметра необходимо перезагрузить компьютер. Если и сервер, и клиент находятся за NAT, параметр нужно установить на обоих устройствах.

Важно: при использовании NAT-T порт 1701 UDP пробрасывать на сервер не нужно, так как L2TP-трафик инкапсулируется внутри IPSec. Достаточно открыть UDP 500 и UDP 4500.

Настройка реестра для исправления ошибок L2TP/IPSec

Помимо параметра AssumeUDPEncapsulationContextOnSendRule, существуют другие ключи реестра, которые могут помочь, если VPN IPSec не работает.

Параметры для нескольких одновременных подключений

Если несколько Windows-компьютеров в одной локальной сети пытаются подключиться к одному L2TP/IPSec серверу через общий внешний IP, возникает ошибка 789 или 809. Это известный баг Windows-клиента, который не исправлен уже много лет. На Linux, macOS и Android таких проблем нет.

Для решения нужно изменить два параметра в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters:

  • AllowL2TPWeakCrypto — установите значение 1 (это разрешает использование слабых алгоритмов MD5 и DES, что необходимо для совместимости)
  • ProhibitIPSec — установите значение 0 (это включает IPSec, который может быть отключен сторонними VPN-клиентами)

После изменения перезагрузите компьютер. Эти параметры работают на всех версиях Windows, от XP до Windows 11.

Отключение IPSec для L2TP

В некоторых случаях, когда IPSec не удается согласовать, можно попробовать отключить IPSec и использовать только L2TP. Для этого установите параметр ProhibitIpSec в значение 1 в той же ветке RasMan\Parameters. Однако это снижает безопасность, поэтому используйте только как временное решение для диагностики.

Команды для изменения реестра

Вы можете выполнить изменения через командную строку с правами администратора:

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

Для параметра AssumeUDPEncapsulationContextOnSendRule используйте PowerShell:

Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 -Force

Проверка служб Windows, отвечающих за IPSec

Если VPN IPSec не работает, убедитесь, что необходимые службы Windows запущены и работают автоматически. Основные службы:

  • IPsec Policy Agent — отвечает за применение политик IPSec, загрузку правил из реестра или Active Directory, управление ключами и фильтрацию трафика.
  • IKE and AuthIP IPsec Keying Modules (IKEEXT) — обеспечивает обмен ключами IKE и AuthIP для установления ассоциаций безопасности.

Чтобы проверить их состояние, откройте services.msc (Win+R, введите services.msc) и найдите эти службы. Если они остановлены, запустите их и установите тип запуска "Автоматически".

Для IPsec Policy Agent можно использовать команды:

net start PolicyAgent
sc config PolicyAgent start= auto

Для IKEEXT аналогично:

net start IKEEXT
sc config IKEEXT start= auto

Также можно проверить состояние через PowerShell:

Get-Service | Where-Object { $_.Name -match "PolicyAgent|IKEEXT" }

Если службы не запускаются, проверьте журнал событий Windows на наличие ошибок, связанных с IPSec или IKE.

Порты и файрвол: что должно быть открыто для L2TP/IPSec и IKEv2

Неправильная конфигурация файрвола — частая причина, почему VPN IPSec не работает. Убедитесь, что на сервере и на маршрутизаторе открыты следующие порты:

  • UDP 500 — для IKE (Internet Key Exchange), обмена ключами
  • UDP 4500 — для NAT-T (IPSec NAT Traversal), если сервер или клиент за NAT
  • UDP 1701 — для L2TP (Layer 2 Tunneling Protocol)
  • ESP (IP protocol 50) — для шифрованных данных IPSec

Если вы используете IKEv2, также нужны UDP 500 и UDP 4500, но порт 1701 не требуется.

На стороне Windows Server необходимо создать правила входящих подключений в брандмауэре Windows Defender для этих портов. На сторонних файрволах и роутерах также нужно разрешить соответствующий трафик.

Для PPTP (если вы его используете) нужны TCP 1723 и GRE (IP protocol 47). Ошибка 721 часто связана именно с блокировкой GRE.

Проверить доступность портов можно с помощью утилиты PortQry или командой Test-NetConnection в PowerShell:

Test-NetConnection -ComputerName <IP-адрес> -Port 500 -Udp

Обратите внимание, что UDP-проверка может быть неточной, но если порт закрыт, вы получите сообщение об ошибке.

Настройка VPN-подключения L2TP/IPSec в Windows 10 и 11

Если вы создаете новое подключение L2TP/IPSec, важно правильно указать все параметры. Вот пошаговая инструкция.

  1. Откройте Параметры (Win+I) → Сеть и Интернет → VPN.
  2. Нажмите "Добавить VPN-подключение".
  3. Заполните поля:
  • Поставщик VPN: "Встроенный в Windows"
  • Имя подключения: любое, например "VPN IPSec"
  • Имя сервера или адрес: IP-адрес или доменное имя VPN-сервера
  • Тип VPN: "L2TP/IPsec с предварительно заданным ключом" (или "L2TP/IPsec с сертификатом", если используется PKI)
  • Ключ предварительной аутентификации: общий секретный ключ (PSK)
  • Тип данных для входа: "Имя пользователя и пароль"
  1. Введите имя пользователя и пароль, если они требуются.
  2. Нажмите "Сохранить".

После создания подключения рекомендуется дополнительно настроить параметры безопасности:

  • Откройте "Изменение параметров адаптера" (ncpa.cpl), найдите ваше VPN-подключение, откройте его свойства.
  • На вкладке "Безопасность" выберите тип VPN "L2TP/IPSec", нажмите "Дополнительно" и введите предварительный ключ.
  • Убедитесь, что шифрование данных установлено как "Требуется (зашифрованное соединение)".
  • В разделе аутентификации выберите "MS-CHAP v2" (обычно это единственный протокол, который нужен).
  • На вкладке "Сеть" убедитесь, что включен IPv4. Если вы не хотите, чтобы весь трафик шел через VPN, отключите "Использовать основной шлюз в удаленной сети" в свойствах TCP/IPv4 → Дополнительно.

После сохранения настроек попробуйте подключиться. Если появляется ошибка, проверьте журналы и настройки, описанные в других разделах.

Диагностика с помощью команд и журналов

Для точной диагностики проблем с IPSec используйте встроенные инструменты Windows.

Проверка активных ассоциаций безопасности

Выполните в командной строке от имени администратора:

netsh ipsec dynamic show all

Эта команда покажет все активные политики IPSec, фильтры и ассоциации безопасности. Если вы видите ошибки или отсутствие SA, это указывает на проблему с согласованием.

Для просмотра быстрых режимов (quick mode) используйте:

netsh ipsec monitor show mmsas

Проверка сетевых адаптеров

После подключения VPN проверьте, появился ли новый адаптер и получил ли он IP-адрес:

ipconfig /all

Журналы IPSec и PPP

Windows может вести журналы IPSec и PPP, которые помогут найти причину. Включить их можно в свойствах VPN-подключения или через оснастку "Удаленный доступ".

  • Журнал IPSec (Isakmp.log) создается в папке C:\Program Files\Microsoft IPSec VPN
  • Журнал PPP (Ppplog.txt) создается в C:\Windows\Ppplog.txt

Эти журналы содержат подробную информацию о процессе согласования и могут быть отправлены администратору сети для анализа.

Проверка доступности сервера

Пинг сервера:

ping <IP-адрес>

Если пинг не проходит, проверьте сетевые настройки и файрвол.

Дополнительные советы и типичные ошибки

Вот еще несколько моментов, которые стоит проверить, если VPN IPSec не работает.

Проверьте протоколы аутентификации

В свойствах VPN-подключения на вкладке "Безопасность" убедитесь, что разрешен протокол, поддерживаемый сервером. Обычно достаточно MS-CHAP v2. Если сервер требует другой протокол, например EAP, настройте его соответствующим образом.

Включите LCP Extension

На вкладке "Параметры" → "Параметры PPP" установите флажок "Включить расширение LCP". Это может помочь при проблемах с согласованием.

Переустановите виртуальные адаптеры WAN Miniport

Иногда проблема связана с поврежденными драйверами виртуальных адаптеров. Откройте Диспетчер устройств, найдите раздел "Сетевые адаптеры", удалите WAN Miniport (L2TP) и WAN Miniport (IKEv2), затем перезагрузите компьютер. Windows автоматически переустановит их с настройками по умолчанию.

Проверьте, не блокирует ли антивирус

Некоторые антивирусные программы и файрволы могут блокировать IPSec-трафик. Попробуйте временно отключить их и повторить подключение.

Используйте IKEv2 вместо L2TP

Если L2TP/IPSec не работает, попробуйте использовать IKEv2. Он более современный, лучше работает через NAT и не требует дополнительных настроек реестра. В Windows выберите тип VPN "IKEv2" при создании подключения.

Проверьте настройки сервера

Убедитесь, что VPN-сервер настроен правильно: разрешены нужные протоколы, указан правильный предварительный ключ, открыты порты. Если сервер находится за NAT, на нем также должен быть включен NAT-T.

Вопросы и ответы

Что делать, если при подключении L2TP/IPSec появляется ошибка 789?

Ошибка 789 указывает на проблему с согласованием безопасности IPSec. Проверьте правильность предварительного ключа (PSK) и тип VPN. Если несколько Windows-компьютеров в одной сети подключаются к одному серверу, измените параметры реестра AllowL2TPWeakCrypto=1 и ProhibitIPSec=0 в ветке HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters, затем перезагрузите компьютер.

Почему VPN IPSec не работает, если сервер находится за NAT?

IPSec не поддерживает NAT напрямую, поэтому используется NAT-T (UDP 4500). В Windows необходимо вручную включить поддержку NAT-T, установив параметр AssumeUDPEncapsulationContextOnSendRule в значение 1 или 2 в ветке реестра HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent. Значение 1 — если сервер за NAT, 2 — если и сервер, и клиент за NAT. После изменения перезагрузите компьютер.

Какие порты нужно открыть для L2TP/IPSec VPN?

Для L2TP/IPSec необходимо открыть UDP 500 (IKE), UDP 4500 (NAT-T), UDP 1701 (L2TP) и протокол ESP (IP 50). Если используется IKEv2, достаточно UDP 500 и UDP 4500. Убедитесь, что эти порты открыты на сервере, маршрутизаторе и в брандмауэре Windows.

Как включить службу IPsec Policy Agent в Windows?

Откройте services.msc, найдите службу IPsec Policy Agent, нажмите правой кнопкой мыши → Свойства, установите тип запуска "Автоматически" и нажмите "Запустить". Также можно использовать команды: net start PolicyAgent и sc config PolicyAgent start= auto. Убедитесь, что служба IKEEXT также запущена.

Почему не работает VPN после подключения к интернету?

Убедитесь, что интернет-соединение активно до запуска VPN. Если VPN-подключение настроено на использование шлюза по умолчанию в удаленной сети, весь трафик будет идти через VPN, что может блокировать доступ к локальным ресурсам. Отключите опцию "Использовать основной шлюз в удаленной сети" в свойствах TCP/IPv4, если это не требуется.

Что делать, если ошибка 809 появляется при подключении к L2TP/IPSec?

Ошибка 809 обычно связана с проблемами NAT-T. Установите параметр AssumeUDPEncapsulationContextOnSendRule в значение 2 в ветке HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent, перезагрузите компьютер. Также проверьте, что на сервере и маршрутизаторе открыты UDP 500 и UDP 4500.

Как проверить, работает ли IPSec после настройки?

Используйте команды netsh ipsec dynamic show all и netsh ipsec monitor show mmsas в командной строке от имени администратора. Они покажут активные политики и ассоциации безопасности. Также проверьте наличие VPN-адаптера и IP-адреса командой ipconfig /all.