SSH de proxy reverso NGINX para vários hosts

SSH de proxy reverso NGINX para vários hosts

Usando o NGINX, tenho vários proxies reversos que funcionam com http(s) normais para vários sites. Eu tenho apenas um endereço IP público, mas vários vhosts por trás dele. Esta parte está funcionando como deveria.

Quero fazer ssh em todos os hosts por trás do nginx. Atualmente, existem apenas três, mas mais estão por vir no futuro.

Como o nginx está acima da versão 1.9.1, acho que foi a versão que permitiu streams que comecei a configurar para ssh, mais tarde irei querer adicionar bancos de dados ao mix e talvez mail, mas por enquanto o ssh é a prioridade.

Então, para começar, adicionei ssh_available e ssh_enabled ao diretório nginx.

/etc/nginx/nginx.conf adicionei o seguinte:

stream {
  include /etc/nginx/ssh_enabled/*;
}

/etc/nginx/ssh_available/domain.com.rproxy.conf Eu tenho o seguinte:

upstream ssh {
  server 192.168.1.61:22;
}

server {
  listen 22;
  proxy_pass ssh;
}

Usei o método usual de adicionar links simbólicos em ssh_enabled aos arquivos conf em ssh_available.

Isso me permite fazer ssh em um host que está por trás do meu proxy reverso nginx, mas apenas em um host.

Com esta configuração atual, a conexão SSH sempre chega ao mesmo host, não importa se eu uso o IP público, subdomínio ou fqdn.

Como posso transformar isso em algo mais portátil para que possa funcionar com vários nomes de host/domínio em vez de apenas um único IP/domínio?

O que eu quero que aconteça é fazer ssh usando um domínio e conectar-se ao servidor que o hospeda.

Responder1

Eu criei uma solução alternativa, isso significa mais portas abertas do que eu gostaria porque até o momento o ssh não aceita domínios, existe uma solução IPV6 circulando, mas atualmente não é uma solução para mim.

Portanto, são mais portas.

Aqui está minha solução. Encaminhe um pequeno intervalo de portas para o nginx, portas suficientes para cada servidor. Você pode escolher praticamente qualquer intervalo de portas ou escolher a dedo, mas tornar este exemplo o mais simples possível é mais fácil.

Modifiquei o arquivo conf que criei em /etc/nginx/ssh_available/

upstream 59 {
      server 192.168.1.59:22;
}

server {
  listen 22059;
  proxy_pass 59;
}

upstream 61 {
      server 192.168.1.61:22;
}

server {
  listen 22061;
  proxy_pass 61;
}

upstream 62 {
      server 192.168.1.62:22;
}

server {
  listen 22062;
  proxy_pass 62;
}

upstream 63 {
      server 192.168.1.63:22;
}

server {
  listen 22063;
  proxy_pass 63;
}

É claro que com isso você fica limitado pelo número de endereços IPV4 disponíveis na sua rede, o IPV6 teria sido uma opção melhor, mas ainda não o tenho.

Observe que, se você usar este exemplo como está, estará anunciando uma parte de sua infraestrutura de rede, fornecendo o IP interno como um número de porta para qualquer pessoa que queira resolver isso. Você realmente deve escolher as portas que abre e definir a configuração apropriadamente.

Por fim, não, esta é IMO, não é uma ótima resposta, mas é uma resposta funcional, por isso estou postando, mas não aceitando como solução. Você pode ter um método melhor para IPV4 do que o que eu descobri e agradeço suas respostas.

informação relacionada