Conecte meu homeserver, executando um servidor OpenVPN, a uma VPN externa

0

Seguindo a Situação.

Um dos meus homeservers está executando um servidor OpenVPN, bem como um OpenSSH Server (e algumas outras coisas) , ambos remotamente acessíveis.

Quando não estou em casa, geralmente me conecto ao servidor por VPN e abro algumas sessões SSH pelo ip público do servidor.

Eu quero conectar meu homeserver a uma VPN externa, de modo que todo o tráfego (de saída) que passa pelo meu servidor seja tunelado através da VPN externa também.

|MobilePhone|---VPN ----|
                        |
|Other Dev|-----SSH ----|----VPN---->| Homeserver | --- VPN ---> | External Provider |
                        |               ^
|Laptop|--SSH/NFS/VPN---|               |
                                        |
                                        |
|Laptop|--------SSH---------------------|

Eu ainda quero poder usar o SSH no meu servidor através do seu (antigo) IP público. Meu roteador ainda está diretamente conectado ao meu provedor, então qualquer tráfego de entrada deve ser redirecionado diretamente para o servidor, então acho que isso deveria ser possível.

Ingênuo como eu sou, pensei, pode funcionar apenas se eu conectar meu servidor à VPN externa via tun1 (tun0 é usado pelo servidor) e estou pronto. A configuração do cliente da VPN externa tem nobind set, então não deve haver nenhum conflito nas portas.

Eu ainda podia ver a saída da conexão do openvpn. No entanto, pouco tempo depois, todas as minhas conexões caíram.

* Agora não consigo me conectar à minha VPN nem posso fazer SSH nela. Além disso, o apache não está mais acessível. Eu acho que nada seria

Meu roteador ainda responde a pings em seu endereço IP público.

Acho que a conexão com a VPN assumiu a interface de rede dos meus servidores ou algo nesse sentido. Portanto, deve ser um problema de roteamento.

Mas eu não sei exatamente o que está acontecendo lá e quais coisas eu teria que mudar para que isso funcionasse.

Eu gostaria de entender por que isso não está funcionando da maneira como tentei.

O que preciso aprender para configurar esse cenário corretamente?

Notas :

  • Eu pensei sobre os pacotes que retornavam. Mas eu pensei que eu poderia de alguma forma configurar uma rota, de tal forma que todos os pacotes vindos do ip interno do meu roteador fossem enviados de volta para o roteador ao invés da VPN?
  • Algo parecido com ip route add 192.168.0.0/24 via 192.168.0.1 dev eth1 ?

Atualizar

Eu consegui dar um passo adiante adicionando as seguintes linhas a /etc/network/interfaces

up ip rule add from 192.168.0.0/24 table 128 || true
up ip route add table 128 to 192.168.0.0/24 dev eth0 || true
up ip route add table 128 default via 192.168.178.1 || true

Isso me permitiu acessar o apache e o SSH no meu servidor por meio de seu IP público original, mesmo quando o servidor está conectado a uma VPN externa.

Eu acho que isso tem a ver com o que eu tinha em mente, todos os pacotes originados da minha LAN ou roteador são roteados pela eth0 usando meu roteador como gateway padrão, em vez do adaptador tun1 da VPN externa.

Até aí tudo bem.

O problema que estou tendo agora é, quando meu laptop está conectado ao servidor OpenVPN em execução no meu homeserver, cada conexão expira.

Eu acho que o problema é semelhante ao problema original. Os pacotes originados do meu laptop, conectados via VPN (172.16.0.10), não são roteados de volta para o laptop, pois os pacotes retornados serão enviados através do gateway padrão, que é a VPN externa à qual o meu servidor está conectado.

Eu brinquei com a tabela de roteamento tentando encaminhar qualquer coisa vinda de 172.16.0.0 de volta para 172.16.0.xx via tun0 . Eventualmente, eu estraguei a tabela de roteamento e agora qualquer pedido atinge o tempo limite quando meu laptop está conectado aos meus servidores VPN, independentemente de o meu servidor estar conectado à VPN externa ou não.

Eu limpei a tabela de roteamento e reiniciei o servidor, esperando consertar pelo menos isso novamente.

Eu não tenho certeza se isso pode ser um problema que meu laptop está conectado à minha lan (192.168.178.xx) também.

    
por C5H8NNaO4 21.01.2016 / 16:19

1 resposta

1

Seu problema é que os pacotes enviados pelo seu notebook são enviados pelo link VPN do servidor de casa usando o endereço de origem original (ou seja, o da interface tun do laptop, provavelmente). Esses pacotes devem ser descartados pelo seu provedor de VPN, mas, mesmo que não estejam, os pacotes de resposta não chegarão ao seu laptop.

A solução é certificar-se de que os pacotes de resposta também passem pelo seu homeserver; Para conseguir isso, eles devem parecer respostas enviadas para o seu servidor. Portanto, você precisa reescrever o endereço de origem nos pacotes que saem da interface tun1 dos servidores de casa para o IP dessa interface, usando, por exemplo,

.

iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE

Usando tcpdump -nlvvv -i tun1 , você pode verificar o que o comando iptables fez no seu tráfego de saída. Se você tivesse usado o tcpdump para examinar o tráfego, provavelmente teria percebido imediatamente o que estava errado. :)

    
por 22.01.2016 / 22:33