Eu tenho dois clientes muito diferentes em duas redes muito diferentes, ambos incapazes de se conectar a um servidor OpenVPN recém-configurado, ambos causando entradas de log no servidor como o seguinte:
Aug 8 20:37:15 myserver ovpn-server[3797]: 12.34.56.78:48573 TLS: Initial packet from [AF_INET]12.34.56.78:48573, sid=80063aef 9e45c93a
Aug 8 20:38:15 myserver ovpn-server[3797]: 12.34.56.78:48573 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Aug 8 20:38:15 myserver ovpn-server[3797]: 12.34.56.78:48573 TLS Error: TLS handshake failed
Aug 8 20:38:15 myserver ovpn-server[3797]: 12.34.56.78:48573 SIGUSR1[soft,tls-error] received, client-instance restarting
Os clientes são o OpenVPN em um computador laptop * buntu conectado a um roteador NAT ADSL e um roteador WWAN 3G / 4G com um cliente OpenVPN integrado.
Aqui está o que eu verifiquei até agora:
- O Firewall está aberto (bem, duh, de que outra forma o handshake TLS começaria)
- A hora / data está definida corretamente nas duas extremidades
- O cliente OpenVPN está atualizado (pelo menos no laptop, mais difícil de verificar no roteador 3G / 4G)
- Os números de porta UDP não são alterados durante a vida útil da negociação (consulte
log acima)
O que o ELSE pode estar causando isso?
Edit: Então, o enredo engrossa ... Em desespero, tentei mudar toda a cadeia de configurações para usar o TCP, senão deixar tudo como estava. Bang! O cliente OpenVPN no meu laptop * buntu conseguiu se conectar imediatamente. Mas o que fazer quando o cliente OpenVPN do roteador 3G / 4G não suporta o transporte TCP? Eu não terminei aqui ainda!
Editar: Só para ficar claro aqui; Alterei precisamente quatro coisas para que isso funcionasse:
- Edite a configuração do OpenVPN para dizer
proto tcp
em vez de proto udp
e reinicie o OpenVPN
- Adicionada uma nova regra ao firewall iptables do servidor, para permitir o TCP 1194 - de outra forma idêntico à regra existente que permite UDP 1194
- Editado o protocolo na definição de serviço na regra de firewall no roteador meu laptop está conectado para permitir saída TCP 1194 em vez de saída UDP 1194 (apenas uma caixa suspensa realmente)
- Editei as informações de conexão do OpenVPN no meu laptop por meio do Network Manager e verifiquei a caixa de seleção
Use a TCP connection
Todos outras configurações e configurações permanecem idênticas ao que era antes.
Edit: Eu tenho uma suspeita de que algo estranho está acontecendo com o roteamento do tráfego UDP no meu servidor VPN; o endereço IP ao qual o OpenVPN está configurado para se vincular não é o endereço IP principal do servidor, na verdade, nem está na mesma sub-rede. Veja como é a tabela de roteamento:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 11-22-33-1.thing 0.0.0.0 UG 0 0 0 eth0
22.33.44.0 * 255.255.255.0 U 0 0 0 eth0
10.8.0.0 * 255.255.255.0 U 0 0 0 tun0
11.22.33.0 * 255.255.255.0 U 0 0 0 eth0
$ ip route
default via 11.22.33.1 dev eth0 onlink
22.33.44.0/24 dev eth0 proto kernel scope link src 22.33.44.55
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1
11.22.33.0/24 dev eth0 proto kernel scope link src 11.22.33.44
O endereço IP 22.33.44.55 foi atribuído posteriormente e é aquele ao qual o OpenVPN se vincula. Agora sou o primeiro a admitir que sei próximo a nada sobre roteamento IP, mas será que o tráfego UDP no "novo" endereço IP de alguma forma se perde devido a não ter seu próprio padrão? rota - ou algo assim?