OpenVPN não está funcionando porque o gateway não está configurado

1

Em uma máquina Debian, eu estava tendo problemas para me conectar a um servidor openVPN.

A conexão poderia ser estabelecida, meramente no sentido de que uma interface seria adicionada e que eu obteria um IP 10.130.x.x atribuído a ela, mas não consegui nenhum tráfego em toda a VPN. Todo o tráfego ainda passaria por meu endereço IP público original:

root@vps2:~# route -n  
Kernel IP routing table  
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
92.222.32.0     0.0.0.0         255.255.255.0   U     0      0        0 venet0  
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0  
root@vps2:~# wget --no-dns-cache --no-proxy --header="Host: ipecho.net" http://146.255.36.1/plain -q -O - 2>&1;echo  
92.222.32.42  
root@vps2:~# service openvpn start  
[ ok ] Starting virtual private network daemon: myvpn.  
root@vps2:~# route -n  
Kernel IP routing table  
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
10.130.3.137    0.0.0.0         255.255.255.255 UH    0      0        0 tun0  
92.222.32.0     0.0.0.0         255.255.255.0   U     0      0        0 venet0  
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0  
root@vps2:~# wget --no-dns-cache --no-proxy --header="Host: ipecho.net" http://146.255.36.1/plain -q -O - 2>&1;echo  
92.222.32.42  
root@vps2:~#   

Em meu syslog eu pude ver a mensagem NOTA: incapaz de redirecionar o gateway padrão - Não pode ler o gateway padrão atual do sistema. E algumas pesquisas me levaram a descobrir que isso acontecia porque o gateway padrão não estava definido explicitamente. Eu acho que a VPN remota está usando algum tipo de script de cliente que não apenas espera encontrar um gateway padrão definido explicitamente.

Eu tentei duas maneiras de definir meu gateway padrão explicitamente. E ambos funcionam !

  • Primeiro, tentei definir meu endereço IP público original como o gateway padrão, que funcionou:

    route add default gw 92.222.32.42  
    root@vps2:~# route add default gw 92.222.32.42  
    root@vps2:~# route -n  
    Kernel IP routing table  
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
    92.222.32.0     0.0.0.0         255.255.255.0   U     0      0        0 venet0  
    0.0.0.0         92.222.32.42    0.0.0.0         UG    0      0        0 venet0  
    0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0  
    root@vps2:~# service openvpn start  
    [ ok ] Starting virtual private network daemon: myvpn.  
    root@vps2:~# wget --no-dns-cache --no-proxy --header="Host: ipecho.net" http://146.255.36.1/plain -q -O - 2>&1;echo  
    217.23.15.239  
    root@vps2:~#   
    
  • Mas por que usar meu IP público original como o gateway padrão? Eu não sei. Então eu também tentei definindo o primeiro salto de um traceroute aleatório como o gateway padrão. E isso também funcionou:

    root@vps2:~# traceroute foo.com  
    traceroute to foo.com (121.232.122.233), 30 hops max, 60 byte packets  
     1  49.ip-92-222-50.eu (92.222.50.49)  0.039 ms  0.011 ms  0.012 ms  
     2  [......... I stop the traceroute when I see the first hop]  
     ^C  
    root@vps2:~# route add default gw 92.222.50.49
    root@vps2:~# route -n  
    Kernel IP routing table  
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
    92.222.32.0     0.0.0.0         255.255.255.0   U     0      0        0 venet0  
    0.0.0.0         92.222.50.49    0.0.0.0         UG    0      0        0 venet0  
    0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0  
    root@vps2:~# service openvpn start  
    [ ok ] Starting virtual private network daemon: myvpn.  
    root@vps2:~# wget --no-dns-cache --no-proxy --header="Host: ipecho.net" http://146.255.36.1/plain -q -O - 2>&1;echo  
    217.23.15.239  
    root@vps2:~#   
    

    Hooray! Eu cheguei até aqui sozinha.

Agora, depois de se conectar à VPN, o roteamento é alterado automaticamente. Isso é bom e tudo, mas agora eu perco toda a conectividade através do meu endereço IP público original e minha conexão SSH cai, meu servidor web não está mais acessível e até mesmo outros serviços que ofereço. Eu acho que isso é porque todas as conexões de entrada agora têm respostas sendo roteadas através da VPN. Eu preferiria ver todas as conexões que chegam através do meu IP público original, para obter respostas do mesmo IP. E que a VPN só é usada para conexões que meu servidor inicia em direção ao mundo exterior. Eu ainda não descobri essa parte.

É assim que meu roteamento fica depois que eu me conecto à VPN:

root@vps2:~# route -n  
Kernel IP routing table  
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
10.130.0.1      10.130.3.73     255.255.255.255 UGH   0      0        0 tun0  
10.130.3.73     0.0.0.0         255.255.255.255 UH    0      0        0 tun0  
217.23.15.239   92.222.32.42    255.255.255.255 UGH   0      0        0 venet0  
92.222.32.0     0.0.0.0         255.255.255.0   U     0      0        0 venet0  
0.0.0.0         10.130.3.73     128.0.0.0       UG    0      0        0 tun0  
128.0.0.0       10.130.3.73     128.0.0.0       UG    0      0        0 tun0  
0.0.0.0         92.222.32.42    0.0.0.0         UG    0      0        0 venet0  
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0  
root@vps2:~#   

Então, minhas perguntas são:

  • O que devo usar como meu gateway padrão, pois os dois métodos funcionaram? Meu IP público original ou o primeiro salto no traceroute? Ou algo totalmente diferente, mesmo?

  • Como posso automatizar isso, então o gateway é configurado automaticamente ao inicializar? Quero dizer que, assim que inicializar, o servidor verifica se eu configuro um gateway padrão e, se não, ele colocará meu IP público ou o primeiro salto do traceroute como o gateway padrão ...

  • E depois de finalmente me conectar ao openVPN, como evito perder a conectividade através do endereço IP público original, mas ainda assim todas as conexões de saída usam a VPN?

por nl-x 30.11.2016 / 21:56

2 respostas

2

O venet em suas rotas me faz pensar que você está usando algo como o OpenVZ?

Nesse caso, você provavelmente precisará, no hipervisor, carregar o módulo tun e permitir que seu convidado o use. Supondo que você esteja usando o OpenVZ, isso se pareceria com:

vz# modprobe tun && echo tun >>/etc/modules
vz# vzctl set $CTID --devnodes net/tun:rw --capability net_admin:on --save
    
por 30.11.2016 / 23:39
2

Começando pelo começo e resolvendo suas dúvidas em ordem:

  1. A conexão não pode ser estabelecida

    The connection could be established, I would get an IP, but I could not get traffic via the VPN [...] because of the default gateway not being set

    Se você não puder fazer ping no final remoto da conexão, terá problemas mais importantes do que querer alterar a rota padrão. Antes de examinar e possíveis problemas de roteamento, verifique se é possível executar ping no terminal remoto. Como você não incluiu nem mesmo uma aproximação ao seu arquivo de configuração do cliente, não posso fornecer o comando específico.

  2. Como alterar o gateway padrão?

    Não altere o gateway padrão sozinho. Se você deseja rotear todo o seu tráfego pela conexão VPN, use o redirect-gateway def1 parâmetro de configuração como explicado no OpenVPN HOWTO.

  3. Como iniciar a VPN no momento da inicialização?

    Isso também é explicado no OpenVPN HOWTO e envolve a criação do arquivo de configuração apropriado em /etc/openvpn (e em sistemas derivados do Debian editando /etc/default/openvpn para ativar a inicialização automática).

  4. Como evitar perder outra conectividade com a Internet

    After finally connecting to the openVPN, the default gateway is changed to use the openVPN. Any existing connection however (for example my SSH connection) gets cut off, and the machine is no longer reachable from the internet. Can I prevent this behavior?

    Se você estiver roteando todo o tráfego pela VPN, não será possível escolher arbitrariamente algum roteamento pela Internet. Você provavelmente precisará repensar seus critérios para rotear o tráfego "todo" pela VPN. Isso poderia ser "apenas tráfego HTTP / HTTPS", "tudo, exceto SSH", por exemplo?

por 01.12.2016 / 00:13