Use ssh com uma interface de rede específica

38

Estou usando openconnectpara conectar a VPN. Depois de inserir minhas credenciais, recebo o seguinte:

POST https://domain.name/...
Got CONNECT response: HTTP/1.1 200 OK
CSTP connected. DPD 30, Keepalive 30
Connected tun0 as xxx.xxx.xxx.xxx, using SSL
Established DTLS connection

Em execução ifconfigmostra que tenho uma nova interface de rede tun0com um determinado endereço IP.

Pergunta: Como sshutilizo apenas a interface de rede tun0para poder acessar computadores nessa rede privada?

Editar:

Minha configuração de rede ( route -n) parece ser a seguinte:

172.16.194.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.25.0     0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
axel22
fonte
Você pode elaborar sua configuração de rede? Com o roteamento adequado, qualquer tráfego destinado à rede conectada ao tun0 usará essa interface.
Eli Heady

Respostas:

45

Não é o cliente ssh que decide por qual interface os pacotes TCP devem passar, é o kernel. Em resumo, o SSH solicita que o kernel abra uma conexão com um determinado endereço IP, e o kernel decide qual interface deve ser usada consultando as tabelas de roteamento.

(O seguinte pressupõe que você esteja no GNU / Linux; o conceito geral é o mesmo para todos os Unices, mas as especificidades dos comandos a serem executados e a forma como a saída é formatada podem variar.)

Você pode exibir as tabelas de roteamento do kernel com os comandos route -n e / ou ip route show .

O OpenConnect deveria ter adicionado uma linha para a tun0interface; as conexões com qualquer endereço correspondente a essa linha serão roteadas através dessa interface. Por exemplo, executando route -nno meu laptop, recebo a seguinte saída:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.30.0.1       0.0.0.0         UG    0      0        0 eth0
10.30.0.0       0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

Isso significa que as conexões com hosts na rede 192.168.122.0/24 (ou seja, endereços 192.168.122.0 a 192.168.122.255 de acordo com a notação CIDR ) serão roteadas pela interface virbr0; aqueles para 169.254.0.0/16 e 10.30.0.0/24 passarão eth0, e qualquer outra coisa (a linha 0.0.0.0) será roteada através de eth0 para o host 10.30.0.1 do gateway .

Riccardo Murri
fonte
Obrigado por esclarecer isso para mim - parece que openconnectnão adicionou uma linha para a tun0interface. Suponho que devo fazer isso manualmente.
axel22
1
@ axel22 Você pode dar uma olhada aqui: bbs.archlinux.org/viewtopic.php?id=69064 para obter um script que use openconnect e configure as rotas.
Riccardo Murri 04/07
@RiccardoMurri Gostaria de responder à minha pergunta
Rahul Gautam
7

Não sei quando foi introduzido, mas o cliente OpenSSH no RHEL7 tem isso em sua página de manual:

 -b bind_address
         Use bind_address on the local machine as the source address of the connection.  Only useful on systems with more than one address.

Não é tão bom quanto poder escolher a interface, mas fechar.

ugob
fonte
Também o -Bsinalizador, que parece permitir especificar o nome da interface de rede a ser usada.
Henrik
A opção -b bind_addressnão funcionou para mim, de alguma forma. Alterar rotas temporariamente deve funcionar. BTW: A -Bopção não existe na versão SSH que acompanha o Ubuntu.
John
2

Se você estiver usando o Network Manager para gerenciar suas conexões com a Internet (como é o gerenciador padrão em muitos sistemas), convém instalar ambos openconnecte network-manager-openconnect.

Depois que o plug-in OpenConnect estiver instalado no Network Manager, abra o Network Manager e clique no +ícone no canto inferior esquerdo. Você deve receber uma caixa de combinação com a opção VPN e, em seguida, a capacidade de selecionar VPN compatível com OpenConnect .

Usando o Network Manager para fazer interface com o OpenConnect, suas rotas aparecerão automaticamente e ajudarão você a se conectar à VPN. Isso é especialmente útil para acessar servidores por VPN, como o FireHost faz as coisas.

earthmeLon
fonte
1

Apenas adição de uma resposta. Você pode usar -bsinalizador e definir seu IP de origem no momento do acesso.

Formato + Exemplo

ssh -b interface-ip remote-ip
ssh -b 10.11.22.40 10.11.22.38 
Shafiq
fonte