Remote auf Raspberry Pi zugreifen – durch Firewall / SSH Reverse Tunnel
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 🙂 ):
Time needed: 30 minutes
Das Prinzip, remote auf einen Raspberry Pi zuzugreifen, ist einfach erklärt. Die Konfiguration dauert aber ein paar Minuten.
- 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. - 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
- 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
- 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
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.
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:
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:
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 start
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:
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.
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.
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.
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.
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!
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.
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.
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.
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.