Peer to Peer VPN Netzwerkzugriff ohne Konfiguration 4112

Inhalt

Eine Peer to Peer Verbindung bedeutet eine direkte Verbindung zweier Computer. Dies ist in einem Netzwerk nichts Besonderes. Befinden sich die beiden Rechner aber in unterschiedlichen Netzwerken und sind nur über das Internet miteinander verbunden, ist ein direkter Verbindungsaufbau nicht so einfach zu bewerkstelligen. Normalerweise läuft der Austausch über einen Server und nicht direkt von Computer zu Computer.

Einen direkten Zugriff über das Internet auf einen anderen Computer ist mit verschiedenen VPN (Virtual Private Network) Programmen möglich, doch setzen diese meist viele Einstellungen am Gerät und am Router/Firewall voraus, die ein normaler Nutzer nicht so einfach machen kann.

Eine einfache und gut umzusetzende Alternative, ohne Portfreigaben oder Änderungen an der Firewall ist die Nutzung von ZeroTier.

ZeroTier

Die wichtigsten Ziele bei der Entwicklung von ZeroTier waren:

1) Any device must be able, by way of a persistent address, to contact any other connected device in the world at any time. 

2) It must just work. It must be „zero configuration.“

http://adamierymenko.com/decentralization.html

ZeroTier ist eine leichtgewichtige Open Source Peer to Peer VPN Lösung, mit der man Computer direkt verbinden kann. Es kann für Spiele, Dateifreigaben oder den allgemeinen Zugriff auf Geräte hinter einem Router/Firewall verwendet werden.

Für den direkten Zugriff zweier Geräte in unterschiedlichen Netzen benötigt man auf beiden Geräten die ZeroTier One App, welche eine VPN Verbindung zum ZeroTier Vermittlungsserver, dem sogenannten Planet Server, aufbauen können.

Das Besondere an ZeroTier ist, dass der Code Open Source ist und im öffentlichen GitHub Repository zugänglich ist. Man kann also mit Hilfe eines SDKs (Software Development Kit) die Funktion von ZeroTier an seine eigene Software anpassen und auch eigene Vermittlungsserver erstellen, die unabhängig von ZeroTier laufen.


Damit Computer, die nicht im gleichen Netzwerk sind, untereinander eine Verbindung aufbauen können, benötigen diese, wie oben erwähnt, einen Vermittlungsserver, der die IP-Adressen der jeweiligen Geräte kennt und Anfragen dann zum passenden Gerät weiterleitet.

Die Geräte, hier ein Lehrerdienstgerät, welches Zuhause genutzt wird, und ein Speicher oder ein lokaler Webserver in der Schule, senden ihre IP-Adressen an den Vermittlungsserver. Da die Geräte sich hinter einem Router befinden, wird die öffentliche IP-Adresse des Routers übermittelt.

Der Vermittlungsserver speichert und aktualisiert diese Adressen in einer Tabelle und weist diese dem entsprechenden Gerät zu.

Direkte Peer to Peer Verbindung

Will nun das Lehrerdienstgerät auf den in der Schule laufenden Webserver zugreifen, fragt es den Vermittlungsserver nach der IP-Adresse des Webservers. Der Vermittlungsserver gibt nun die IP-Adresse der beiden Geräte weiter, damit diese untereinander eine UDP (User Datagram Protocol) – Verbindung aufbauen und direkt miteinander kommunizieren können.

Normalerweise, wenn keine Ports an den Firewalls der Netzwerke geöffnet sind, kann keine direkte Verbindung zweier Geräte unterschiedlicher Netze aufgebaut werden. Um dennoch die oben beschriebene Verbindung herzustellen, wird durch das sogenannte „Hole Punching“ (Löcher schlagen) versucht, jeweils einen offenen Port an beiden Firewalls zu nutzen, um die Verbindung aufzubauen.

Geräte können immer nach außen kommunizieren, wird diese Kommunikation mittels UDP aufgebaut, bleibt für eine gewisse Zeit ein Port in der Firewall offen. Dieser Port wird an den Vermittlungsserver gesendet und darüber dem anderen Gerät mitgeteilt. Dieses versucht dann über den durch UDP geöffneten Port mit dem Gerät zu kommunizieren und sendet gleichzeitig seinen geöffneten Port an den Vermittlungsserver.

Verbindung über den Vermittlungsserver

Sollte keine direkte Verbindung durch das „Hole Punching“ hergestellt werden können, bauen beide Geräte eine Verbindung zum Vermittlungsserver auf, über die dann die Kommunikation läuft.

Direkte Verbindung im gleichen Netz

Eine weitere wichtige Verbindungsmöglichkeit ist die direkte Verbindung der Geräte, wenn diese im gleichen Netz sind. Wenn zum Beispiel ein Lehrer mit seinem Dienstgerät im Lehrerzimmer sitzt und sich mit dem lokalen Webserver verbinden möchte, folgt die Anfrage wieder über den Vermittlungsserver.

Dieser gibt dem Lehrerdienstgerät doch die Information, dass die Zieladresse im gleichen Netzt ist und es wird eine direkte Verbindung im gleichen Netzwerk aufgebaut.

Beispiel: lokalen Webserver über das Internet erreichen

Zur Veranschaulichung der Funktionsweise von ZeroTier wollen wir einen lokalen Webserver auf einem RaspberryPi installieren, um dann vom Lehrerdienstgerät von überall darauf zugreifen zu können.

Hier die erforderlichen Schritte:

Webserver auf RaspberryPi installieren

Dazu installieren wir auf dem RaspberryPi den Apache Webserver mit folgendem Linuxbefehl:

sudo apt-get install apache2 -y

Daraufhin werden einigen Dateien auf dem RaspberryPi geladen und der Webserver wird gestartet. Alle Geräte, die im gleichen Netz wie der RaspberryPi sind, können über folgenden Link auf den Webserver zugreifen: http://raspberrypi

Wenn es funktioniert hat, wird die Standardwebseite des Apache Webservers angezeigt:

Den Inhalt der Webseite kann man im Verzeichnis: `var/www/html/` anpassen. Um diesen Ordner über FTP anzupassen, muss man dem Standardnutzer „pi“ die Rechte zum Bearbeiten des Ordners geben:

sudo chown -R pi:pi /var/www/html

Danach kann man zum Beispiel mit FileZilla auf den RaspberryPi zugreifen, zum Verzeichnis des Webservers `var/www/html/` wechseln und Änderungen vornehmen.

Veränderte Webseite auf dem Raspberry Pi

Diese Webseite, die auf dem RaspberryPi läuft, ist nur aus dem lokalen Netzwerk erreichbar und nicht von außerhalb. Dies wollen wir nun mit Hilfe von ZeroTier ändern.

ZeroTier Netzwerk erstellen

Wie oben aufgezeigt, kann man mit Hilfe von ZeroTier ein eigenes virtuelles Netzwerk erstellen und diesem Netzwerk Geräte hinzufügen, die dann privat miteinander kommunizieren können, obwohl sie nicht direkt miteinander verbunden sind.

Als Erstes gehen wir auf die ZeroTier Webseite und registrieren uns oder melden uns an. Danach kommt man auf die Startseite der ZeroTier Zentrale und kann ein Netzwerk erstellen:

Jedes neu erstellte Netzwerk bekommt eine eigene Netzwerk ID mit dieser sich dann die Geräte, die dem Netzwerk beitreten wollen, anmelden können:

Netzwerk mit der Netzwerk ID

RaspberryPi mit dem ZeroTier Netzwerk verbinden

Einem ZeroTier Netzwerk kann man mit Hilfe der ZeroTier One App beitreten. Diese App wird auf dem Gerät immer ausgeführt und ermöglicht die Verbindung zum Netzwerk.

Auf dem RaspberryPi installiert man die App mit folgendem Befehl:

curl -s https://install.zerotier.com | sudo bash

Nach der Installation muss man den RaspberryPi noch mit Hilfe der Netzwerk ID mit dem oben erstellten Netzwerk verbinden. Dazu gibt man im Terminal diesen Befehl ein:

sudo zerotier-cli join 8286ac0e47485b12

Geräte über die ZeroTier Zentrale zulassen

Die Netzwerk ID reicht alleine noch nicht aus sich mit einem Netzwerk zu verbinden. Die Geräte müssen danach erst vom Besitzer des ZeroTier Netzwerkes zugelassen werden. Dazu meldet man sich bei ZeroTier an und öffnet das gewünschte Netzwerk.

Im unteren Bereich müsste die Meldung erscheinen, dass sich ein Gerät am Netzwerk angemeldet hat. Will man dieses Gerät zulassen, klickt man auf die Checkbox (2). Daraufhin bekommt das Gerät eine eigene IP im erstellten Netzwerk (3).

Zweites Gerät mit dem ZeroTier Netzwerk verbinden

Damit wir die Funktionsweise testen können. Installiere ich auf meinem Smartphone die ZeroTier App über den jeweiligen App-Store:

Natürlich kann man die App auch für Windows, Max oder andere Betriebssysteme herunterladen. Nach der Installation muss man die Netzwerk ID des ZeroTier Netzwerkes in der App eintragen und auf „verbinden“ drücken.

Nun kann man wieder über die ZeroTier Zentrale, das iPhone im Netzwerk zulassen:

Zugelassene Geräte mit IP Adresse

Jetzt sollten beide Geräte im gleichen ZeroTier Netzwerk sein. Der auf dem RaspberryPi laufende Webserver sollte nun auch von außerhalb erreichbar sein.

Verbindung von außerhalb des Netzwerkes zum Webserver herstellen

Für den Test trenne ich auf meinem iPhone das WLAN, damit ich über die mobilen Daten ins Internet gehe. Jetzt kann man über den Webbrowser den lokalen Webserver erreichen, wenn man die IP-Adresse des RaspberryPi eingibt, die ZeroTier dem Gerät zugewiesen hat.

In unserem Beispiel: 192.168.192.65

Daraufhin öffnet sich die Webseite:

Wie man sieht, bin ich nicht mehr im gleichen lokalen Netz wie der Raspberry Pi mit dem Webserver. Das Smartphone geht über die mobilen Daten zum ZeroTier Server und sucht dort nach der eingegebenen IP Adresse.

Domain anstatt IP-Adresse

Damit Nutzer nicht immer die von ZeroTier vergebene IP-Adresse des Webservers eingeben müssen, kann man diese IP-Adresse einfach mit einer eigenen Domäne verbinden.

Dazu habe ich eine neue Subdomain erstellt und dieser eine Weiterleitung auf die IP-Adresse des Webservers zugewiesen. Jetzt können Nutzer die Webseite des lokalen Webservers erreichen, indem sie im Browser

zero.unsere-schule.org

eingeben. Dies funktioniert aber nur, wenn der Nutzer mit dem oben erstellten ZeroTier Netzwerk verbunden ist.

ZeroTier Verbindungsart testen

Die meisten Verbindungen mit Hilfe von ZeroTier werden direkte Peer to Peer Verbindungen sein. Sollte ein Gerät so nicht erreichbar sein, kann die Verbindung über den Vermittlungsserver aufgebaut werden, was die Geschwindigkeit beeinträchtigen kann.

Zum Testen, ob man zu den Geräten in seinem ZeroTier Netzwerk eine direkte Peer to Peer Verbindung aufbauen kann, kann man folgenden Befehl in die Konsole eingeben:

zerotier-cli peers

Daraufhin werden alle möglichen Verbindungen der verfügbaren Geräte im Netzwerk angezeigt:

In der Spalte „<link>“ kann entweder DIRECT oder RELAY aufgelistet werden. DIRECT bedeutet, dass eine Peer to Peer Verbindung zum Gerät aufgebaut werden kann. RELAY bedeutet, dass nur eine Verbindung über den Vermittlungsserver möglich ist.

Die Geräte mit der „Rolle“ PLANET sind die Vermittlungsserver. Geräte mit der „Rolle“ LEAF sind Geräte im eigenen ZeroTier Netzwerk, wobei auch der Controller (ZeroTier Zentrale) aufgelistet wird. Im hier aufgeführten Beispiel ist der erste LEAF mein Raspberry PI mit Webserver, der letzte LEAF mein iPhone und der LEAF in der Mitte der Controller.

Fazit

Mit Hilfe von ZeroTier kann man sehr einfach lokale Geräte auch außerhalb des eigenen Netzwerkes zugänglich machen. Speziell in Schulen, in denen man die Firewall- oder Routereinstellungen nicht anpassen kann und dennoch Zugriff, zum Beispiel auf einen schulinternen Speicher oder die lokal laufende Vertretungsplanwebseite haben möchte, ist das hier beschriebene Vorgehen sehr leicht umzusetzen.