Como rotear endereços específicos através de um túnel?

14

Existem certos sites / serviços aos quais eu só posso acessar a partir da sub-rede na qual meu servidor está localizado (pense no cenário típico da intranet). Existe uma maneira de rotear de forma transparente o tráfego que vai para esses endereços através de um túnel SSH?

Considere a seguinte configuração:

Meu laptop está conectado na rede doméstica. Ele não pode acessar serviços nos ips X e Y diretamente. Eu tenho um túnel SSH para um servidor que está em uma sub-rede que pode realmente acessar esses serviços.

De alguma forma, posso encapsular automaticamente todo o tráfego para as sub-redes de X e Y para passar por esse túnel, sem ter que executar toda a solução VPN que enviaria todo o meu tráfego pelo servidor? Em outras palavras: todo o tráfego que chega a qualquer outra sub-rede ainda deve ir diretamente do laptop, sem passar pelo servidor (usando o túnel).

Ruben Vermeersch
fonte

Respostas:

6

Você pode especificar a interface através da qual rotear o tráfego na tabela de roteamento:

sudo route add <host.com> -interface <ppp0>

Onde host.com é o nome do host ou ip que você deseja acessar através da interface e ppp0 é o identificador de link para o seu vpn mostrado com o ifconfigcomando

Sam Coles
fonte
2
Nota: pelo menos no ubuntu -interfacenão é uma opção, routeentão a sugestão acima apresenta um erro de uso. Além disso, como isso resultará no roteamento através do túnel ssh, conforme solicitado pelo OP?
Arielf
3

Versões recentes do OpenSSH suportam dispositivos de rede tun / tap para suporte verdadeiro à VPN. Consulte https://help.ubuntu.com/community/SSH_VPN para obter alguma documentação básica (obviamente destinada ao Ubuntu, mas o princípio básico se aplica a outros lugares).

durin42
fonte
Observe que isso requer privilégios de root no laptop e no host do gateway.
Riccardo Murri
1

Isenção de responsabilidade: Na verdade, não testei o que vou descrever e, de fato, pode estar completamente errado, mas sua pergunta é tão intrigante que não resisto à tentação de redigir uma resposta. :-) Além disso, a configuração aqui depende de algumas iptablesfuncionalidades que podem existir apenas no Linux.

Supondo que você deseja conectar-se do laptop a uma porta P1 específica no servidor X1, à porta P2 no servidor X2 etc. - Vou descrever como rotear o tráfego TCP para esses pares específicos de servidor + porta através de um túnel SSH. Nota: os endereços IP X1, X2 etc. são os endereços IP do servidor, conforme vistos no host do gateway (aquele em que você faz o SSH).

  1. Selecione algumas portas locais não utilizadas L1 (por exemplo, 10000), L2 (por exemplo, 10001), etc. As portas L1, L2, ... devem ser todas distintas e seu número deve ser igual ao número de servidores distintos (Xn, Pn) pares de portas.

  2. Use iptablespara redirecionar pacotes direcionados ao Xn: Pn para localhost: Ln

    iptables -t nat -A OUTPUT -p tcp -d X1 --dados P1 -j DNAT --para o localhost de destino: L1 localhost de destino: L2

  3. Agora SSH para o gateway, usando a -Lopção para encapsular o tráfego do localhost: Ln para (Xn, Pn):

    ssh gateway.server -L localhost: L1: X1: P1 -L localhost: L2: X2: P2 ...

Exemplo:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

Ressalvas:

  • só funciona para TCP, se é que funciona ...

  • se você deseja acessar mais de um servidor, provavelmente é menos trabalhoso configurar uma VPN

  • ainda pode ser mais fácil usar a -Dopção SSH para simular um proxy SOCKS e encapsular todo o seu tráfego por meio disso.

Riccardo Murri
fonte
Na verdade funciona! (Infelizmente, ele não se encaixa a minha situação específica, onde eu quero para rotear o tráfego que se origina de uma máquina virtual, não de localhost.)
pvgoran
1

sub-redes de X e Y para passar por esse túnel, sem ter que executar toda a solução VPN que enviaria todo o meu tráfego pelo servidor?

O que você quer é a definição de uma VPN.

Uma VPN não deve

enviar todo o [seu] tráfego através do servidor?

Se for, não está configurado corretamente.

Supõe-se que qualquer máquina que você está tentando acessar por meio de um túnel ou VPN, por definição, não seja acessível pela Internet. Portanto, apenas o endereço roteável necessário que não seja da Internet deve ser roteado pela VPN.

Se você tiver uma situação mais complicada, como apenas a máquina X e Y e nada mais. Sua equipe de TI pode colocá-los em uma sub-rede para você. Em seguida, no computador cliente, apenas roteie essa sub-rede pela VPN.

Stephen Jazdzewski
fonte
0

De alguma forma, posso encapsular automaticamente todo o tráfego para as sub-redes de X e Y para passar por esse túnel, sem ter que executar toda a solução VPN que enviaria todo o meu tráfego pelo servidor?

Isso é um pouco estranho à primeira vista, porque é isso que uma VPN fará por você. O SSH tende a ser um caso ponto a ponto, com a idéia de conectar uma porta em sua máquina local à porta de uma máquina remota em outro local; ele realmente não foi projetado para o tipo de tráfego que você imagina.

Em outras palavras: todo o tráfego que chega a qualquer outra sub-rede ainda deve ir diretamente do laptop, sem passar pelo servidor (usando o túnel).

Novamente, uma VPN cuidaria disso.

Se você está preocupado com uma solução "pesada" para obter tráfego VPN seguro (ou seja, você não quer se intrometer com isso porque seria muito complicado), você deve realmente olhar para o OpenVPN , que fará exatamente o que você está descrevendo. Ele não apenas encapsularia todo o tráfego, mas também poderia ser feito de maneira que apenas o tráfego destinado a essas sub-redes fizesse a viagem pelo canal da VPN. Avisarei que você ainda precisará editar um arquivo de texto nas máquinas local e remota, mas é bastante fácil executar a operação.

Para seus propósitos, como você não deseja que a parte no meio (um servidor) veja seu tráfego, configure a VPN para conectar-se diretamente de sua máquina à máquina remota. Todos os pacotes roteados seriam criptografados antes de sair do laptop, para que você tivesse 100% de cobertura de ponta a ponta.

Avery Payne
fonte
0

Como já foi dito, se você deve "encapsular todo o tráfego nas sub-redes", provavelmente precisará usar a VPN.

No entanto, para acessar apenas alguns serviços, convém usar o recurso de encaminhamento de porta local do SSH, o que é realmente simples. Por exemplo, se você digitar (do seu laptop):

ssh -N -L 3333:localhost:2222 jump_box

conectar-se a localhost:2222, será como conectar a localhost:2222partir de jump_box. Você pode usar várias opções -L de uma só vez e conectar-se a serviços em outros hosts, se o ssd_config on jump_boxpermitir.

Você pode usar autosshcom systemdou similares para manter os túneis em funcionamento.

Jeff
fonte