Evitar a conexão SSH perdida após o login na VPN na máquina do servidor

12

Encontrei um problema com o qual não posso lidar. Quando estou conectado a um VPS por SSH e tento estabelecer conexão VPN nesse VPS, a conexão SSH entre VPS e minha máquina se perde. Presumo que seja porque o roteamento foi alterado pelas configurações da VPN. Como evitar isso?

    
por mic22 07.12.2014 / 13:55

4 respostas

5

Você precisa adicionar a opção route-nopull (e remover redirect-gateway , se existir) ao arquivo de configuração do seu cliente OpenVPN no seu VPS.

Dessa forma, conectar-se a um servidor VPN não modifica nenhuma rota em seu VPS, portanto, você poderá definir as que precisa sozinho.

    
por 09.01.2016 / 09:22
1

Vamos considerar o seguinte cenário:

  1. o seu VPS tem uma única interface ethernet, configurada com o endereço IP 4.3.2.1/24;
  2. o seu VPS pode acessar a Internet através de um gateway padrão 4.3.2.254
  3. o seu VPS não ainda ativou qualquer conexão do OpenVPN; portanto, há no tun interface active

Em tal cenário, a partir de sua máquina (suponhamos que sua máquina seja 9.8.7.6/24 com def-gw 9.8.7.254) você pode estabelecer com sucesso uma conexão SSH para 4.3.2.1. Portanto, ambos os hosts 4.3.2.1 e 9.8.7.6 podem alcançar um ao outro com êxito.

Agora, com essa conexão SSH estabelecida, suponhamos:

  1. você inicia uma conexão OpenVPN do seu VPS 4.3.2.1;
  2. como tal, uma nova interface tun0 será dinamicamente configurada (suponha que será atribuído um IP 10.10.10.2, com um PTP 10.10.10.1).

Nesta fase:

  • SE nenhuma rota será empurrada do servidor OpenVPN remoto para o seu VPS local, então nada mudará em termos de roteamento, e sua conexão SSH sobreviverá sem nenhum problema. Neste caso, o único tráfego que atravessa a VPN é o direcionado ao servidor remoto OpenVPN (10.10.10.1);

  • SE servidor OpenVPN remoto enviará de volta algumas rotas e, especificamente, se o gateway padrão do VPS for substituído por 10.10.10.1 (terminal remoto do OpenVPN), ENTÃO você está tendo problemas. Nesse caso, você está tunelando ALL o tráfego IP de saída (com exceção do próprio OpenVPN) dentro da VPN.

Neste segundo caso (substituindo def-gw logo após estabelecer a conexão VPN), sua conexão SSH anterior irá "travar", devido ao roteamento assimétrico:

  • O tráfego da sua máquina (9.8.7.6) para o VPS (4.3.2.1) fluirá pelo caminho anterior, nunca alterado;
  • Tráfego do VPS (4.3.2.1) para sua máquina (9.8.7.6):
    • sem a VPN (inicialmente, portanto) foi roteada pelo gateway 4.3.2.254;
    • após o estabelecimento do link da VPN, com substituição de defgw relacionada, é roteado através da VPN (10.10.10.1).

Em outras palavras: assim que o link VPN for estabelecido, sua rota de retorno do VPS para sua máquina mudará e ... isso não é uma coisa boa (vários dispositivos de rede, ao longo do caminho de retorno, podem reconhecer tal caminho assimétrico e simplesmente descartar pacotes).

Além disso, há grandes chances de que seu servidor OpenVPN remoto esteja agindo como uma caixa NAT: todo o tráfego proveniente da VPN será NATted com o endereço IP público do servidor OpenVPN remoto. Se isso for verdade, as coisas não são mais ... "não é bom", mas definitivamente "ruim", como para a sua conexão SSH: retornar o tráfego, além de voltar ao longo de uma rota diferente, está voltando para sua máquina < strong> com um IP de origem diferente (o da interface pública do servidor VPN).

Como resolver este problema?

Muito facilmente, de fato.

Basta instruir o seu servidor VPS para não direcionar o tráfego para a sua máquina ao longo da VPN, mas sim confiar na rota anterior . Deve ser tão fácil quanto adicionar, antes de iniciar o OpenVPN:

     route add -host 9.8.7.6 gw 4.3.2.254

onde:

  • 9.8.7.6 é o endereço IP público da sua máquina
  • 4.3.2.254 é o gateway padrão original do seu VPS.
P.S .: ao fornecer uma pergunta muito mais detalhada, você teria obtido uma resposta muito mais rápida: -)

    
por 08.12.2014 / 00:39
0

Isso pode ajudar:

coloque TCPKeepAlive=yes no seu /etc/ssh/sshd_config

De

man sshd_config | less +/'^ *TCPKeepAlive'

TCPKeepAlive

Specifies whether the system should send TCP keepalive messages to the other side. If they are sent, death of the connection or crash of one of the machines will be properly noticed. However, this means that connections will die if the route is down temporarily, and some people find it annoying. On the other hand, if TCP keepalives are not sent, sessions may hang indefinitely on the server, leaving ''ghost'' users and consuming server resources.

The default is yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set tono''.

    
por 07.12.2014 / 15:44
-1

Uma vez depois de conectar VPN, o ssh está desconectado porque o tráfego ssh do servidor passa pelo servidor VPN. Portanto, para evitar isso, execute o seguinte comando antes de conectar a VPN.

route add -host seu-maquina-public-ip gw Servidor-gatway-ip dev eth0

seu-máquina-pública-ip: IP da sua máquina de onde você está fazendo o SSH. Servidor-gatway-ip: IP do Gatway / roteador desse servidor

O comando acima irá redirecionar o tráfego através do gateway fornecido, não através do servidor VPN.

    
por 04.11.2015 / 08:28