Подняли давеча VPN на Windows Server 2019, настроил проброс портов на маршрутизаторе DIR825 (пробовал и другие, mikrotik в том числе), даже в DMZ добавлял — ну не хочет подключаться по L2TP!!!
Пробрасываю в локалку для работы L2TP/IPsec за NAT порты:
- порт 500 UDP
- порт 4500 UDP
Не работает.
Проверяю с PPTP, добавляю проброс TCP-соединение на порт 1723…. VPN взлетает на ура.
Оказывается L2TP с IPsec не поддерживает NAT.
"Для обхода этих ограничений используется протокол NAT-T, который инкапсулирует пакеты IPsec в UDP, позволяя успешно проходить через NAT. Поддержка данного протокола включена по умолчанию практически во всех ОС, кроме Windows."
Для включения поддержки NAT-T правим реестр:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
Создаём параметр DWORD c именем AssumeUDPEncapsulationContextOnSendRule и значением 2.
Либо через PowerShell:
Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 -Force
Систему перезагружаем. Изменения нужно внести как на сервере, так и на клиенте.
При установлении L2TP/IPsec соединения между узлами прежде всего создается зашифрованный IPsec-канал, для этого используется протокол обмена ключами IKE (порт 500 UDP) и протокол NAT-T (порт 4500 UDP), затем уже внутри безопасного IPsec-соединения поднимается L2TP-туннель на порт 1701 UDP и происходит аутентификация пользователя.
Итого для работы L2TP/IPsec сервера за NAT :
- пробрасываю порт 500 UDP
- пробрасываю порт 4500 UDP
- правлю реестр для включения NAT-T как на сервере, так и на клиенте (только для Windows)
А порт 1701 UDP пробрасывать не нужно, хоть много где в иструкциях сей пункт обязателен.