ssh em um servidor conectado a um serviço VPN

18

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

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

Quando o openvpn estiver em execução e conectado ao serviço VPN do provedor, o servidor não estará acessível por nenhum meio e, é claro, por um bom motivo

A imagem é algo 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 coisa entre elas são minhas suposição, não é algo que eu sei de fato.
  • Eu configurei um cron job que executa a cada minuto pings 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 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, gostaria de poder fazer o ssh de myhome para My VPS na imagem, enquanto a VPN está ativa e usando o PuTTY.

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

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

    
por Scott 20.10.2015 / 19:58

2 respostas

7

Você fica bloqueado do seu VPS porque, uma vez que o serviço VPN esteja ativo, seus pacotes ssh são roteados pela VPN, não pelo IP público de seu 50PS V.3.2.1.3.

Vamos supor que o seu servidor:

  • 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 é x.x.x.1
  • eth0 é dispositivo para 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 do cliente OpenVPN: openvpn --config youropenvpn-configfile.ovpn &

Você então poderá usar o ssh em seu servidor enquanto seu servidor estiver conectado ao serviço vpn.

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

    
por 14.11.2015 / 19:02
2

Isso pode ser um pouco tarde, mas ...

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

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

Você pode usar o mesmo número para a marca de conexão, marca de firewall e tabela de roteamento. Eu 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

===

ATUALIZAÇÃO:

O acima funciona bem para mim no Debian Jessie. Mas em um sistema Wheezy mais 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

Existe "12.345.67.89" que deve ser o gateway não-VPN original.

    
por 04.08.2016 / 22:28