Dieser Artikel stammt aus einem früheren, persönlichen Blog und ist nicht Teil des Leistungsangebots der blaumedia GmbH. Er wird hier aus archivarischen Gründen bereitgestellt.

Du möchtest deinen Raspberry Pi über einen VPN mit deinem Server verbinden und so über das Internet erreichen können? Beim experimentieren mit Kubernetes kam ich auf die Idee meinen Raspberry Pi in das Cluster einzubinden. Ein normales Port-Forwarding mit DynDNS oder SSH-Tunneln kommt nicht in Frage: Kubernetes benötigt u.A. eine Port Range von 30.000 – 32.767 und viele weitere Ports. Da hilft nur eines: den Raspberry Pi per VPN mit meinem Server verbinden. Ich habe mich für Tinc entschieden.

Wie funktioniert das Ganze?

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 ein virtuelles Netzwerk auf, sodass Raspberry Pi und Server sich im gleichen Netzwerk befinden.

VPN Tunnel Netzwerkdiagramm

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

sudo apt-get install -y tinc

Tinc Konfiguration auf dem Server anlegen

/etc/tinc/tinc.conf mit Name = server, AddressFamily = ipv4, Interface = tun0 anlegen. Start/Stop-Skripte erstellen mit ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0. Schlüssel generieren mit tincd -c . -K. /etc/tinc/hosts/server mit IP-Adresse und Subnet = 10.0.0.1/32 erweitern.

Konfiguration auf dem Raspberry Pi zu Hause anlegen

/etc/tinc/tinc.conf mit Name = home, AddressFamily = ipv4, Interface = tun0, ConnectTo = server. Start/Stop-Skripte mit ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0. Schlüssel generieren. /etc/tinc/hosts/home mit Subnet = 10.0.0.2/32.

Server und Home miteinander bekannt machen

Die Datei /etc/tinc/hosts/home vom Pi auf den Server kopieren. Die Datei /etc/tinc/hosts/server vom Server auf den Pi kopieren. Auf beiden Geräten mit tincd Tinc starten.

Service auf dem Raspberry Pi im Heimnetz aus dem Internet erreichen

Mit Nginx per Virtual-host auf einen Port auf dem Pi zugreifen:

server {
    server_name pi.example.com;
    location / {
      proxy_pass http://10.0.0.2:9000;
    }
}

Tinc VPN beim Neustart mitstarten

Systemd Service /etc/systemd/system/mytinc.service anlegen und mit systemctl enable mytinc.service aktivieren.

Fazit

Keine nervigen Portfreigaben mehr in der FritzBox oder SSH-Tunnel die immer wieder neu konfiguriert werden müssen.