Beim stöbern im Netz bin ich dank Thomas Leister auf dieses spannende und sehr unkomplizierte VPN Tool gestoßen – PeerVPN. Sobald ihr mehr als nur einen physischen oder virtuellen Server zu verwalten habt hilft PeerVPN ein privates dezentrales vermaschtes Peer-to-Peer Netzwerk aufzubauen.
PeerVPN bietet dir folgende Features:
- Ethernet tunneling support using TAP devices
- IPv6 support
- Full mesh network topology
- Shared key encryption and authentication support
Punkt 1: Installation unter Debian
Da es noch kein Repository gibt benötigen wir zuerst folgende Pakete.
1 |
apt update && apt install git build-essential |
Punkt 2: Quellcode herunterladen
Wir wechseln in einen beliebigen Ordner, oder bleiben in /root/.
1 |
git clone https://github.com/peervpn/peervpn/ |
Punkt 3: Kompilieren
Wer OpenSSL verwenden möchte benötigt nur das Paket libssl-dev
.
1 |
apt install libssl-dev |
Anschließen wechseln wir den Ordner und kompilieren.
1 2 |
cd peervpn/ make -j4 |
Bevorzugte Alternative: Die Empfehlung des Herstellers ist LibreSSL, diese Library habe ich ebenfalls verwendet und dazu folgendes Script genutzt (Danke Thomas Leister).
Wechsel den Ordner und erstelle das Script.
1 2 |
cd peervpn/ vim build.sh |
Holt euch von der Webseite https://www.libressl.org/ die aktuelle Versionsnummer und tragt sie unter libressl_version=
ein.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#!/bin/sh libressl_version=libressl-2.5.5 libressl_archive=${libressl_version}.tar.gz if [ -f ${libressl_archive} ] then : else wget -O ${libressl_archive} https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${libressl_archive} fi if [ -f ${libressl_archive} ] then : else echo wget failed. return -1 fi libressl_lib=${libressl_version}/crypto/.libs/libcrypto.a if [ -f $libressl_lib ] then : else tar -xzf ${libressl_archive} cd ${libressl_version} && ./configure && make && cd .. fi cc -O2 -I${libressl_version}/include peervpn.c -o peervpn ${libressl_version}/crypto/.libs/libcrypto.a && echo success! |
Das Script führen wir aus, dieses erstellt eine statisch gelinkte Version von PeerVPN mit LibreSSL.
Punkt 4: Kopieren der Binary
Die soeben erstelle Binary kopieren wir auf dem lokalen Server um.
1 |
cp peervpn /usr/local/bin |
Ebenso kann diese Binary auf die anderen Server kopiert werden.
1 |
scp peervpn server2:/usr/local/bin |
Punkt 5: Konfiguration
Wir erstellen uns einen Konfigurations Ordner sowie Datei.
1 2 |
mkdir /etc/peervpn touch /etc/peervpn/peervpn.conf |
Beispiel Konfiguration:
1 2 3 4 5 6 7 |
networkname ExampleNet psk mysecretpassword enabletunneling yes interface peervpn0 ifconfig4 10.1.2.3/24 port 7000 initpeers server1.example.org 7000 server2.example.org 7000 |
Erläuterung (Details im Github):
- networkname – Ein frei wählbarer Name. Auf allen Servern identisch.
- psk – Ein Shared Key. Kann mittels
openssl rand -base64 32
generiert werden. Auf allen Servern identisch. - enabletunneling – Ermöglicht Ethernet Tunneling per TAP Device.
- interface – Der Interface Name.
- ifconfig4- Die IPv4 Adresse für den Server. Beispiel Server1: 10.1.2.3, Server2: 10.1.2.4 etc.
- port – Der verwendete Port.
- initpeers – Server die im gesamten PeerVPN sich erreichen sollen. Domainname + Port. Getrennt mit Leerzeichen. Auf allen Servern am besten identisch.
Punkt 6: Systemd Service Unit
Auf jedem Server legen wir eine Systemd Service Unit an.
1 2 3 4 5 6 7 8 9 10 11 12 |
[Unit] Description=PeerVPN Server (%i) After=syslog.target network.target ConditionPathExists=/etc/peervpn/%i.conf [Service] Type=simple ExecStart=/usr/local/bin/peervpn /etc/peervpn/%i.conf Restart=on-failure [Install] WantedBy=multi-user.target |
Aktivieren und starten den PeerVPN Dienst.
1 2 |
systemctl enable peervpn@peervpn.service systemctl start peervpn@peervpn.service |
Punk 7: Test
Jetzt sollte der Dienst laufen.
1 |
systemctl status peervpn@peervpn.service |
Auch die Server sollten über die in der Konfiguration angegeben IP-Adressen erreichbar sein.
1 2 3 |
ping 10.1.2.3 ping 10.1.2.4 ... |
2