NGINX Reverse-Proxy SSH zu mehreren Hosts

NGINX Reverse-Proxy SSH zu mehreren Hosts

Mit NGINX habe ich mehrere Reverse-Proxys, die mit normalen HTTP(s) für verschiedene Websites funktionieren. Ich habe nur eine öffentliche IP-Adresse, aber mehrere virtuelle Hosts dahinter. Dieser Teil funktioniert wie er soll.

Ich möchte mich per SSH bei allen Hosts hinter Nginx anmelden. Derzeit sind es nur drei, aber in Zukunft sollen noch mehr dazukommen.

Da Nginx höher als Version 1.9.1 ist, glaube ich, dass dies die Version war, die Streams zuließ, und ich habe mit der Konfiguration für SSH begonnen. Später möchte ich noch Datenbanken und vielleicht E-Mail hinzufügen, aber derzeit hat SSH Priorität.

Also habe ich zunächst ssh_available und ssh_enabled zum nginx-Verzeichnis hinzugefügt.

/etc/nginx/nginx.conf Ich habe folgendes hinzugefügt:

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

/etc/nginx/ssh_available/domain.com.rproxy.conf Ich habe Folgendes:

upstream ssh {
  server 192.168.1.61:22;
}

server {
  listen 22;
  proxy_pass ssh;
}

Ich habe die übliche Methode verwendet, indem ich in ssh_enabled symbolische Links zu den Konfigurationsdateien in ssh_available hinzugefügt habe.

Dadurch kann ich per SSH auf einen Host zugreifen, der sich hinter meinem Nginx-Reverse-Proxy befindet, aber nur auf einen Host.

Mit dieser aktuellen Konfiguration landet die SSH-Verbindung immer auf demselben Host, unabhängig davon, ob ich die öffentliche IP, die Subdomäne oder den FQDN verwende.

Wie kann ich dies portabler gestalten, sodass es mit mehreren Host-/Domänennamen statt nur einer einzigen IP/Domäne funktioniert?

Ich möchte, dass ich mich per SSH über eine Domäne anmelde und eine Verbindung mit dem Server herstelle, der sie hostet.

Antwort1

Ich habe eine Problemumgehung gefunden, die mehr offene Ports bedeutet, als mir lieb ist, weil SSH bislang keine Domänen akzeptiert. Es gibt zwar eine IPV6-Lösung, aber die ist für mich derzeit keine Lösung.

Es sind also mehr Ports.

Hier ist meine Lösung. Leiten Sie einen kleinen Portbereich an nginx weiter, genug Ports für jeden Server. Sie können praktisch jeden Portbereich wählen oder sich die Rosinen herauspicken, die Sie möchten, aber um dieses Beispiel so einfach wie möglich zu machen, ist ein Bereich einfacher.

Ich habe die Conf-Datei geändert, die ich in /etc/nginx/ssh_available/ erstellt habe.

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;
}

Natürlich sind Sie dabei durch die Anzahl der verfügbaren IPV4-Adressen in Ihrem Netzwerk eingeschränkt. IPV6 wäre eine bessere Option gewesen, aber ich habe es noch nicht.

Beachten Sie: Wenn Sie dieses Beispiel so verwenden, wie es ist, machen Sie einen Teil Ihrer Netzwerkinfrastruktur bekannt, indem Sie die interne IP als Portnummer an jeden weitergeben, der sie herausfinden möchte. Sie sollten die Ports, die Sie öffnen, wirklich sorgfältig auswählen und die Konfiguration entsprechend einrichten.

Abschließend möchte ich sagen, dass dies meiner Meinung nach keine großartige Antwort ist, aber eine funktionierende Antwort. Aus diesem Grund veröffentliche ich sie, akzeptiere sie aber nicht als Lösung. Sie haben möglicherweise eine bessere Methode für IPV4 als ich und ich freue mich sehr über Ihre Antworten.

verwandte Informationen