ssh em um servidor conectado a um serviço VPN

22

Eu tenho um servidor virtual privado, que gostaria de executar um servidor Web enquanto meu servidor está conectado a um serviço VPN

Quando a conexão VPN com meu provedor não está ativa, eu posso fazer o que eu quiser com este servidor, ssh, scp, http etc.

Depois que o openvpn estiver em execução e conectado ao serviço VPN do provedor, o servidor não estará acessível de forma alguma e, é claro, por uma boa razão

A imagem é mais ou menos assim:

           My VPS                             ------------
         +----------------+                  /            \
         |                |                 /   Internet  /       101.11.12.13
         |        50.1.2.3|-----------------\   cloud    /----<--- me@myhome
         |                |                  /           \
         |     10.80.70.60|                 /             \
         +----------------+                 \              \
                        :                    \_____________/
                        :                           :
                        :                           :
                        :                           :
                        :                           :
                  +------------------+              :
                  |     10.80.70.61  |              :
                  |               \  |              :
                  |                \ |              :
                  | 175.41.42.43:1197|..............:
                  |   175.41.42.43:yy|   
                  |       .....      |
                  |   175.41.42.43:xx|
                  +------------------+



Legend                  
------ Line No VPN connection present
...... Line VPN connection established

Coisas a esclarecer:

  • Todos os endereços IP e números de porta acima e abaixo são fictícios
  • As linhas com números de porta xx, yy e qualquer outra coisa entre elas são minha suposição, não algo que eu saiba de fato.
  • Eu configurei uma tarefa cron que é executada a cada minuto emite outro VPS meu, executando o apache2 Nos logs do apache2, posso ver o endereço IP de origem mudando de 50.1.2.3 para 175.41.42.43, quando a VPN está ativa, então a VPN está funcionando bem

Os logs do OpenVPN mostram estes:

UDPv4 link remote: [AF_INET]175.41.42.43:1197
[ProviderName] Peer Connection Initiated with [AF_INET]175.41.42.43:1197
TUN/TAP device tun0 opened
do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
sbin/ip link set dev tun0 up mtu 1500
/sbin/ip addr add dev tun0 local 10.80.70.60 peer 10.80.70.61

Neste ponto, eu gostaria de poder ssh de myhomepara My VPSna imagem, enquanto a VPN estiver ativa e usando PuTTY.

No passado, em um dos meus locais de trabalho, recebi uma sequência muito estranha de ssh em um servidor extremamente seguro que tinha três @sinais na string. Então, ele estava pulando de caixa em caixa como eu imagino, mas como as caixas de salto estavam executando alguma versão do sistema operacional Windows e um aplicativo proprietário nelas, não havia visibilidade para eu ver o que estava acontecendo nos bastidores. Então eu não prestei muita atenção. Agora estou começando a perceber que posso estar na mesma situação ou em uma situação semelhante.

Usando os endereços IP e as portas no diagrama e / ou no snippet de log, alguém pode me dizer como posso atravessar esse túnel e acessar meu servidor?

Scott
fonte

Respostas:

10

Você fica bloqueado do seu VPS porque, uma vez que o serviço VPN é ativado, seus pacotes ssh são roteados pela VPN, não pelo IP público 50.2.1.3 do seu VPS.

Vamos assumir:

  • O IP público é 50.1.2.3 (conforme sua configuração de exemplo)
  • A sub-rede IP pública é 50.1.2.0/24
  • O gateway padrão é xxx1
  • eth0 é um dispositivo para o gateway

Faça o seguinte usando o iproute2:

ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev eth0
ip route add table 128 default via x.x.x.1

Em seguida, execute sua configuração de cliente OpenVPN: openvpn --config youropenvpn-configfile.ovpn &

Você poderá fazer o ssh no servidor enquanto o servidor estiver conectado ao serviço vpn.

Você precisaria adicionar os filtros iptable apropriados para restringir o acesso ao seu IP público a partir de sessões não ssh: 22.

hcb
fonte
Isso funcionou lindamente.
Anthony Giorgio
3
Funcionou para mim também. Ainda assim, tenho problemas para entender exatamente o que isso faz; você se importaria de explicar que tipo de conexão isso permite / não permite?
The Coding Monk
Sim, eu gostaria de mais algumas explicações também. "Faça o seguinte usando o iproute2" não explica explicitamente o que é o iproute2 ou em qual máquina executar esta ação.
21818 deanresin
Como obtenho minha sub-rede IP pública? Estou pesquisando na web há algum tempo e não consigo encontrá-la. O que é isso exatamente?
Tony Friz
2

Pode ser um pouco tarde, mas ...

O problema é que o gateway padrão é alterado pelo OpenVPN e interrompe sua conexão SSH atual, a menos que você configure rotas apropriadas antes de iniciar o OpenVPN.

O que segue funciona para mim. Ele usa iptables e ip (iproute2). Abaixo, supõe-se que a interface de gateway padrão antes do OpenVPN ser iniciado seja "eth0". A idéia é garantir que quando uma conexão com eth0 for estabelecida, mesmo que eth0 não seja mais a interface de gateway padrão, os pacotes de resposta para a conexão retornem novamente a eth0.

Você pode usar o mesmo número para a marca de conexão, marca de firewall e tabela de roteamento. Usei números distintos para tornar as diferenças entre eles mais aparentes.

# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412

===

ATUALIZAR:

O acima funciona bem para mim no Debian Jessie. Mas, em um sistema Wheezy antigo, acabei de descobrir que preciso adicionar "via" à entrada da tabela de roteamento:

# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412

"12.345.67.89" deve ser o gateway não VPN original.

John Doe
fonte
Isso também deve funcionar com o ExpressVPN? Eles têm um instalador que vem com um "expressvpn" ferramenta de linha de comando e você pode chamar de "connect" ou "desconexão Eu tentei o que você postou e não fez um trabalho que tem que ser OpenVPN..?
Tony Friz
Eu simplesmente não consigo fazer isso funcionar ... me deixando louco. A resposta acima de @hcb funciona. Mas estou realmente curioso para saber por que sua resposta não está funcionando para mim! Algo está faltando, o que eu suponho que esteja fazendo com que as regras MANGLE não sejam executadas
Motsel