
Existem certos sites/serviços que só posso acessar na sub-rede em que 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 à rede doméstica. Ele não pode acessar serviços diretamente nos ips X e Y. Eu tenho um túnel SSH para um servidor que está em uma sub-rede que pode realmente acessar esses serviços.
Posso de alguma forma 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 através do servidor? Em outras palavras: todo o tráfego que vai para qualquer outra sub-rede ainda deve ir diretamente do laptop, sem passar pelo servidor (usando o túnel).
Responder1
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 do link para sua VPN mostrado com o ifconfig
comando.
Responder2
Versões recentes do OpenSSH suportam dispositivos de rede tun/tap para verdadeiro suporte VPN. Verhttps://help.ubuntu.com/community/SSH_VPNpara obter alguma documentação básica (obviamente destinada ao Ubuntu, mas o princípio básico se aplica a outros lugares).
Responder3
Isenção de responsabilidade: na verdade, não testei o que vou descrever e, na verdade, pode estar completamente errado, mas sua pergunta é tão intrigante que não consigo resistir à tentação de redigir uma resposta. :-) Além disso, a configuração aqui depende de algumas iptables
funcionalidades que podem existir apenas no Linux.
Supondo que você queira se conectar do seu 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. Observação:os endereços IP X1, X2, etc são os endereços IP do servidor vistos no host do gateway (aquele em que você usa SSH).
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.
Use
iptables
para redirecionar pacotes direcionados para Xn:Pn para localhost:Lniptables -t nat -A OUTPUT -p tcp -d X1 --dport P1 -j DNAT --to-destination localhost:L1 iptables -t nat -A OUTPUT -p tcp -d X2 --dport P2 -j DNAT -- localhost de destino:L2
Agora use SSH para o gateway, usando a
-L
opção de encapsular o tráfego de 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 funcionar ...
se você quiser acessar mais de um servidor, provavelmente será menos trabalhoso configurar uma VPN
ainda pode ser mais fácil usar
-D
a opção SSH para simular um proxy SOCKS e encapsular todo o seu tráfego através dele.
Responder4
Posso de alguma forma 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 através do servidor?
Isto é um pouco estranho à primeira vista porque é isso que uma VPN fará por você. O SSH tende a ser ponto a ponto, a ideia é que você conecte uma porta da sua máquina local à porta de uma máquina remota em outro lugar; ele realmente não foi projetado para o tipo de tráfego que você imagina.
Em outras palavras: todo o tráfego que vai para 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 brincar com isso porque seria muito complicado), você realmente deveria dar uma olhadaOpenVPN, que fará exatamente o que você está descrevendo. Isso não apenas encapsularia todo o tráfego, mas também poderia ser feito de forma que apenas o tráfego destinado a essas sub-redes percorresse o canal VPN. Vou avisá-lo que você ainda precisará editar um arquivo de texto nas máquinas locais e remotas, mas é bastante fácil de executar.
Para seus propósitos, como você não deseja que a parte intermediária (um servidor) veja seu tráfego, você configuraria a VPN para se conectar diretamente de sua máquina à máquina remota. Quaisquer pacotes roteados seriam criptografados antes de sair do seu laptop, para que você tivesse 100% de cobertura ponta a ponta.