OpenVPN TLS falhando e continua desconectando-me

1

Ontem eu instalei o Debian 9 e o OpenVPN em um servidor em casa e tudo estava funcionando perfeitamente (eu segui este guia ). No entanto, esta manhã, o OpenVPN estava funcionando (do lado do cliente) e de repente nada estava carregando mais. Tentei reconectar a VPN e funcionou por 5 ou 10 minutos e depois nada.

Eu fiz algumas pesquisas e verifiquei o status do servidor OpenVPN com o comando systemctl status openvpn@server e vi a mensagem:

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed
SIGUSR1[soft,tls-error] received, client-instance restarting

Mais uma vez, procurei esse erro na internet, mas nada resolveu o problema. Nesse meio tempo, outros dois erros apareceram:

TLS Error: local/remote TLS keys are out of sync

e

Authenticate/Decrypt packet error: cipher final failed

Parece óbvio que isso tem algo a ver com o TLS certo? Eu tenho o arquivo ta.key gerado com openvpn --genkey --secret ta.key em ambos /etc/openvpn/ no servidor e na pasta config no cliente (windows).

Eu tentei desabilitar o ufw, mas isso não resolve o problema, então duvido que seja algo de firewall. Aqui está o resultado de ufw status de qualquer maneira:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

Veja o que adicionei ao /etc/ufw/before.rules :

*nat
:POSTROUTING ACCEPT [0.0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT

O server.conf (sem comentários):

port 1194
proto udp4
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 82.196.9.45"
push "dhcp-option DNS 89.46.223.237"

keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
max-clients 10
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1

E finalmente o client.ovpn (sem comentários e certificados):

client
dev tun
proto udp4
remote [server-ip] 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

<ca>
-----BEGIN CERTIFICATE-----
(...)
-----END CERTIFICATE-----
</ca>

<cert>
Certificate:
    (...)
-----BEGIN CERTIFICATE-----
(...)
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
(...)
-----END PRIVATE KEY-----
</key>

Todas as sugestões são bem-vindas, obrigado!

    
por Rallph 14.09.2018 / 15:14

2 respostas

0

Eu reinstalei o servidor seguindo este e tudo está funcionando perfeitamente agora

Eu acho que é porque eu não adicionei key-direction nos arquivos de configuração ( 0 no servidor e 1 no cliente) porque é quase a única coisa que mudou na configuração

    
por 17.09.2018 / 15:57
0

As Chaves de autorização TLS no OpenVPN são chaves pré-compartilhadas .

Você deve gerar uma chave e copiar a mesma chave no servidor e no cliente.
A menos que tenha entendido corretamente, você gerou essa chave no servidor e no cliente (o que significa que são duas chaves diferentes). Então, gere uma chave e copie-a para ambos os sistemas, então não deve haver nenhum erro que as chaves local / remota estejam fora de sincronia.

Seguindo em frente , parece que isso é não o problema no seu caso, foi meu mal-entendido que você tenha usado isso da maneira errada.

De um arquivo da lista de discussão do OpenVPN (ênfase adicionada):

This message can occur when running OpenVPN in UDP mode, as UDP is not connection-oriented, so there's no easy way for one side of the connection to know that the other side has gone down or restarted. This error will almost never occur when running in TCP mode, because TCP enforces solid client/server semantics and connection-reset when either side of the connection goes down.

Observação: o seguinte é uma declaração sem referência / dados concretos que a respaldam:

Levando em consideração essa citação, e o fato de você ter configurado o udp4 para ser o protocolo que o OpenVPN está rodando, parece-me que é um mau ideia de usar TLS juntamente com UDP . O TLS deve ser um protocolo seguro, portanto, ele precisa de uma conexão confiável, que o UDP não garante.

De RFC 5246 - TLS :

At the lowest level, layered on top of some reliable transport protocol (e.g., TCP [TCP]), is the TLS Record Protocol.

Portanto, o TLS requer uma conexão confiável, portanto, o UDP não deve ser usado.
Você também pode ler mais sobre o motivo em esta resposta no Security SE .

Basta mudar de:

proto udp4

para:

proto tcp

Nas configurações do OpenVPN.

Referências (para ler os detalhes):
OpenVPN - Uso de tls-auth
Lista de discussão do OpenVPN
OpenVPN HowTo - configuração
Segurança SE - Por que o TLS exige o TCP?
RFC 5246 - O protocolo TLS
Wikipedia - UDP

    
por 14.09.2018 / 17:13