Nginx-Portweiterleitung / SSH-Tunneling

Nginx-Portweiterleitung / SSH-Tunneling
  • Ich habe einen Computer (nennen wir ihn A) in einem lokalen Netzwerk ohne statische IP-Adresse, auf den von außen zugegriffen werden kann. (SSH-Port AAAAA)
  • A hat einen Webserver, auf den ich von außen zugreifen können möchte
  • Ich habe einen vom Internet aus erreichbaren Server (B), auf dem auch ein Webserver läuft (SSH-Port: BBBBB)
  • Ich möchte von jedem Computer mit einem Webbrowser auf die Webserver auf A bis B zugreifen können.

Ich habe SSH-Remote-Tunneling erfolgreich mit dem folgenden Setup verwendet:

  • auf der Maschine A:

    $> ssh -f -N -p BBBBB -R 0.0.0.0:9000:localhost:AAAAA [email protected]

  • auf der Maschine C:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • im Webbrowser von Maschine C,manual proxy configuration SOCKS host: localhost, port 9001, SOCKS v5

Das funktioniert wirklich gut, aber es ist sehr mühsam, jedes Mal den SSH-Befehl auf C starten und die Einstellungen im Webbrowser ändern zu müssen ...

Also sprach ich mit jemandem darüber, der mir sagte, dass ich die Einrichtung wahrscheinlich vereinfachen könnte, indem ich den Teil, der auf Maschine C ausgeführt wird, direkt auf Server B ausführe, mit einigen Webkonfigurationen in nginx auf dem Webserver von B. Also habe ich Folgendes versucht:

  • Bei A, wie vorher
  • zu B:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • in Bs Nginx-Konfiguration:

    $> cat /etc/nginx/sites-available/default:

upstream tunnel {
    server 127.0.0.1:9000;
}

server {
        listen 80;
        [...]
      location /A {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass http://tunnel;
  }
    [...]
}
server {
        listen 443 ssl;
        [...]
      location /A {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://tunnel;
  }
    [...]    
}

http://B.B.B.B/AMeines Wissens sollte die Anfrage eines Webbrowsers auf einem mit dem Internet verbundenen Rechner zu 127.0.0.1:9000dem weitergeleiteten Port für meinen Rechner A getunnelt werden, um mir Zugriff auf den Webserver auf A zu ermöglichen.

Irgendetwas stimmt mit diesem Setup jedoch nicht, denn wenn ich versuche, eine Verbindung herzustellen, http://B.B.B.B/Awird nach einer langen Ladezeit (etwa eine Minute) eine leere Seite mit der folgenden Fehlermeldung angezeigt:

SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3
Protocol mismatch.

Ich habe diesen Fehler ein wenig gegoogelt und einige Posts mit relativ ähnlichen Problemen gefunden, aber ehrlich gesagt bin ich mit meinen (sehr) begrenzten Kenntnissen in dieser Art von Dingen überfordert, wenn ich versuche, deren Lösung auf meinen Anwendungsfall zu übertragen … Kann mir jemand helfen?

verwandte Informationen