“Tunnel” de uma rede para outra

1

Tenho certeza de que a resposta para isso estaria disponível no Google, mas não sei exatamente o que estou pesquisando no Google.

Situação;

Temos duas redes; nossa própria rede interna (192.168.0. [0-255]) e nossa rede 'servidor' (endereços internos são 192.168.1. [0-255]). Nossa rede de servidores está localizada em um datacenter remoto e nossos servidores são dedis contratados (eu temos controle total sobre o software do servidor, uma mistura de RedHat 5/6 e FreeBSD, mas nenhum controle sobre o hardware de rede ou de servidor). Nossa rede de servidores fica atrás de um firewall que limita certas portas externas que nós também temos controle total de software, mas suas características são limitadas a isso, um firewall / NAT (sem coisas complicadas de VPN, etc). Nossa rede interna é razoavelmente básica, temos uma linha de 20Mb / s de nosso ISP conectado a um roteador doméstico Netgear típico. Também temos um servidor Mac OS / X que executa nossos serviços de rede (DNS, DHCP, etc.)

O que queremos;

O que gostaríamos de poder fazer é, nessas redes completamente separadas, poder acessar os servidores na outra rede usando apenas o endereço IP ou o nome do host interno (mesma diferença).

Então, estou na minha estação de trabalho, 192.168.0.10, em nossa rede interna. Se eu abrir meu terminal e ssh 192.168.1.20 ele se conectaria ao servidor em 192.168.1.20 em nossa rede de servidores, como se estivesse na sala *. Da mesma forma, se eu estivesse em um servidor SSH e quisesse puxar algo do nosso servidor Mac em nossa rede interna, eu deveria ser capaz apenas de scp 192.168.0.100:file ./ .

Isso se estende a outras coisas, como montar uma unidade NFS em um servidor em nossas estações de trabalho *, conectando-nos a nossos bancos de dados sem ter que abrir portas no firewall (bloqueamos nosso endereço IP externo estático, mas ainda é irritante ).

Eu meio que sei o que quero, mas não sei bem por onde começar. Eu acho que a maneira mais fácil seria algum tipo de conexão VPN entre os dois sites, então nós roteamos certos IPs através do túnel VPN, eu não tenho idéia se isso é possível.

Existe apenas algum software (podemos obter novo hardware em nossa rede interna, mas, como eu digo, não temos acesso físico à nossa infraestrutura de servidores) que conseguiria isso?

Esta é provavelmente uma pergunta boba com uma resposta óbvia, mas ainda estou perplexo.

* O desempenho pode ser terrível, mas não seria pior do que se conectar remotamente.

    
por Smudge 21.12.2011 / 10:16

3 respostas

2

A VPN pode resolver seu problema. Eu recomendo o OpenVPN.

Mas se você quiser apenas SSH e SCP, será suficiente se você simplesmente configurar as configurações NAT nos roteadores de borda.

Por exemplo: abra a porta (por exemplo) 2200 até 2210 em seu roteador de borda em local de trabalho separado

assim:

  • 2200 será traduzido para a porta 22 e endereço 192.168.1.20
  • 2201 será traduzido para a porta 22 e endereço 192.168.1.21
  • e assim por diante.

depois disso, você pode se conectar ao local de trabalho desanexado:

ssh <wan_ip_of_detached_workplace> -p 2200

isto irá conectar-se ao 192.168.1.20 no seu local de trabalho independente.

Espero que isso ajude.

    
por 21.12.2011 / 15:55
2

EDIT: A maior parte desta resposta ajuda você a ssh a uma caixa na sua rede interna sem problemas. Veja abaixo na seção " Trabalhando com outros recursos de rede " para ler mais sobre isso.

Você também pode fazer isso de maneira muito elegante com o SSH:

Passo 1 : configure / escolha uma caixa de salto

Muitas redes corporativas têm o que normalmente é chamado de "bastião host" ou uma caixa de salto. Esta máquina normalmente tem muitos de seus serviços de rede desabilitados, salve o ssh (e freqüentemente em uma porta não padrão). Se você não tem uma máquina como essa na sua rede de 'servidores', encontre uma caixa que possa ser acessada via ssh da sua rede interna para testar.

Passo 2 : Edite seu arquivo de configuração ssh

Encontre seu arquivo de configuração ssh (geralmente em ~/.ssh/config ) e ative seu editor de texto favorito. Digamos que sua caixa de salto esteja em jump.foo.com e um dos hosts que você deseja acessar esteja em server.foo.com . Inclua o seguinte:

Host server.foo.com
  User <username>
  ProxyCommand /usr/bin/nc -x localhost:1080 %h %p

Host jump.foo.com
  User <username>
  DynamicForward localhost:1080

substituindo <username> pelo seu nome de usuário. Você também pode precisar editar o caminho para nc (netcat): observe que este é o caminho para o netcat em seu host local. Caso a configuração não faça 100% de sentido, vou dividi-lo:

O jump.foo.com config inclui uma diretiva para iniciar um proxy SOCKS escutando na porta especificada (no meu exemplo, porta 1080). Isto significa que quando você ssh para jump.foo.com , você também está iniciando um proxy SOCKS automaticamente ... fique ligado.

O server.foo.com config diz: quando eu ssh para server.foo.com , executo o ProxyCommand especificado:

/usr/bin/nc -x localhost:1080 %h %p

em que a opção -x permite especificar o endereço de proxy (nesse caso, a conexão em localhost na porta 1080 que acabamos de abrir), %h = host e %p = porta.

Etapa 3 : ssh

ssh para jump.foo.com (eu uso tmux , um tela alternativa, e sempre tem uma janela aberta com uma conexão para o meu jump.foo.com ). Agora, em uma janela / terminal separada, tente simplesmente ssh diretamente para server.foo.com . Devo observar que server.foo.com pode ser um nome de host interno ou e endereço IP interno (em sua rede de servidores).

Assumindo que você acertou tudo, você deve passar para server.foo.com sem problemas.

Existem várias maneiras de tornar esse processo mais simples, com configurações ssh e aliases de bash mais robustas. Aqui estão alguns artigos que usei como referência há algum tempo, quando o configurei, o que deve apontar na direção certa:

link link link

Trabalhando com outros recursos de rede

Digamos que você precisa da área de trabalho remota em um host windows.foo.com em sua rede de 'servidores'. Em uma janela,

ssh -L 3390:windows.foo.com:3389 jump.foo.com

Isso encaminha todo o tráfego na porta 3390 em localhost para a porta 3389 (a porta de área de trabalho remota padrão) em windows.foo.com . Para realmente chegar em windows.foo.com , aponte seu aplicativo de área de trabalho remota para localhost:3390 e você poderá se conectar de forma transparente a windows.foo.com .

man ssh ou Google "ssh port forwarding" para mais informações.

Lembre-se também de que você sempre pode

telnet <server> <port>

para ter certeza de que você pode falar com <server> on port , a la

telnet localhost 3390

Adicionando novos hosts na rede foo.com

Você não precisará configurar uma entrada para cada servidor na sua caixa de salto. Apenas

ssh -o "ProxyCommand /usr/bin/nc -x localhost:1080 %h %p" new.server.foo.com

E sim, você deve ser capaz de acessar hosts na sua rede interna por nome de host ou IP.

Assim como definimos em nosso arquivo de configuração ssh, você pode passar o argumento ProxyCommand para ssh com a opção -o . Novamente, isso deve enviar seu tráfego ssh para new.server.foo.com através do mesmo proxy SOCKS na porta 1080.

Para cada domínio foo.com , você pode simplesmente adicionar uma regra curinga no seu arquivo de configuração ssh:

Host *.foo.com
      User <username>
      ProxyCommand /usr/bin/nc -x localhost:1080 %h %p

Se você quiser ssh para um host que não tenha uma entrada no seu arquivo de configuração, você também pode usar um alias bash:

alias ssh-socks='ssh -o "ProxyCommand /usr/bin/nc -x localhost:1080 %h %p"'

ssh-socks newer.server.foo.com

Não tenho certeza se a solicitação de DNS é feita pelo seu localhost ou se isso acontece na caixa de salto. Eu tentei um tcpdump em localhost quando ssh'ing para alguns hosts na minha rede 'servidor'

tcpdump port 53

e realmente não vi nenhum tráfego (não entra em / etc / hosts ... eu teria que fazer um pedido de DNS para acertar o host). Isso pode significar que as solicitações de DNS são feitas a partir da caixa de salto, mas não posso estar 100% confiante.

    
por 22.12.2011 / 09:24
1

O túnel VPN é uma resposta, com uma pequena adição ruim ( parte dos detalhes somente abaixo)

Este túnel deve ser (bem, um muito melhor tem que ser , você pode como último recurso usar túnel VPN p2p do host para hospedar) estabelecido entre as fronteiras, aparecerá como WAN-link adicional, que rota dentro de si todo o tráfego para a rede "remota" (e sim, a rede remota pode ser visível do local, depende ... mas factível).

Pode ser uma solução de hardware ou um software puro (o OpenVPN irá para a solução SW), mas - muito complexo para escrever aqui todos os detalhes em uma tentativa.

Tente iniciar a partir de documentos no local do OpenVPN (se você puder instalá-lo em ambos os lados) e entender amostras para diferentes tipos de conexão dele

    
por 22.12.2011 / 06:39