Verschlüsseltes IPv6 VPN mit Yggdrasil

Du brauchst für Deine Freunde oder Deine Firma ein von Rechner zu Rechner verschlüsseltes Netzwerk mit fester IP-Adresse für alle Rechner in diesem Netzwerk, egal, wie oft Dein Provider Deinem Router eine neue IP-Adresse gibt? Ich zeige Dir, wie Du das ganz einfach auf die Beine stellen kannst.

Yggdrasil VPN

Yggdrasil ist eine in der Programmiersprache Go entwickelte Netzwerk-Software, die folgende tolle Eigenschaften aufweist:

  • Einfach zu installieren mit nur ein paar anzupassenden Parametern
  • Läuft auf Linux, Mac, Windows und noch vielen anderen Betriebssystemen
  • Alle Datenübertragungen sind ende-zu-ende-verschlüsselt
  • Verbindet alle Rechner automatisch miteinander
  • Funktioniert auch durch Deinen Router ohne extra Konfiguration
  • Sucht immer den kürzesten Netzwerk-Weg von Rechner zu Rechner
  • Neue Rechner können automatisch teilnehmen, wenn gewünscht
  • Du hast endlich eine feste IP-Adresse, die auch bleibt, egal, wo Du bist
  • Deine IP-Adresse hängt an Deinem geheimen Schlüssel, den nur Du kennst

Installation

Ich selber benutze Arch-Linux bzw. Manjaro, was sehr ähnlich ist. So wird die Software auf den verschiedenen Plattformen installiert: Manjaro-Linux und Arch-Linux

Bei Manjaro kannst Du die Software grafisch über den Paket-Manager auswählen, bei Arch oder auf Servern ohne Grafik geht es so:

git clone https://aur.archlinux.org/yggdrasil.git
cd yggdrasil
makepkg -sir

Jetzt müssen wir aus diesem Verzeichnis heraus noch die Einbindung in den Systemstart bzw. systemd reinkopieren. Diese Datei legt fest, wie die Software gestartet und gestoppt wird (die Version muss später ggf. angepasst werden):

sudo cp src/yggdrasil-go-0.3.5/contrib/systemd/yggdrasil.service /etc/systemd/system/

Debian, Ubuntu, Raspian und ähnliche

Auf einigen Plattformen muss ggf. vorab noch dirmngr und der mit HTTPS abgesicherte Transportweg für neue Software installiert werden:

sudo apt-get install dirmngr
sudo apt-get install apt-transport-https

Dann müssen die Schlüssel vom Projekt geholt werden, damit Du auch weißt, dass Du Dir nicht eine kompromittierte Software an Bord holst, sondern wirklich das Original:

echo 'deb http://neilalexander.s3.eu-west-2.amazonaws.com/deb/ debian yggdrasil' | sudo tee /etc/apt/sources.list.d/yggdrasil.list
sudo apt-get update

Nun können wir die Software installieren. Übrigens: Dieses ganze händische Hinzufügen von Schlüsseln und Repositories hat mich bewogen, zu Manjaro zu wechseln, da ist das alle viel einfacher. Jetzt aber:

sudo apt-get install yggdrasil

Die Software ist jetzt installiert und es sollte auch eine Basis-Konfiguration in /etc/yggdrasil.conf angelegt sein, die wir später verändern werden.

Windows und Mac

Für die Installation auf den komerziellen Plattformen schaut bitte in die Original-Dokumentation. Ich selbst kann das nicht testen, da ich keine Rechner besitze, die diese Betriebssysteme haben.

Im Folgenden beziehe ich mich auf Linux als Plattform.

Konfiguration

Man kann Yggdrasil auf zwei verschiedene Arten betreiben: Entweder man wird teil eines großen weltweiten verschlüsselten Overlay-Netzwerkes oder man gibt explizit an, mit welchen eigenen Knoten man sich verbinden will.

Overlay-Konfiguration

So bist Du teil eines großen Netzwerkes und bist mit anderen, die Du nicht kennst, in einem Netz. Sowas kann sinnvoll sein, wenn Du im Prinzip weltweit und für jeden erreichbar sein willst, zum Beispiel für Soziale Netzwerke, die aber den sicheren Übertragungsweg von Yggdrasil nutzen sollen. Ein gutes Beispiel wäre hier Patchwork, der Client vom Netzwerk Scuttlebutt:

yggdrasil --autoconf

Friends-to-Friends-Konfiguration

So erzeugst Du eine Konfiguration für einen geschlossenen und erweiterbaren Benutzerkreis:

yggdrasil -genconf -json > /etc/yggdrasil.conf

Dies ist jetzt eine schlanke Basiskonfiguration, die wir an einigen Stellen anpassen können.

Als erstes benötigen wir irgendeinen Rechner, der eine feste IP-Adresse oder per DynDNS wenigstens einen festen Namen im großen weiten Internet hat. Denn wir müssen uns ja irgendwie finden. Und wenn niemand Niemandens Adresse kennt, dann werden wir uns nicht finden. Diesen Rechner tragen wir wie folgt mit IP-Adresse (oder Namen) und Port (hier beispielsweise 8123) bei den Peers ein, das sind sozusagen unsere Partnerrechner:

"Peers": ["tcp://188.68.55.245:8123", "tcp://beispielrechner.de:8123"],

Der Port kann bei jedem Rechner anders sein. Übrigens könnt Ihr auch Eure Rechner zuhause da mit ran-flanschen, sie müssen nur in Eurem Netzwerk zuhause auch mit einer festen IP-Adresse oder einem Namen erreichbar sein. Und mindestens einer Eurer Rechner muss nach draußen verbinden (wenn das gewünscht ist).

Damit sind wir erstmal fertig. Wenn wir verhindern wollen, dass jeder beliebige andere Rechner sich mit unserem verbinden kann, dann müssen wir noch die öffentlichen Schlüssel (Public Keys) von unseren Partnern eintragen:

"AllowedEncryptionPublicKeys": [
  "84b354ab1821a3fd0d24c6094fe586184d58527c1f45776bee4306049fae1046",
  "9fae10460d24c6094fe586184d58527c1f45776bee4306041821a3fd1821a3fd",
  "21a3fd0d24c6094fe586184d58527c1f45776bee4306049fae104684b354ab18"
],

Und unseren eigenen öffentlichen Schlüssel müssen wir umgekehrt auch unseren Freunden geben:

"EncryptionPublicKey": "8db2723c44398251803d94d4db7f5736bfae2b963cc113d620152729206c2b97",

Start und volle Kraft voraus

Wir starten jetzt unser verschlüsseltes Netzwerk und schauen, ob es ohne Fehler funktioniert:

systemctl start yggdrasil

Wenn wir, wie oben beschrieben, die Datei yggdrasil.service richtig in den Ordner vom systemd kopiert haben, sollte das Netzwerk jetzt hochkommen. Das sollten wir zuerst auf dem zentralen Rechnerknoten im Internet machen. Aber selbst, wenn wir zunächst alleine sind, bekommen wir jetzt schon ein neues Netzwerk un eine dazugehörige IPv6-Adresse:

ip -br a

lo               UNKNOWN        ::1/128 
wlp7s0           UP             fe80::21b:fde7:f07a:7559/64 
tun0             UNKNOWN        201:7625:8b9b:aa26:d830:c459:fa5e:dc7/7 fe80::7b82:2761:71fa:8fd4/64 

Die letzte Adresse mit den tun0 ist es. Sieht komisch aus, weil es eine Adresse nach dem neuen IPv6-Standard ist, aber alles gut! Ist da nichts zu sehen, liegt es ggf. daran, dass wir uns verschrieben haben oder einen anderen Fehler begangen haben. Dies können wir jetzt mit den journalctl Kommando vom systemd angucken:

journalctl -u yggdrasil

Das Ergebnis, was man ggf. noch nach untern scrollen muss, sieht dann optimalerweise so aus:

Mär 24 17:53:04 acer systemd[1]: Starting yggdrasil...
Mär 24 17:53:04 acer systemd[1]: Started yggdrasil.
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Build name: yggdrasil
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Build version: 0.3.5
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Starting up...
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Found 2 multicast interface(s)
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Starting switch
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Starting router
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Multicast discovery is enabled
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 UNIX admin socket listening on /var/run/yggdrasil.sock
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Interface name: tun0
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Interface IPv6: 201:7625:8b9b:aa26:d830:c459:fa5e:dc7/7
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Interface MTU: 65535
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Startup complete
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Your IPv6 address is 201:7625:8b9b:aa26:d830:c459:fa5e:dc7
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Your IPv6 subnet is 301:7625:8b9b:aa26::/64
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Listening for TCP on: [fe80::21b:fde7:f07a:7559%wlp7s0]:40633
Mär 24 17:53:04 acer yggdrasil[16545]: 2019/03/24 17:53:04 Connected TCP: 201:1749:a708:d684:e86e:9514:252b:1ee9@188.68.55.245, source >
Mär 24 18:06:08 acer yggdrasil[16545]: 2019/03/24 18:06:08 Disconnected TCP: 201:1749:a708:d684:e86e:9514:252b:1ee9@188.68.55.245, sour>
Mär 24 18:06:17 acer yggdrasil[16545]: 2019/03/24 18:06:17 Connected TCP: 201:1749:a708:d684:e86e:9514:252b:1ee9@188.68.55.245, source >
Mär 24 18:06:41 acer yggdrasil[16545]: 2019/03/24 18:06:41 Disconnected TCP: 201:1749:a708:d684:e86e:9514:252b:1ee9@188.68.55.245, sour>
Mär 24 18:07:18 acer yggdrasil[16545]: 2019/03/24 18:07:18 Connected TCP: 201:1749:a708:d684:e86e:9514:252b:1ee9@188.68.55.245, source >

Da wir unser eigenes Netzwerk haben, gibt es darin bisher keinen DNS-Server, der Namen in IP-Adressen übersetzt und umgekehrt. Eine einfache Lösung ist, dass wir uns für diese festen IP-Adressen einträge in unsere Datei /etc/hosts machen, damit wir nicht überall diese elend langen Adressen schreiben müssen:

201:7625:8b9b:aa26:d830:c459:fa5e:dc7  meinrechner
201:7625:8b9b:aa26:d830:c459:fa5e:dc7  freund1
201:7625:8b9b:aa26:d830:c459:fa5e:dc7  freund2

Danach können wir mit dem Kommando ping und dem Namen sehen, ob es funktioniert:

ping freund1

Fazit

Es war hier jetzt ein bisschen Geschreibe, weil ich die einzelnen Schritte auch erklärt habe, aber im Prinzip sind es nur ganz wenige Dinge, die Du tun musst.

Der große Vorteil ist nun, dass Du und Deine Freunde ab jetzt feste IP-Adressen in diesem Netzwerk habt. Ihr könnt also eigene Webserver, Spieleserver, Chatserver und so weiter installieren und über dieses Netzwerk benutzen. Alles verschlüsselt. Selbst, wenn Deine Daten über andere Rechner geleitet werden, können diese nicht lesen, was es für Daten sind, da über Eure Schlüssel die Daten über den ganzen Übertragungsweg verschlüsselt sind. Alleine das ist schon ein Grund, ein solches verschlüsseltes Netzwerk zu benutzen.

Die Software ist noch recht neu und unbekannt, auf der Projektseite ist allerdings zu lesen, dass ein produktiver Betrieb schon möglich ist. Dort bekommt Ihr auch weitere Informationen auf Englisch. Ich habe diese Anleitung für Euch geschrieben, weil ich keine Anleitung gefunden habe, die eine Installation wirklich von oben bis unten beschreibt.

So, jetzt viel Spaß mit Eurem neuen Netzwerk. Euer Herr Döring. :-)