conexão SSH persistente ao conectar-se a VPN

4

Eu tenho uma máquina Linux na intranet que só posso acessar via SSH; essa máquina precisa se conectar a uma VPN usando o openconnect; no entanto, quando faço isso, sou desconectado do SSH, pois o IP da intranet não é mais válido. / p>

Posso me reconectar a partir de dentro da VPN usando o IP que foi atribuído, mas esse IP muda toda vez que a VPN é conectada, não tenho controle sobre nenhuma outra rede somente desta máquina.

Existe uma maneira de manter a conexão SSH viva durante a conexão com a VPN? obrigado.

O openconnect requer um argumento --script que use um script para configurar o roteamento, sem que a conexão seja bem-sucedida, mas nenhum nome seja resolvido e o IP da intranet permaneça válido.

Atualmente, estou usando o script / etc / vpnc / vpnc padrão do Ubuntu ( colado aqui ). com scripts de shell, mas eu sei muito pouco sobre redes, se eu tiver que modificar isso, preciso de alguma referência sobre o que ou como alterá-lo.

    
por Samus_ 08.06.2013 / 19:27

5 respostas

4

is there a way to keep the SSH connection alive while connecting to the VPN?

Não. O roteamento desse sistema muda drasticamente quando você se conecta à VPN, o que quebra todos os soquetes TCP estabelecidos.

Você deve procurar usar um multiplexador de terminal como a tela ou tmux em sua sessão ssh - dessa forma você pode ter um shell persistente ao qual você pode se reconectar.

    
por 08.06.2013 / 19:52
2

Você pode querer olhar para o que está no iptables , que lida com a filtragem de pacotes dentro do kernel. Eu uso openconnect da outra direção, e a configuração padrão é remover o acesso às interfaces padrão em favor da interface VPN recém-criada. A primeira coisa a fazer é descobrir quais rotas estão sendo criadas pela conexão VPN. Então você pode escrever um script para manipular o gateway e as rotas e, finalmente, liberar o iptables e limpar a vpn "chain" (termo usado no iptables). Eu tenho um script que se parece com algo como:

IPADDR=NN.NN.NN.N
DESIREDNET1=MM.MM.MM.MM
GATEWAY_LINE=$(netstat -rn | grep ${IPADDR})
GATEWAY=$(echo "$GATEWAY_LINE" | awk '{print $2}')
GATEWAY_DEV=gw
if [ "$GATEWAY" = "*" ]; then
    GATEWAY=$(echo "$GATEWAY_LINE" | awk '{print $8}')
    GATEWAY_DEV=''
fi
# add custom routes
route add -net $DESIREDNET1 netmask 255.255.0.0 dev cscotun0
...
# reset the default route
route del default
route add default $GATEWAY_DEV $GATEWAY

# flush iptables to clear the ciscovpn chain
iptables --flush
iptables --delete-chain
# Add out own nameservers back
if [ -f /etc/resolv.conf.vpnbackup ]
then
   cat /etc/resolf.conf /etc/resolv.conf.vpnbackup > /etc/resolv.conf
   echo "nameserver $GATEWAY" >> /etc/resolv.conf
fi

Você precisará copiar o /etc/resolv.conf para /etc/resolf.conf enquanto estiver fora da VPN para poder adicionar novamente as configurações 'normais'.

Boa sorte.

    
por 08.06.2013 / 21:13
1

Eu acho que o motivo é que quando o seu servidor linux faz conexão VPN, ele direciona todo o tráfego através do gateway na rede remota. Você pode tornar seu SSH ativo se você configurar seu cliente VPN usando apenas o gateway remoto para comunicação com a rede remota.

Eu não uso o openconnect, mas no openvpn, você pode marcar em use this connection only for resources on its network na configuração da VPN.

    
por 08.06.2013 / 20:10
1

Uma solução para esse problema é conectar-se ao mesmo servidor VPN em ambas as máquinas envolvidas na conexão do terminal.

Funciona para mim.

    
por 01.10.2015 / 20:53
1

Resposta geral

Você deve usar as opções --script e --script-tun de openconnect e fornecer um personalizado vpnc-script . Um bom ponto de partida é o vpnc-script já distribuído com o seu openconnect , Por exemplo, no OSX (HomeBrewed openconnect ) ele está localizado em /usr/local/etc/vpnc-script .

Observe que, de acordo com a documentação oficial da openconnect:

OpenConnect just handles the communication with the VPN server; it does not know how to configure the network routing and name service on all the various operating systems that it runs on.

To set the routing and name service up, it uses an external script which is usually called vpnc-script.

Melhor solução

Já existe um bom projeto chamado ocproxy que atua como um servidor proxy para openconnect , daí o nome ocproxy (< strong> O caneta C onnect Proxy ).

ocproxy is a user-level SOCKS and port forwarding proxy for OpenConnect based on lwIP. When using ocproxy, OpenConnect only handles network activity that the user specifically asks from proxy, so the VPN interface no longer "hijacks" all network traffic on the host.

Exemplo de comando OpenConnect:

echo $1 | sudo openconnect -u $2 -d --timestamp -v --passwd-on-stdin --script-tun --script "ocproxy -D $3 -v" $4

Substituir:

  • $1 com: Senha OpenConnect
  • $2 com: Nome de usuário do OpenConnect
  • $3 com: Desired Socks5 Proxy Port
  • $4 com: Endereço do servidor OpenConnect
por 01.03.2016 / 21:18