Software

Heimischen Raspberry Pi mit VPN Tunnel übers Internet erreichbar machen

Raspberry Pi Cluster

Du möchtest deinen Raspberry Pi über einen VPN mit deinem Server verbinden und so über das Internet erreichen können? Ich erkläre dir in diesem Beitrag wie das funktioniert.

Beim experimentieren mit Kubernetes kam ich auf die Idee meinen Raspberry Pi, der zu Hause steht, in das Cluster einzubinden. Dabei habe ich schnell festgestellt, dass ein normales Port-Forwarding mit DynDNS oder SSH-Tunneln nicht in Frage kommt: Kubernetes benötigt u.A. eine Port Range von 30.000 – 32.767 und viele weitere Ports die zugänglich sein müssen.

Da hilft nur eines: den Raspberry Pi per VPN mit meinem Server verbinden. Ich habe mich für Tinc entschieden, einen Open Source Daemon für Virtual Private Networks. Nach erfolgreichem Setup ist jeder Port des Raspberry Pis vom Server aus erreichbar und umgekehrt.

Unser Setup sieht in etwa so aus:

 

Wie funktioniert das Ganze?

Wenn du weißt wie so ein Setup funktioniert kannst du hier direkt zur Anleitung springen.

Bei unserem Setup werden alle Ports unseres Pis im Heimnetz auf dem Server zugänglich gemacht. Der VPN funktioniert ohne Portfreigaben im Router. Der VPN baut  – wie der Name Virtual Private Network schon sagt – ein virtuelles Netzwerk auf, sodass Raspberry Pi und Server sich im gleichen Netzwerk befinden. Wir verwenden zwei private IP-Addressen die wir dem Pi und dem Server in diesem virtuellen Netzwerk zuweisen. Wenn alles eingerichtet ist, können wir den Server auf dem Pi unter der IP 10.0.0.1 und den Pi auf dem Server unter 10.0.0.2 erreichen, so als wären beide in einem gemeinsamen Netzwerk.

Vorraussetzungen

  • Einen eigenen Server mit Linux, einer festen IP und SSH-Zugang
  • Einen Raspberry Pi, Odroid oder sonstigen Linux-Computer der in deinem Heimnetz läuft

 

Installation und Einrichtung des Raspberry Pi VPN Dienstes

Tinc VPN auf dem Server und Computer zu Hause installieren

Tinc Konfiguration auf dem Server anlegen

    1. Öffne  /etc/tinc/tinc.conf mit einem Texteditor
    2. Füge folgenden Inhalt in die Datei ein:

      Damit sagen wir Tinc, dass der Server „server“ heißt, IPv4 verwendet und auf dem Interface tun0  läuft
    3. Tinc Start und Stop-Skripte anlegen
      1. Öffne /etc/tinc/tinc-up und füge folgenden Inhalt ein:

        Hier setzen wir die IP-Addresse über die der Server im VPN-Netzwerk erreichbar sein wird auf 10.0.0.1
      2. Öffne /etc/tinc/tinc-down und füge folgenden Inhalt ein:
      3. Beide Skripte ausführbar machen:
    4. Schlüssel für den Server generieren
    5. /etc/tinc/hosts/server  mit Texteditor bearbeiten und um IP-Addresse des Servers und Subnet erweitern:

Konfiguration auf dem Raspberry Pi zu Hause anlegen

    1. Öffne /etc/tinc/tinc.conf mit einem Texteditor
    2. Füge folgenden Inhalt in die Datei ein:

      Damit sagen wir Tinc, dass der Pi „home“ heißt, IPv4 verwendet und auf dem Interface tun0  läuft. Zudem wird mit ConnectTo  festgelegt, dass sich Tinc mit dem Server „server“ verbinden soll
    3. Tinc Start und Stop-Skripte anlegen
      1. Öffne /etc/tinc/tinc-up und füge folgenden Inhalt ein:

        Hier setzen wir die IP-Addresse über die der Pi im VPN-Netzwerk erreichbar sein wird auf 10.0.0.2
      2. Öffne /etc/tinc/tinc-down und füge folgenden Inhalt ein:
      3. Beide Skripte ausführbar machen:
    4. Schlüssel für den Server generieren
    5. /etc/tinc/hosts/home  mit Texteditor bearbeiten und Subnet erweitern:

Server und Home miteinander bekannt machen

    1. Die Datei /etc/tinc/hosts/home  vom Pi auf den Server nach /etc/tinc/hosts/home  kopieren
    2. Die Datei /etc/tinc/hosts/server  vom Server auf den Pi nach /etc/tinc/hosts/server  kopieren
    3. Auf beiden Geräten mit tincd  Tinc starten.
    4. Fertig!

Du solltest nun auf deinem Server den Pi zu Hause mit ssh pi@10.0.0.2  und auf dem Pi den Server mit  ssh root@10.0.1  erreichen können. Wenn etwas nicht funktioniert hat kannst du Tinc mit tincd -D starten um Debug-Informationen zu erhalten.

Service auf dem Raspberry Pi im Heimnetz aus dem Internet erreichen

Wenn du jetzt z.B. dein PiHole aus dem Internet ansteuern möchtest ist das ganz einfach: Da der Pi jetzt auf allen Ports auf unserem Server unter 10.0.0.2  erreichbar ist, können wir z.B. mit Nginx oder Apache per Virtual-host auf einen Port auf unserem Pi zugreifen:

Tinc VPN beim Neustart mitstarten

Unter Debian bzw. Raspbian ist Tinc bei mir nicht beim Booten mitgestartet. Ich habe systemd verwendet und einen Tinc-Service aufgebaut:

  1. Öffne /etc/systemd/system/mytinc.service  und füge folgendes ein (funktioniert auf dem Pi und Server gleichermaßen):
  2. Services neu laden und den Tinc-Service aktivieren

Fazit

Ich bin mit diesem Setup wirklich sehr zufrieden. Keine nervigen Portfreigaben mehr in der FritzBox oder SSH-Tunnel die immer wieder neu konfiguriert werden müssen. In meinem Fall war es für Kubernetes unumgänglich, aber jedes andere Setup bei dem man einen Dienst auf den Pi im Heimnetzwerk aus dem Internet erreichen will ist hiermit einfach und zuverlässig eingerichtet.

Eure Fragen beantworte ich gerne in den Kommentaren!

Ähnliche Beiträge:

Kommentare (4)

  1. Problem: Verbindung kann nicht hergestellt werden
    Lösung: Auf dem Pi /etc/tinc/hosts/home nicht
    Subnet = 10.0.0.1/32
    sondern
    Subnet = 10.0.0.2/32

    Großartiger Artikel sonst, danke dafür

  2. Hallo,

    Ich habe mir mehrere Anleitungen z.B. mit StragSwan angeschaut aber Tinc ist genau für diesen Zweck optimal und einfach einzurichten.

    Den ersten Schritt solltest du ändern auf 1.Öffne /etc/tinc/tinc.conf mit einem Texteditor

    Läuft bei mit auf Buster und RapberryOS auch nach einem Neustart ohne dazu tun.

Schreibe einen Kommentar

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