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).
fonte
-interface
não é uma opção,route
entã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?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).
fonte
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
iptables
funcionalidades 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).
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 ao Xn: Pn para localhost: Lniptables -t nat -A OUTPUT -p tcp -d X1 --dados P1 -j DNAT --para o localhost de destino: L1 localhost de destino: L2
Agora SSH para o gateway, usando a
-L
opçã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:
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
-D
opção SSH para simular um proxy SOCKS e encapsular todo o seu tráfego por meio disso.fonte
O que você quer é a definição de uma VPN.
Uma VPN não deve
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.
fonte
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.
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.
fonte
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):
conectar-se a
localhost:2222
, será como conectar alocalhost:2222
partir dejump_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 onjump_box
permitir.Você pode usar
autossh
comsystemd
ou similares para manter os túneis em funcionamento.fonte