Configuración de la conexión VPN L2TP/IPSec detrás de un NAT, código de error de VPN 809

Debido a la desactivación de la compatibilidad con PPTP VPN en iOS, uno de mis clientes decidió reconfigurar el servidor VPN que ejecuta Windows Server 2012 R2 de PPTP a L2TP/IPSec. Los clientes VPN internos desde el interior de la LAN se conectan al servidor VPN sin ningún problema, sin embargo, los clientes externos de Windows obtienen el error 809 cuando intentan establecer la conexión con el servidor VPN L2TP:

No se puede conectar a L2TP-IPsec-VPN-Server.hostname

No se pudo establecer la conexión de red entre su computadora y el servidor VPN porque el servidor remoto no responde. Esto podría deberse a que uno de los dispositivos de red (por ejemplo, cortafuegos, NAT, enrutadores, etc.) entre su computadora y el servidor remoto no está configurado para permitir conexiones VPN. Póngase en contacto con su administrador o su proveedor de servicios para determinar qué dispositivo puede estar causando el problema.

No se puede conectar a L2TP-IPsec-VPN-Server

En otras versiones de Windows, los errores de conexión 800, 794 o 809 puede indicar el mismo problema.

Vale la pena señalar que el servidor VPN está detrás de un NAT y el enrutador está configurado para reenviar puertos L2TP:

  • UDP 1701 — Protocolo de reenvío de capa 2 (L2F) y Protocolo de tunelización de capa 2 (L2TP)
  • UDP 500
  • UDP 4500 NAT-T: traductor transversal de direcciones de red IPSec
  • Protocolo 50 ESP

Estos puertos también están abiertos en las reglas del Firewall de Windows para la conexión VPN. Esos, se utiliza la configuración clásica. El cliente VPN de Windows integrado se utiliza para la conexión.

Si se conecta al mismo servidor VPN a través de PPTP, la conexión se establece correctamente.

Error de VPN 809 para L2TP/IPSec en Windows detrás de NAT

Al final resultó que, el problema ya se conoce y se describe en el artículo. https://support.microsoft.com/en-us/kb/926179. El cliente VPN integrado de Windows no es compatible de forma predeterminada con conexiones L2TP/IPsec a través de NAT. Esto se debe a que IPsec usa ESP (Encapsulating Security Payload) para encriptar paquetes, y ESP no es compatible PALMADITA (Traducción de dirección de puerto). Si desea utilizar IPSec para la comunicación, Microsoft recomienda utilizar direcciones IP públicas en el servidor VPN.

Pero también hay una solución. Puede solucionar este inconveniente habilitando el soporte para el NAT-T protocolo, que le permite encapsular paquetes ESP 50 en paquetes UDP en el puerto 4500. NAT-T está habilitado de forma predeterminada en casi todos los sistemas operativos (iOS, Android, Linux) excepto Windows.

Si el servidor VPN L2TP/IPsec está detrás de un dispositivo NAT, para conectar clientes externos a través de NAT correctamente, debe realizar algunos cambios en el registro tanto en el servidor como en el lado del cliente para permitir la encapsulación de paquetes UDP para L2TP y NAT-T. soporte en IPsec.

  • Abra el Editor del Registro (regedit.exe) y vaya a la siguiente clave de registro:
    • Windows 10/8.1/Vista y Windows Server 2016/2012R2/2008R2 — HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiciosPolicyAgent
    • Windows XP/Servidor de Windows 2003 — HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiciosIPSec
  • Crear un PALABRA DORADA parámetro con el nombre AssumeUDPEncapsulationContextOnSendRule y el valor 2;Clave de registro AssumeUDPEncapsulationContextOnSendRule

    Nota. Los valores posibles de AssumeUDPEncapsulationContextOnSendRule son:

    • 0 – (un valor predeterminado) sugiere que el servidor está conectado a Internet sin NAT;
    • 1 – el servidor VPN está detrás de un dispositivo NAT;
    • 2 — tanto el servidor VPN como el cliente están detrás de un NAT.
  • Simplemente reinicie su computadora y asegúrese de que el túnel VPN se haya establecido correctamente
  • [alert] Si tanto el servidor VPN de Windows como el cliente están detrás de NAT, debe cambiar esta configuración en ambos dispositivos.

    Además, puede usar un cmdlet de PowerShell para realizar cambios en el registro:

    Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesPolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 –Force;

    Después de habilitar la compatibilidad con NAT-T, podrá conectarse con éxito al servidor VPN desde el cliente a través de NAT (incluida la doble NAT).

     

    En algunos casos, para que VPN funcione correctamente, debe habilitar una regla de firewall adicional para TCP 1701 (en algunas implementaciones de L2TP, este puerto se usa junto con UDP 1701).

    NAT-T no funcionó correctamente en versiones anteriores de Windows 10, por ejemplo, 10240, 1511, 1607. Si tiene una versión anterior de Windows, le recomendamos que actualice la versión de Windows 10.

    Múltiples conexiones VPN L2TP desde la misma LAN

    Hay otro error de VPN interesante. Si su red local tiene varias computadoras con Windows, no puede establecer más de una conexión simultánea a un servidor VPN L2TP/IPSec externo. Si intenta conectarse al mismo servidor VPN desde otra computadora (con un túnel VPN activo desde un dispositivo diferente), aparecerá el código de error 809 o 789:

    Error 789: The L2TP connection attempt failed because the security layer encountered a processing error during initial negotiations with the remove computer.

    Curiosamente, este problema solo ocurre en dispositivos Windows. En dispositivos Linux/MacOS/Android en la misma red local, no existen tales problemas. Puede conectarse fácilmente al servidor VPN L2TP desde varios dispositivos al mismo tiempo.

    Según TechNet, el problema está relacionado con la implementación incorrecta del cliente L2TP/IPSec en Windows (no solucionado durante muchos años).

    Para corregir este error, debe cambiar dos parámetros de registro en el HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiciosRasManParámetros clave de registro y reinicie su computadora:

    • AllowL2TPWeakCrypto – cambiar a 00000001 (permite algoritmos de cifrado débiles, para L2TP/IPSec se utilizan los algoritmos MD5 y DES);
    • ProhibirIPSec – cambiar a 00000000 (habilita el cifrado IPsec, que a menudo está deshabilitado por algunos clientes VPN o herramientas del sistema).

    AllowL2TPWeakCrypto y ProhibitIpSec para la conexión l2tp ipsec vpn detrás de un NAT en Windows

    Ejecute el siguiente comando para cambiar aplicar estos cambios de registro:

    reg add "HKEY_LOCAL_MACHINESystemCurrentControlSetServicesRasmanParameters" /v AllowL2TPWeakCrypto /t REG_DWORD /d 1 /f
    reg add "HKEY_LOCAL_MACHINESystemCurrentControlSetServicesRasmanParameters" /v ProhibitIpSec /t REG_DWORD /d 0 /f

    Esto habilita la compatibilidad con conexiones VPN L2TP/IPSec simultáneas en Windows a través de una dirección IP pública compartida (funciona en todas las versiones, desde Windows XP hasta Windows 10).

Artículos Interesantes