Problema de OpenVPN: no se pudo negociar la clave TLS en 60 segundos

14

Estoy configurando un servidor OpenVPN (versión 2.3.10) en un servidor Windows 2012 pero no puedo hacer que funcione.

El servidor está detrás de un enrutador y abrí el puerto 1194 y creé una regla para reenviar el tráfico de este puerto al servidor.

Aquí está el registro que veo en el servidor cuando intento conectarme desde un cliente:

Mon Mar 21 11:11:47 2016 XX.XX.XX.XX:57804 TLS: Initial packet from [AF_INET]XX.XX.XX.XX:57804, sid=fdf7a7ac 0264c7f3
Mon Mar 21 11:12:38 2016 XX.XX.XX.XX:55938 TLS: Initial packet from [AF_INET]XX.XX.XX.XX:55938, sid=1f242a3f e454a525
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 TLS Error: TLS handshake failed
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 SIGUSR1[soft,tls-error] received, client-instance restarting

Donde XX.XX.XX.XX es la ip del cliente. Por lo tanto, entiendo que al menos el cliente puede llegar al servidor, por lo que no hay problemas de enrutamiento o firewall.

Seguí la descripción provista aquí Guía fácil de Windows ¿Alguna idea?

vmasanas
fuente
1
Suponiendo que los dos lotes XX.XX.XX.XXrepresentan la misma dirección ( considere no ofuscar tales cosas ), me interesa el cambio en los números de puerto de origen (57804, 55938). Eso me sugiere que hay un NAT poco confiable en el camino, que suele ser el caso de UDP. ¿Está utilizando el transporte UDP o TCP, y si es el primero, puede probar el último y ver si el problema desaparece?
MadHatter
Veo este mensaje en la consola del servidor. Entiendo que al menos el cliente puede llegar allí, así que asumí que NAT no era el problema. ¿Me equivoco aquí?
vmasanas
1
No todo NAT se crea igual. Algunos tienen entradas de tabla de estado de muy corta duración, particularmente para UDP, y OpenVPN no aceptará bien los cambios en el puerto de origen. Responda la pregunta que hice y, si corresponde, intente el cambio que sugerí.
MadHatter
No tengo tanta experiencia aquí, así que ¿puede decirme cómo verificar si estoy usando UDP o TCP?
vmasanas
Bueno, podrías intentar man openvpnbuscar algo que controle el protocolo. No olvide cambiarlo tanto en el cliente como en el servidor, si decide hacer la prueba.
MadHatter

Respuestas:

21

Lo interesante es cómo cambia el número de puerto a mitad de la secuencia:

Lun Mar 21 11:11:47 2016 XX.XX.XX.XX: 57804 TLS: Paquete inicial de [AF_INET] XX.XX.XX.XX: 57804, sid = fdf7a7ac 0264c7f3

Lun Mar 21 11:12:38 2016 XX.XX.XX.XX: 55938 TLS: Paquete inicial de [AF_INET] XX.XX.XX.XX: 55938, sid = 1f242a3f e454a525

Esto me hace pensar que, en algún lugar entre el cliente y el servidor, hay un dispositivo NAT que se comporta mal, un dispositivo con entradas de tabla de estado de muy corta duración, que está cambiando el número de puerto de origen que se aplica a la secuencia establecida del cliente, haciendo que el servidor Piense que hay dos comunicaciones de corta duración en curso, en lugar de una continua.

Tales dispositivos generalmente solo hacen esto con UDP, por lo que le aconsejé que confirme que está usando UDP y que pruebe TCP en su lugar. Esto lo has hecho y descubriste que soluciona el problema. El siguiente paso es identificar el dispositivo NAT que se comporta mal, golpearlo con un martillo y reemplazarlo con uno que no cometa el error fundamental de suponer que todas las comunicaciones UDP son efímeras; pero ha indicado que está contento con cambiar a TCP como solución alternativa, por lo que el asunto está concluido.

MadHatter
fuente
2
¡+1 para tu ojo de águila!
Diamante
@bangal por qué, gracias! Gran parte del diablo está en los detalles, en este negocio.
MadHatter
Sí, lo sé, pero lo extrañé y solo lo vi después de que usted señaló. Estaba seguro de que es un problema de firewall.
Diamante
Bueno, lo es, así que tenías razón. Y no te golpees, ¡te verás más duro la próxima vez!
MadHatter
¿Hay algún beneficio en usar UDP en lugar de TCP? TCP está funcionando para mí ahora, a menos que haya algún inconveniente, estoy de acuerdo.
vmasanas
3

Este es uno de los errores más comunes al configurar Openvpn y hay una entrada de preguntas frecuentes para esto. Voy a citar esto aquí:

Error de TLS: la negociación de la clave TLS no se produjo en 60 segundos (verifique la conectividad de su red)

Uno de los problemas más comunes al configurar OpenVPN es que los dos demonios de OpenVPN a cada lado de la conexión no pueden establecer una conexión TCP o UDP entre sí.

Esto es casi el resultado de:

  • Un firewall perimetral en la red del servidor está filtrando los paquetes entrantes de OpenVPN (de forma predeterminada, OpenVPN usa el número de puerto UDP o TCP 1194).
  • Un firewall de software que se ejecuta en la máquina del servidor OpenVPN está filtrando las conexiones entrantes en el puerto 1194. Tenga en cuenta que muchos sistemas operativos bloquearán las conexiones entrantes de manera predeterminada, a menos que se configure de otra manera.
  • Una puerta de enlace NAT en la red del servidor no tiene una regla de reenvío de puerto para TCP / UDP 1194 a la dirección interna de la máquina del servidor OpenVPN.
  • La configuración del cliente OpenVPN no tiene la dirección correcta del servidor en su archivo de configuración. La directiva remota en el archivo de configuración del cliente debe apuntar al servidor o a la dirección IP pública de la puerta de enlace de la red del servidor.
  • Otra posible causa es que el firewall de Windows está bloqueando el acceso al binario openvpn.exe. Es posible que deba incluirlo en la lista blanca (agregarlo a la lista de "Excepciones") para que OpenVPN funcione.

Es muy probable que cualquiera de estos también esté causando el mismo problema en su caso. Así que solo revisa la lista uno por uno para resolverlo.

Ref: Error de TLS: la negociación de la clave TLS no pudo ocurrir en 60 segundos (verifique la conectividad de su red)

Diamante
fuente
He pasado por estos puntos, pero no estoy seguro de si me falta algo: 1. por el momento en que los cortafuegos están desactivados tanto en el cliente como en el servidor, 2. igual, 3. el enrutador tiene una regla de reenvío al servidor y veo el tráfico que aparece en la consola del servidor, 4.client tiene la dirección IP correcta, 5. no hay firewall que pueda decir.
vmasanas
Bueno, sinceramente, no puedo pensar en otra cosa en este momento. Para estar seguro, ¿cómo es la configuración de red en Windows Server? ¿Tiene puerta de enlace múltiple por casualidad? ¿Su puerta de enlace predeterminada apunta al enrutador? En caso afirmativo, el resto que puede probar es, como sugirió MadHatter, probar con tcp.
Diamante
Si alguien tiene ganas de echar una mano, he publicado (otra) pregunta de falla de apretón de manos TLS aquí: serverfault.com/questions/867599/…
Ola Tuvesson
Otra cosa a tener en cuenta es la alta latencia entre los dos hosts . Solo me rascaba la cabeza sobre esto extensamente y, por alguna razón olvidada, recibía 6000 ms + ping de ida y vuelta en una dirección (cliente a servidor), pero no al revés. Esto estaba causando que la negociación clave tomara más de 60 años. Reiniciar el enrutador proporcionado por mi ISP resolvió el problema. Probablemente sea un caso marginal raro, pero espero que eso ayude a alguien.
s.co.tt
3

Estaba obteniendo tiempos de espera de negociación clave de TLS como este. Pero en mi caso me di cuenta de que el enlace remoto era una dirección IP local.

La VPN en nuestro firewall pfSense se colocó por error en la interfaz LAN en lugar de la interfaz WAN, por lo que la configuración exportada se configuró para intentar conectarse a la dirección IP LAN del firewall, que nunca funcionaría con el cliente naturalmente encendido Una LAN diferente.

Creo que las principales conclusiones de esto son:

  • Obtener un tiempo de espera de negociación clave no significa necesariamente que incluso haya logrado conectarse a cualquier cosa.

    Por lo tanto, en esta etapa aún puede valer la pena verificar que realmente se está conectando al lugar correcto, y que no hay reglas de firewall que bloqueen la conexión, etc. Particularmente si su configuración se ha generado automáticamente.

    Tenga en cuenta que obtener un mensaje de inicio de sesión no significa que esté conectado , ya que OpenVPN le pide sus credenciales antes de intentar conectarse.

  • Asegúrese de que su servidor VPN esté escuchando en la interfaz correcta.

    (Por supuesto, esta es una de una serie de configuraciones incorrectas del lado del servidor que podrían ocurrir, como reglas de firewall, poner el número de puerto incorrecto, mezclar TCP y UDP, etc.)

mwfearnley
fuente
1

Tuve el mismo error y ningún consejo me ayudó, todo parecía estar bien: IP, puertos, firewall, todo. Se volvió loco por 2 horas.

La solución fue cambiar el protocolo de UDP a TCP en la configuración del cliente (aparentemente deshabilité UDP a propósito hace mucho tiempo).

Espero que esto ayude a alguien :)

LE: esto resolvió mi problema, pero no es el mejor enfoque según los comentarios a continuación. Debe usar UDP en lugar de TCP. Me ayudó porque tenía diferentes configuraciones entre el cliente y las configuraciones del servidor.

bosch
fuente
Debe saber que encapsular TCP dentro de TCP es muy probable que cause problemas de rendimiento muy malos, debido a que ambas pilas de TCP intentan competir entre sí.
EEAA
De hecho, funciona como una mierda. Aunque no entiendo lo que dijiste, el rendimiento es muy pobre. ¿Debo cambiar a UDP entonces?
bosch
2
Si. UDP es el estándar para implementaciones de VPN, por una buena razón. TCP tiene la funcionalidad de corrección de errores: la capacidad de retransmitir paquetes perdidos, etc. Si encapsula TCP dentro de TCP e incurre en pérdida de paquetes, tanto las pilas TCP (el tráfico "interno" como el tráfico encriptado OpenVPN) intente y corrija los paquetes perdidos. Cuando encapsula TCP en UDP, esto no es un problema, solo el tráfico interno volverá a intentarlo.
EEAA
Gracias por la pista y por las explicaciones. Cambié a UDP y vigilé las conexiones. Además, necesito leer un poco más sobre las pilas ...
bosch
Una página útil que explica por qué TCP sobre TCP es una mala idea: sites.inka.de/bigred/devel/tcp-tcp.html
mwfearnley
1

Tenga en cuenta que puede obtener un error de negociación de clave TLS, sin conectarse con éxito al servidor OpenVPN, ¡ o incluso conectarse con éxito a cualquier cosa!

Modifiqué una configuración de VPN para conectarme a localhost, en un puerto que no escuchaba nada:

OpenVPN 2.4.6 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] construido el 26 de abril de 2018
Windows versión 6.2 (Windows 8 o superior) 64 bits
versiones de la biblioteca: OpenSSL 1.1.0h 27 mar 2018, LZO 2.10
TCP / UDP: preservar la dirección remota utilizada recientemente: [AF_INET] 127.0.0.1:12345
Enlace UDP local (enlazado): [AF_INET] [undef]: 0
Enlace remoto UDP: [AF_INET] 127.0.0.1:12345 
Error de TLS: la negociación de la clave de TLS no se produjo en 60 segundos (verifique la conectividad de su red)
Error de TLS: error de apretón de manos de TLS
SIGUSR1 [soft, tls-error] recibido, proceso reiniciando
...

El error puede inducirlo a una falsa sensación de que está hablando con un servidor VPN.

Incluso es posible que primero se le soliciten las credenciales, pero nada fuera de su computadora realmente las ha solicitado.

mwfearnley
fuente
1

Ninguna de las soluciones mencionadas anteriormente funcionó. En mi caso, aunque el registro del cliente mostró el mismo error TLS Error: TLS key negotiation failed to occur within 60 seconds, los registros del servidor mostraron VERIFY ERROR: depth=0, error=CRL has expired.

En el servidor, los siguientes pasos resolvieron el problema de conexión:

# cd <easyrsa folder>
# ./easyrsa gen-crl
above command generates new crl.pem file (in my case in pki folder)
using chown/chmod make sure 'pki/crl.pem' is readable by openvpn server (for example: chmod 640 pki/crl.pem)
# systemctl restart openvpn
mpprdev
fuente
0

Me encontré con este error en AWS, donde OpenVPN se instaló en un servidor con una IP pública, pero en una instancia que estaba en una subred privada, es decir, una subred que no tenía una ruta a una puerta de enlace de Internet.

Una vez que implementé OpenVPN en un servidor dentro de una subred pública, todo funcionó bien :)


En subredes públicas / privadas en AWS: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html

Zoltán
fuente
0

También me encontré con el TLS key negotiation failed to occur within 60 secondsproblema.

Según la sugerencia oficial, como publicación de Diamant, debe haber algo mal en la conexión de red. Sin embargo, ni el firewall ni el NAT causan el problema.

En mi caso, primero verifiqué la conexión nc -uvz xxx.xxx.xxx.xxx 1194. El enlace esta bien.

Además, varios otros clientes vpn dentro de la misma LAN funcionan bien.

Desde algún lugar noté que la conexión udp tiene algunos problemas en respuesta o puerto hacia adelante.

Así que detengo los clientes vpn en ejecución desde la ip más grande hasta el cliente colgado, por ejemplo, de "10.8.0.100" a "10.8.0.50".

Luego, inicie los clientes vpn detenidos a la inversa.

¡Explosión! Todos los clientes vpn trabajan de manera proactiva.

En conclusión, existe la posibilidad de que el TLS key negotiation failed to occur within 60 secondsproblema sea que varios clientes vpn dentro de una LAN comiencen en una secuencia incorrecta.

samson.wang
fuente
1
No está claro cómo se relaciona esto con el problema en la pregunta original.
Ward - Restablece a Monica
0

Una posible razón es si el servidor requiere una versión TLS más nueva que la TLS admitida por el cliente. es decir, 1.2 contra 1.0.

Lo obvio que debe intentar es actualizar el cliente OpenVPN o modificar el lado del servidor para aceptar TLS 1.0.

ozk
fuente