Não é possível conectar-se ao OpenVPN fora da LAN

Não é possível conectar-se ao OpenVPN fora da LAN

Configurei o OpenVPN atrás de um roteador e encaminhei a porta 1194. A VPN está usando a sub-rede 10.3.15.0/24e está 192.168.1.14na LAN.

Funciona quando estou conectado localmente ou da minha rede doméstica conectada ao IP público. Mas não em outras redes que tentei.

Não consigo estabelecer uma conexão com a VPN e no cliente recebo:

Mon Apr 20 13:50:42 2015 UDPv4 link local: [undef]
Mon Apr 20 13:50:42 2015 UDPv4 link remote: [AF_INET]83.***.***.***:1194
Mon Apr 20 13:51:42 2015 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Mon Apr 20 13:51:42 2015 TLS Error: TLS handshake failed
Mon Apr 20 13:51:42 2015 SIGUSR1[soft,tls-error] received, process restarting
Mon Apr 20 13:51:42 2015 Restart pause, 2 second(s)

Achei que poderia ser um problema de firewall, isto vem do meu iptables:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.3.15.0/24         anywhere             ctstate NEW

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Mas tentei limpar a mesa, o que não funcionou. E durante a execução tcpdump -qni any port 1194há alguma comunicação (em ambos os casos):

13:44:35.936684 IP 194.***.***.****.53929 > 192.168.1.14.1194: UDP, length 14
13:44:41.043704 IP 194.***.***.****.22955 > 192.168.1.14.1194: UDP, length 14
13:44:43.063426 IP 194.***.***.****.22955 > 192.168.1.14.1194: UDP, length 14
13:44:43.544690 IP 194.***.***.****.53929 > 192.168.1.14.1194: UDP, length 14

Também notei algo sobre destination port unreachable, mas esses erros desapareceram.

Esta é a configuração do meu servidor:

port 1194
proto udp
dev tun

ca openvpn_certs/host-ca.pem
cert openvpn_certs/host-cert.pem
key openvpn_certs/host-key.pem
dh openvpn_certs/dh1024.pem

server 10.3.15.0 255.255.255.0
route 10.3.15.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "redirect-gateway def1 bypass-dhcp"
push "remote-gateway 10.3.15.1"

client-to-client
max-clients 20

keepalive 10 120
comp-lzo

user nobody
group nobody

persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log

verb 11

Aqui está a configuração do meu cliente:

client
dev vpn
dev-type tun
proto udp
remote server.remote 1194
resolv-retry infinite
nobind
ns-cert-type server
persist-key
persist-tun
pull
ca certs/ca-host.pem
cert certs/cert-local.pem
key certs/key-local.pem
comp-lzo
verb 11

O servidor executa o Alpine Linux enquanto o cliente executa o Gentoo.

Estou preso e não tenho ideia de onde procurar, alguma ideia ou orientação?

Obrigado!

Responder1

Em primeiro lugar, não tenho certeza de qual versão do OpenVPN você está usando, mas 'gateway remoto' não é uma opção válida na v2.3.2. Se você estiver usando uma versão mais antiga, verifique a página de manual local e remova essa diretiva, se necessário.


De acordo comWiki do OpenVPN, o erro "Falha na negociação da chave TLS..." é quase sempre resultado de:

  1. Um firewall de perímetro na rede do servidor está filtrando os pacotes OpenVPN recebidos (por padrão, o OpenVPN usa a porta UDP ou TCP número 1194).

    • Isso parece improvável no seu caso, mas verifique o firewall do seu roteador apenas para ter certeza.
  2. Um firewall de software em execução na própria máquina servidora OpenVPN está filtrando as conexões de entrada na porta 1194.

    • A tabela de filtros que você forneceu parece boa, supondo que você normalmente tenha a política INPUT padrão definida para aceitar. Caso contrário, você precisa permitir a porta UDP 1194:

      iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
      
  3. Um gateway NAT na rede do servidor não possui uma regra de encaminhamento de porta para TCP/UDP 1194 para o endereço interno da máquina servidor OpenVPN.

  4. A configuração do cliente OpenVPN não possui o endereço de servidor correto em seu arquivo de configuração. A diretiva remota no arquivo de configuração do cliente deve apontar para o próprio servidor ou para o endereço IP público do gateway da rede do servidor.

  5. O firewall do Windows está bloqueando o acesso do binário openvpn.exe. Pode ser necessário colocá-lo na lista de permissões (adicioná-lo à lista de "Exceções") para que o OpenVPN funcione.


Se você ainda tiver problemas, provavelmente há um problema com sua infraestrutura de chave pública. Não estou familiarizado com o Alpine Linux e se o pacote OpenVPN vem com easy-rsa, então vá em frente ebaixe a versão mais recentee extraia-o para um local apropriado em seu servidor e (de preferência) em uma máquina sem conexão à rede (sua autoridade de certificação). Para simplificar, assumirei que seu servidor está gerando solicitações para clientes. Em ambos os sistemas, mude para o diretório onde você extraiu o EasyRSA e...

cp vars.example vars
editor ./vars

No sistema CA, remova o comentário e edite os campos organizacionais adequadamente (EASYRSA_REQ_COUNTRY, etc.). No servidor, altere opcionalmente "set_var EASYRSA_PKI" para que aponte para um local apropriado (por exemplo, /etc/openvpn/pki).

Gere solicitações de certificado no servidor:

./easyrsa init-pki
./easyrsa gen-req <your_server_name> nopass
./easyrsa gen-req <some_client_name> nopass

No não servidor, crie uma nova CA:

./easyrsa init-pki
./easyrsa build-ca

Copie os arquivos .req para o seu sistema CA, importe-os e assine-os:

./easyrsa import-req server /tmp/<your_server_name>.req
./easyrsa import-req client /tmp/<some_client_name>.req
./easyrsa sign-req server <your_server_name>
./easyrsa sign-req client <some_client_name>

Copie os certificados recém-assinados, bem como o certificado CA, para um local apropriado no servidor e no cliente. Então, no servidor, gere os parâmetros dh:

 ./easyrsa gen-dh

Por fim, copie a chave do cliente para a máquina cliente (se ainda não estiver lá) e atualize suas configurações com os novos locais de chave e certificado.


Responder2

Certifique-se de que o certificado do seu servidor foi assinado com a designação nsCertType=server (isto é depreciado e não o padrão se você usou easyrsa3). Caso contrário, a diretiva 'ns-cert-type server' na configuração do seu cliente faria com que o handshake tls falhasse. Use 'servidor remoto-cert-tls'.

informação relacionada