Proxy ou roteamento SSH rápido?

1

Tenho experiência com o uso do nginx em sites de proxy com a diretiva proxy_pass . Existe algo semelhante que eu possa fazer com o SSH?

Aqui está minha rede doméstica com minhas máquinas e seus nomes de host:

         <the Internet>
               |
            [router]
               |
 [kenmore]---[park]---[chiswick]

Como posso configurar park para que, sempre que obtiver uma conexão SSH, verifique o nome do host e se conecte a kenmore ou chiswick de acordo? Eu sei como fazer isso para servir HTTP, só não SSH.

    
por Ryan Kennedy 07.11.2013 / 01:30

4 respostas

1

Se você tem root-rights @ park, você pode usar o iptables - redirecionamentos:

  • ssh -p 2201 user@park → é redirecionado para kenmore: 22
  • ssh -p 2202 user@park → é redirecionado para chiswick: 22

iptables -t nat -A PREROUTING -$PARK_IP -p tcp --dport 2201 -j DNAT --to-destination kenmore:22
iptables -t nat -A PREROUTING -$PARK_IP -p tcp --dport 2202 -j DNAT --to-destination chiswick:22
iptables -t nat -A POSTROUTING -j MASQUERADE

(Se alguém tiver um iptables-snippet sem NAT, eu estaria interessado.)

    
por 07.11.2013 / 08:07
1

Se você tiver acesso de usuário em kenmore, park e chiswick, a solução mais simples seria usar chaves SSH e comandos em ~ / .ssh / authorized_keys .

Vamos supor que por simplicidade você tem um usuário em todas as três máquinas chamado ryan .

No estacionamento, crie dois pares de chaves SSH:

$ ssh-keygen -C kenmore -f kenmore.rsa
$ ssh-keygen -C chiswick -f chiswick.rsa

Em kenmore.rsa.pub , prefixar o conteúdo para que ele seja:

command="ssh ryan@kenmore" ssh-rsa KEY_HERE

Em chiswick.rsa.pub , prefixar o conteúdo para que ele seja:

command="ssh ryan@chiswick" ssh-rsa KEY_HERE

Anexe todo o conteúdo de kenmore.rsa.pub e chiswick.rsa.pub em ~ / .ssh / authorized_keys em linhas separadas.

Se você fizer o login para estacionar usando um dos arquivos de chaves ( kenmore.rsa ou chiswick.rsa ), você notará uma solicitação de senha - isso deve ser o SSH solicitar ou kenmore ou chiswick, depening em qual keyfile você usou.

    
por 07.11.2013 / 13:00
0

Se eu entendi seu requisito corretamente, acredito que não seja possível.

Quando você está veiculando HTTP, um cliente faz uma pesquisa de DNS do host e envia uma solicitação HTTP para esse host que inclui o nome do host original (do ponto de vista do cliente) nos cabeçalhos da solicitação. Quando o pedido atinge o servidor, o servidor é capaz de tomar decisões sobre como processá-lo com base no endereço IP de entrada e / ou na ideia do cliente do nome do host.

Com o SSH, por outro lado, depois que a pesquisa de DNS é feita, somente o endereço IP é usado, e o nome do host que foi usado pelo cliente para resolver esse IP nunca é visto pelo servidor.

Algumas outras opções que você pode querer considerar -

  • Tem vários daemons SSH ouvindo em portas diferentes, cada um redirecionando para um host diferente. No cliente, você pode definir seu ~ / .ssh / config com algo parecido com isto:

    Host kenmore
    Port 2201
    
    Host chiswick
    Port 2202
    

    (isto supõe que ambos resolvam para um IP que irá primeiro atingir park .)

  • No seu cliente, basta executar um segundo SSH de park como o comando para o seu primeiro SSH, por exemplo

    ssh -t kenmore ssh kenmore
    

    (assumindo kenmore resolvendo o IP de park do lado de fora, mas park conhece o IP real por kenmore desse segundo SSH quando você está dentro)

  • Execute algo como GateOne em park e faça um tunelamento por todo o HTTP, com park agindo como um jumphost / gateway para os terminais SSH que você precisa no interior.

por 07.11.2013 / 02:49
0

Esta é uma configuração incomum, pois substitui o que pode ser alcançado por meio de uma troca de 10 dólares. Mas, é claro, se um switch de 10 dólares pode fazer isso, a fortiori um pc pode fazer isso. Deve haver um gazillion maneiras de fazer isso, isso é apenas um simples.

Suponhamos que seu roteador forneça endereços no intervalo 192.168.1.21-50, e vamos chamar a interface do eth0 park com o roteador, eth1 com o kenmore e o eth2 com o chiswick.

1) Deixe park obter seu endereço IP via DHCP do roteador.

2) Vamos dar endereços IP estáticos para kenmore e chiswick. Por exemplo, kenmore 192.168.1.5 e chiswick 192.168.1.10. Por favor, note que ambos estão fora do intervalo usado pelo seu roteador, para que não haja conflitos.

3) Dependendo do SO em kenmore / chiswick, você pode precisar configurar uma tabela de roteamento neles. No Linux, você deve ter

  sudo route add default gw 192.168.1.1

e similarmente no Mac, mas no Windows eu acho que isso é automático.

4) On park: primeiro, vamos permitir o encaminhamento IPv4: como sudo edite /etc/sysctl.conf e altere esta linha

 #net.ipv4.ip_forward=0

para

 net.ipv4.ip_forward=1

Salve o arquivo, emita o comando:

 sudo sysctl -p

5) Segundo, no park, vamos adicionar essas duas rotas à tabela de roteamento:

 sudo route add -host 192.168.1.5 dev eth1
 sudo route add -host 192.168.1.10 dev eth2

Agora você está pronto para ir.

    
por 08.11.2013 / 07:26