В моем сценарии не используются никакие VPN и RRAS.
Я пытаюсь установить IPsec-соединение между двумя машинами под управлением Windows 10 (обе с полностью обновленной версией 1709), которые находятся за разными устройствами NAT.
Через брандмауэр Windows я создал два транспортных правила на обеих машинах, правила связаны с протоколом Smb.
Оба компьютера находятся за NAT, два NAT-устройства подключены через Интернет.
Я создал на обеих машинах раздел реестра «AssumeUDPEncapsulationContextOnSendRule» и установил его значение на обоих компьютерах на «2».
На устройстве NAT перед сервером, к которому я пытаюсь подключиться, я перенаправил порты Udp 500 и 4500, а также все порты, связанные с Smb, на сам сервер.
На обоих компьютерах я разрешил через брандмауэр Windows входящие и исходящие порты UDP 500, 4500 и даже разрешил «Edge traversal» для Smb-соединения на серверном компьютере.
Когда я пытаюсь получить удаленный доступ к серверу, создаются ассоциации безопасности быстрого режима, но соединение не работает. (Вывод команды Get-NetIpsecQuickmodeSa выглядит нормально, то есть инкапсуляция UDP была создана правильно)
Соединение работает, когда клиент находится за NAT, а сервер имеет публичный IP-адрес, но оно не работает, когда у клиента есть публичный IP-адрес, а сервер находится за NAT, или когда и клиент, и сервер находятся за NAT.
Видимо, я какую-то настройку игнорирую.
Пожалуйста, помогите мне решить эту проблему.
Большое спасибо
решение1
Я был уверен, что проигнорировал какую-то настройку, и вот она:
Set-NetFirewallSetting -AllowIPsecThroughNAT Оба
Параметр реестра «AssumeUDPEncapsulationContextOnSendRule» связан со старой службой агента политики Windows IPsec.
Приведенная выше команда Powershell обеспечивает такое же поведение для брандмауэра Windows, в частности, она устанавливает значение реестра «IPsecThroughNAT» равным «2».
Теперь все работает так, как и ожидалось, и как и должно было быть с самого начала, это должно быть настройкой по умолчанию.
решение2
Windows может не поддерживать сервер, находящийся за устройством NAT. Для этого требуется, чтобы сервер имел публичный IP-адрес. Существует обходной путь путем добавления следующего ключа реестра.
Расположение подраздела реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent Имя значения DWORD: AssumeUDPEncapsulationContextOnSendRule Данные значения DWORD: 2
Источник: