Remote auf Raspberry Pi zugreifen – durch Firewall / SSH Reverse Tunnel

Kein Kommentar Autor: Jürgen (jdo)

Um von remote auf einen Raspberry Pi zuzugreifen, gibt es mehrere Möglichkeiten. Ziemlich einfach ist die Geschichte, wenn Du dynamisches DNS konfigurierst und dann einfach via SSH remote auf den Raspberry Pi zugreifst. Das funktioniert aber nur, wenn Du Zugriff auf den Router hast und Port 22 (Standard für SSH) weiterleitest.

Kannst Du keine Weiterleitung konfigurieren oder die Firewall erlaubt keinen Zugriff von außen, kannst Du einen sogenannten Reverse Tunnel aufbauen und dann auf den Raspberry Pi zugreifen. Mein Szenario sieht wie folgt aus:

  • Der Raspberry Pi, auf den ich remote zugreifen möchte, befindet sich hinter einer Firewall, die kein SSH auf das Gerät gestattet oder eingehende Verbindungen auf Port 22 (oder anderen Ports) grundsätzlich verbietet.
  • Als Remote-Rechner benutze ich ein VPS mit Linux, aber es wäre auch ein anderes Gerät in Deinem Heimnetzwerk möglich, das mit dynamischem DNS ausgestattet ist und SSH erlaubt.
  • Um die SSH-Verbindung aufrechtzuerhalten, setze ich autossh ein. Ich erkläre in diesem Beitrag, wie Du das konfigurierst.

Wie man auf Remote auf einen Raspberry Pi hinter einer Firewall zugreift

Ich habe ein VPS genommen, mit dem der Raspberry Pi dauerhaft verbunden bleibt. Du kannst aber auch eine Workstation nehmen und so weiter. Letztlich benötigst Du einen anderen Computer, der via SSH erreichbar ist. In einem Bild erklärt, sieht mein Szenario wie folgt aus (sorry für den Schnellschuss in GIMP 🙂 ):

Remote auf einen Raspberry Pi via Reverse Tunnel zugreifen
Remote auf einen Raspberry Pi via Reverse Tunnel zugreifen

Time needed: 30 minutes.

Das Prinzip, remote auf einen Raspberry Pi zuzugreifen, ist einfach erklärt. Die Konfiguration dauert aber ein paar Minuten.

  1. Verbinde Deinen Raspberry Pi mit dem VPS

    Zunächst habe ich meinen Raspberry Pi via SSH mit dem VPS verbunden und dabei einen Port weitergeleitet: (ssh -R 42000:localhost:22 vps-user@remote-rechner)

    Ich verknüpfe hier sozusagen den Remote-Port 42000 mit dem lokalen Port 22 auf dem Pi – leite also weiter.

  2. Zugriff auf den VPS

    Da ich einen VPS benutze, auf den ich ebenfalls zunächst zugreifen muss, verbinde ich mich mit dem VPS – via meinem Linux-Recher: ssh user-vps@vps

  3. Remote auf den Raspberry Pi zugreifen

    Auf dem VPS steht mir nun der Port 42000 für einen Rückweg zu Raspberry Pi offen: ssh pi-user@localhost -p 42000

  4. autossh für permanente SSH-Verbindung

    Damit die SSH-Verbindung vom Pi zum VPS permanent ist und stabil bleibt, setze ich autossh ein. Damit verbindet sich der Raspberry Pi automatisch wieder, selbst wenn eine Zwangstrennung erfolgt oder die Internetverbindung anderweitig ausfällt. Sobald eine Internetverbindung wiederhergestellt ist, stellt autossh die SSH-Verbindung wieder her.

Das Prinzip ist ziemlich trivial, aber die einzelnen Schritte sind etwas komplexer. Deswegen nachfolgend noch eine detaillierte Anleitung. Du musst sie nur Deinen Anforderungen entsprechend anpassen.

Schritt für Schritt: Remote auf einem Raspberry Pi zugreifen

Die meiste Konfigurationsarbeit ist auf dem Raspberry Pi notwendig. Präparieren wir den Winzling also zuerst, bevor wir remote darauf zugreifen.

autossh installieren

Die ersten Schritte kannst Du in beliebiger Reihenfolge durchführen. Ich fange mit der Installation von autossh an:

sudo apt install autossh
autossh auf dem Raspberry Pi installieren
autossh auf dem Raspberry Pi installieren

Nun haben wir das Paket, das wir später konfigurieren. Kümmern wir uns zunächst um andere Sachen.

SSH-Schlüssel einrichten, um Remote-Zugriff zu ermöglichen

Im nächsten Schritt richten wir einen SSH-Schlüssel für unseren User auf dem Pi ein. Den Schlüssel benötigen wird, um ohne Passwort Zugriff auf den VPS oder den entfernten Rechner zu bekommen. Du kannst alle Vorgaben mit der Eingabetaste bestätigen. Das Passwort muss leer bleiben.

ssh-keygen -t rsa -b 4096

Warum muss das Passwort leer sein? Der Grund ist, dass sich der Raspberry Pi ohne Passwort und nur mit dem Schlüssel auf dem VPS anmelden kann. Vergibst Du ein Passwort, würde das System bei jedem Anmeldeversuch danach fragen und es ist keine automatische Anmeldung möglich.

Für Remote-Zugriff auf den Raspberry Pi einen SSH-Schlüssel ohne Passwort erstellen
Für Remote-Zugriff auf den Raspberry Pi einen SSH-Schlüssel ohne Passwort erstellen

SSH-Schlüssel auf den VPS kopieren

Pi-SSH-Schlüssel auf VPS kopieren

Nun kopierst Du den Schlüssel Deines Pi auf den VPS. Was passiert hier? Du erlaubst hier eine Anmeldung am VPS mit dem Schlüssel Deines Raspberry Pi. Da wir das Passwort leer gelassen haben, ist danach eine direkte Anmeldung möglich.

Kopiere zunächst den Schlüssel. Hast Du bisher alles auf Standard gelassen, reicht dieser Befehl – ohne die Angabe des Schlüssel-Ordners – aus:

ssh-copy-id user-vps@vps-server-name-oder-ip-adresse

Verbindest Du Dich erstmalig mit dem VPS, musst Du bestätigen, dass eine Verbindung in Ordnung ist – mit yes.

Im Anschluss wirst Du nach Deinem VPS-Passwort gefragt. Gibst Du das korrekt ein, wird der Schlüssel kopiert. Im Anschluss kannst Du Dich direkt und ohne Passwort auf dem VPS anmelden:

ssh user-vps@vps-server-name-oder-ip-adresse

Hier der komplette Vorgang als Bild:

SSH-Schlüssel kopieren und am VPS anmelden
SSH-Schlüssel kopieren und am VPS anmelden

Vom VPS meldest Du Dich wieder an, indem Du den Befehl exit ausführst.

Reverse Tunnel starten und testen

Nachdem wir eine SSH-Verbindung vom Raspberry Pi zum VPS etablieren können, testen wir nun den Reverse Tunnel, den wir für eine Remote-Verbindung benutzen. Der Befehl ist ähnlich, aber etwas komplexer:

ssh -R 42000:localhost:22 user-vps@vps-server-name-oder-ip-adresse

Der Zusatz -R 42000:localhost:22 in diesem Befehl leitet auf dem Raspberry Pi den Port 42000 auf 22 um und Port 42000 ist außerdem Deine Eingangstür auf dem VPS. Du wirst wieder am VPS angemeldet, diesmal ist die Tür allerdings durch Port 42000 offen. Teste das wie folgt:

ssh user-raspberry-pi@localhost -p 42000

Verbindest Du Dich erstmalig mit dem Raspberry Pi, musst Du die Verbindung wieder genehmigen. Danach wirst Du nach dem Passwort des Pi-Users gefragt und Du bist wieder zurück. Du hast Dich also remote via VPS auf dem Raspberry Pi angemeldet. Das ist auch der Test, dass der Reverse Tunnel funktioniert. Hier die Rundfahrt als Bild:

Von Raspberry Pi zum VPS über diese Maschine wieder zurück
Von Raspberry Pi zum VPS über diese Maschine wieder zurück

Die SSH-Tunnel-Verbindung vom Raspberry Pi zum VPS muss für unseren Zweck natürlich automatisch passieren. Eine manuelle Verbindung ergibt nur dann Sinn, wenn Du jemandem anders einen temporären Remote-Zugang zu Deinem Raspberry Pi geben möchtest.

autossh konfigurieren und einrichten

Ein Script, um autossh automatisch zu starten, findest Du bei GitHub. Du kannst es auch als ZIP auf Deinem Raspberry Pi herunterladen und dann auspacken:

wget -c https://gist.github.com/Clement-TS/48ae8d23f6452cd1a3a071640c1bd07b/archive/6376edec6612cfc9010592beb3fdb7fb5390d50b.zip

Im Anschluss packst Du die Datei mit unzip aus:

unzip 6376edec6612cfc9010592beb3fdb7fb5390d50b.zip

Du bekommst eine lange Zahl als Ordner erstellt, indem sich die Datei autossh.init.sh befindet. In diesem Script musst Du lediglich diese Parameter anpassen:

  • TUNNEL_HOST=DEINE-VPS-ADRESSE
  • TUNNEL_USER=USERNAME-VPS
  • TUNNEL_PORT=42000
  • MONITOR_PORT=42001
  • KEY_PATH=/home/USERNAME-PI/.ssh/id_rsa

Achtung! Ich hatte einen Tippfehler in meinem Usernamen für den VPS und auf meinem Remote-Server läuft fail2ban. Nun hat das Script mehrmals vergeblich versucht, sich anzumelden und der Server hat meine IP-Adresse blockiert. Passiert Dir das auch, musst Du warten, bis Dich fail2ban entsperrt oder Du siehst, dass Du eine andere IP-Adresse bekommst. Am besten ist es, Du machst erst gar keinen Fehler. 🙂

Nach den Anpassungen kopierst Du das Script in den Ordner init.d und konfigurierst das System, dass automatisch eine Verbindung hergestellt wird.

sudo cp /Download-Pfad/autossh.init.sh /etc/init.d/autossh
sudo chmod +x /etc/init.d/autossh
sudo update-rc.d -f autossh defaults 90 90 > /dev/null 2>&1
sudo /etc/init.d/autossh star

Anstelle der letzten Zeile kannst Du auch das System neu starten.

Du kannst auf dem Pi überprüfen, ob autossh startet. Benutze einfach diesen Befehl:

ps -aef | grep autossh

Läuft das Programm, bekommst Du so eine ähnliche Ausgabe:

autossh läuft – bereit für eine Remote-Verbindung zum Raspberry Pi via Reverse Tunnel
autossh läuft – bereit für eine Remote-Verbindung zum Raspberry Pi via Reverse Tunnel

Tipp! Die Verbindung mit autossh manuell testen. Willst Du autossh anderweitig starten oder einfach testen, ob sich eine Verbindung etablieren lässt, kannst Du das Programm manuell aufrufen. Sobald Du das Fenster aber schließt, wird die Verbindung getrennt (außer Du benutzt screen oder etwas in der Art):

/usr/lib/autossh/autossh -M 42001 -nNTv -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -i /home/bitblokes/.ssh/id_rsa -R 42000:localhost:22 user-vps@vps-server-name-oder-ip-adresse

Nach einem Neustart des Pi würde autossh ebenfalls nicht mehr laufen. Soll das ganze wirklich automatisch ablaufen, musst Du eine Methode finden, die Software bei Systemstart auszuführen (wie oben beschrieben).

Weitere Informationen zu autossh findest Du in der entsprechenden man page.

Einige Gedanken zu dieser Methode

Vorsicht! Mit dieser Methode schießt Du in gewisser Weise ein Loch in die Firewall. Sollte jemand Zugriff auf Dein Remote-Gerät bekommen, hat die Person dadurch einen potenziellen Angriffspunkt in das Netzwerk, in dem der Raspberry Pi steht.

Der Ansatz eignet sich aber auch, wenn Du kein Duck DNS oder einen anderes dynamisches DNS auf Deinem Raspberry Pi konfigurieren möchtest. In diesem Fall verbindet sich der Pi mit dem Remote-Gerät und Du musst den Namen oder die IP-Adresse nicht kennen.

Die Methode funktioniert darüber hinaus, wenn Dein Raspberry Pi via VPN mit dem Internet verbunden ist. Einige VPNs bieten zwar Port-Weiterleitungen an, aber die Konfiguration ist nicht immer trivial. Die hier gezeigte Methode, um remote auf einen Raspberry Pi zuzugreifen, funktioniert immer. Hier ein kurzer Beweis, dass die Sache mit einem VPN ebenfalls klappt. Da mein Port 42000 schon belegt war, musste ich zum Test Port 43000 nehmen – das ist aber völlig egal.

Remote-Zugriff auf den Raspberry Pi über einen Reverse Tunnel, der via VPN im Internet ist
Remote-Zugriff auf den Raspberry Pi über einen Reverse Tunnel, der via VPN im Internet ist

Sicherer ist die Methode mit dem Reverse Tunnel ebenfalls. Du kannst sämtliche Zugriffe auf Deinen Raspberry Pi unterbinden, weil die Initiative von dem Winzling ausgehen muss. Du musst Deine Firewall also nicht öffnen, um von außen auf Dein Netzwerk zuzugreifen. So ein Zugriff ist wesentlich subtiler als einfach Port 22 zu öffnen oder weiterzuleiten. Kombinierst Du die Sache noch mit einem VPN, bekommst nicht einmal Dein ISP, Deine Firma und so weiter mit, dass Du ein Loch in die Firewall schießt.

Mehrere Raspberry Pis! Mit verschiedenen Port-Nummern könntest Du auch mehrere Raspberry Pis verbinden. Das wird nach einer Weile vielleicht etwas unübersichtlich, aber theoretisch funktioniert das.

FAQ – Remote auf Raspberry Pi zugreifen

Es gibt verschiedene Methoden, um remote auf einen Raspberry Pi zuzugreifen. Über dynamisches DNS ist die einfachste Methode, sie funktioniert aber nicht immer. Sicher und zuverlässig ist ein Reverse Tunnel. Hier häufig gestellte Fragen zum Thema: Remote auf Raspberry Pi zugreifen.

Wie kann ich remote auf einen Raspberry Pi zugreifen?

Ein direkter Zugriff ist möglich, wenn Du die IP-Adresse kennst. Gibt es keine statische IP-Adresse, hilft ein dynamisches DNS wie Duck DNS. Allerdings musst Du Zugriff auf die Firewall haben und Port 22 für SSH-Zugriff weiterleiten können. Ist das nicht der Fall, ist ein Reverse Tunnel die Lösung. Mit autossh ist die Sache ziemlich bequem.

Wie greife ich remote auf einem Raspberry Pi hinter einer Firewall zu?

Hast Du keinen Zugriff auf die Firewall und kannst den gewünschten Port (22 für SSH) nicht weiterleiten, bleibt Dir nur die Methode über einen Reverse Tunnel (oder einen Drittanbieter). Möchtest Du nicht auf die Software Dritter setzen oder von denen abhängig sein, benutzt Du am besten einen Reverse Tunnel.

Ist ein Reverse Tunnel gefährlich?

Das kommt darauf an. Fakt ist, dass Du damit ein Loch in die Firewall Deiner Firma, Deiner Schule und so weiter schießt. Bekommt ein Angreifer Zugriff auf Dein Remote-Gerät, hat er ein potenzielles Einfallstor in das Netzwerk, in dem Dein Raspberry Pi steht. Deswegen sollte Dein Pi entsprechend abgesichert sein – am besten kein Standard-Benutzer und ein sicheres Passwort!

Funktioniert autossh zuverlässig?

Ja, das tut es. Die Einrichtung dauert ein paar Minuten, aber sobald eine Verbindung hergestellt ist, läuft der Remote-Zugriff auf den Raspberry Pi wie am Schnürchen.

Ist es kompliziert, remote auf einen Raspberry Pi zuzugreifen?

Jein. Es kommt darauf an, welche Methode Du benutzt. Die gute Nachricht ist, dass Du die entsprechenden Methoden nur einmalig einrichten musst und danach funktionieren sie zuverlässig. Die Option via autossh wirkt auf den ersten Blick vielleicht sehr kompliziert, aber das Setup ist weniger dramatisch, als Du denkst. Einmal konfiguriert, funktioniert es tadellos.

Kann ich ein VPN auf dem Raspberry Pi für den Fernzugriff nutzen?

Einige VPNs erlauben die Weiterleitung von Ports. Dafür benötigst Du aber ein mit dem Raspberry Pi kompatibles VPN und die Konfiguration ist nicht immer trivial. NordVPN* stellt Clients für Raspberry Pi zur Verfügung (32-Bit und 64-Bit), mit denen ein Remote-Zugriff via Reverse Tunnel funktioniert – das habe ich getestet.

Ist Remote-Zugriff auf einen Raspberry Pi ein Sicherheitsrisiko?

Jede Tür in Dein Netzwerk oder das Deiner Firma, Deiner Schule und so weiter ist ein potenzielles Security-Risiko. Als Daumenregel gilt, dass Du nur solche Services und Ports öffnen solltest, die Du auch wirklich benötigst. Greifst Du via Reverse-Tunnel auf einen Raspberry Pi zu, sichere die Geräte so gut wie möglich ab. Setze unkonventionelle Usernamen und sichere Passwörter ein, um das Risiko so gering wie möglich zu halten.

Nette Pi-Konstellation

Suchst Du ein VPN für den Raspberry Pi? NordVPN* bietet einen Client, der mit Raspberry Pi OS (32-Bit / 64-Bit) und Ubuntu für Raspberry Pi (64-Bit) funktioniert.




 Alle Kommentare als Feed abonnieren

Kommentare sind geschlossen.