Reverse SSH Tunnel

Was ist das überhaupt, ein reverse Tunnel, das ist ein Tunnel der von SSH andersherum aufgebaut wird, das bedeute das der Server sich zu unseren Server(Client) verbindet, wozu wird das jetzt benötigt, man braucht das überall wo man nicht selbst ein Portforwarding erstellen kann, z.B. bei einem Mobilfunkstick oder hinter eine Firmenfirewall (Achtung, das könnte Arbeitsrechtlich nicht inordnung  gehen).

Ich gehe jetzt mal davon aus das wir einen Raspberry Pi nehmen mit Mobilfunkstick. jetzt können wir zwei Szenarien durch gehen.

  1. Raspberry Pi verbindet sich direkt mit euren PC oder
  2. Raspberry Pi verbindet sich mit eine Vps und wir loggen uns über den Vps der als Relay arbeitet auf dem Raspberry Pi ein.

Raspberry Pi verbindet sich direkt mit dem Client PC

Wickeln wir Erstmal das erste Szenario  ab. Wir installieren uns Erstmal auf unser System den SSH-Server dazu auf dem Client

sudo apt-get upate && sudo apt-get -y upgrade

danach

sudo apt-get install openssh-server

sollte das erledigt sein müssen wir in unseren Router noch ein Portforwarding einrichten, auf dem Port auf dem unser SSH-Server lauscht das wäre Standard Port 22 und die IP von unseren PC. Damit wäre der Teil erledigt.

Wichtig, wir brauchen dringend einen Dyndns Anbieter wie noip.com wenn wir den Tunnel länger benutzen möchten.

Zum testen kann man auch Erstmal seine Öffentliche IP-Adresse benutzen dazu www.ip.cc  oder halt www.wieistmeineip.de

Jetzt starten wir den Raspberry Pi der noch an unseren LAN hängt. Dort konfigurieren wir den Mobilfunkstick (werde ich hier jetzt nicht weiter erläutern). Wenn das erledigt ist installieren wir auf dem Raspberry Pi autossh

sudo apt-get upate && sudo apt-get -y upgrade && sudo apt-get install autossh

Autossh ist dafür da das bei einen eventuell Internet Abbruch der Tunnel neu aufgebaut wird. Ist ja besonders wichtig da wir ja eventuelle nicht Vorort sind um es manuell zu starten.

Jetzt testen wir Erstmal ob alles klappt dazu auf dem Raspberry Pi folgendes ausführen

ssh -N -R 10022:localhost:22 benutzername@dyndns.de
oder 
ssh -N -R 10022:localhost:22 benutzername@öffentlicheip

Der Tunnel sollte jetzt stehen, jetzt einfach auf dem Client PC folgendes ausführen.

ssh -p 10022 pi@localhost

Ja richtig localhost, da der Reverse Tunnel vom Raspberry Pi den Port auf unserem Rechner 10022 öffnet und dort auf Verbindungen wartet.

So der Tunnel funktioniert, leider noch nicht das sich der Raspberry Pi von selbst auf unseren Rechner anmelden kann.Wir loggen uns Erstmal wieder beim Raspberry an und wechseln ins .ssh Verzeichnis

cd /home/pi/.ssh

Falls das Verzeichnis noch nicht erstellt wurde müssen wir es selbst machen

mkdir /home/pi/.ssh

wir wecheln ins Verzeichnis.

cd /home/pi/.ssh

dort führen wir diesen Befehl aus.

ssh-keygen -t rsa

Das nach folgende bestätigen wir ohne ein Passwort einzugeben. Hätten wir das erledigt sollte im Verzeichnis eine Datei mit dem Namen id_rsa.pub sein. Diese lesen wir aus mit dem Befehl.

cat /home/pi/.ssh/id_rsa.pub

jetzt sollte ein langer Text ausgeben werden, wir markieren alles und kopieren alles in den zwischen Speicher.

Jetzt gehen wir an unseren PC und wechseln ins Verzeichnis .ssh falls nicht vorhanden bitte erstellen. Dort erstellen wir die Datei authorized_keys

nano /home/benutzername/.ssh/authorized_keys

dort kommt der Inhalt von unserer id_rsa.pub rein die wir vom Raspberry Pi haben. jetzt sollte sich der Raspberry Pi ohne Passwort bei unseren PC anmelden können ohne ein Passwort einzugeben. puuh fast geschafft.

Jetzt fehlt nur noch eines wir müssen dafür sorgen das sich der Raspberry Pi nach einem Reboot wieder selbst anmeldet dafür schreiben wir eine kleines Skript. dafür erstellen wir im Homeverzeichnis vom Raspberry Pi ein Verzeichnis mit dem Namen Tunnel.

mkdir /home/pi/tunnel

dort erstellen wir die Datei tunnel.sh

nano /home/pi/tunnel/tunnel.sh

dort schreiben wir folgendes rein.

#!/bin/bash
autossh -fN -R 10022:localhost:22 benutzername@Dnydns.de

Speichern die Datei ab und machen das Skript ausführbar.

chmod +x /home/pi/tunnel/tunnel.sh

Jetzt öffnen wir Crontab um das Skript nach einem Reboot zu starten.

crontab -e

Dort tragen wir am ende der Datei das ein.

@reboot /home/pi/tunnel/tunnel.sh

Jetzt sind wir fertig. Wir schalten den Raspberry Pi aus trennen den Pi vom LAN starten ihn mit dem Mobilstick neu, warten einen Moment und testen anschließend ob es klappt.

Das 2. Szenario Raspberry Pi verbindet sich mit VPS-Relay

Hier werde ich nicht alles erneut aufzählen sondern nur die Schritte ändern die dafür notwendig sind damit man sich vom VPS-Relay verbinden kann.

Als erstes loggen wir uns in unseren VPS ein und öffnen die Datei sshd_config

sudo nano /etc/ssh/sshd_config

dort schreiben wir folgendes rein.

GatewyPorts clientspecified

Datei abspeichern und den SSH-Server neu starten

sudo /etc/init.d/ssh restart

vom VPS abmelden und zum Raspberry Pi wechseln dort schreiben wir in unserer tunnel.sh Datei folgendes rein

autossh -fN -R ipVPS:10022:localhost:22 benutzername@IpVPS

Jetzt können wir von unserm PC aus über unseren VPS-Relay auf unseren Raspberry Pi zugreifen dafür folgendes Befehl ausführen.

ssh pi@ipVPS -p 10022

so fertig.:-)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.