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.
apt update && apt install git build-essential
Punkt 2: Quellcode herunterladen
Wir wechseln in einen beliebigen Ordner, oder bleiben in /root/.
git clone https://github.com/peervpn/peervpn/
Punkt 3: Kompilieren
Wer OpenSSL verwenden möchte benötigt nur das Paket libssl-dev.
apt install libssl-dev
Anschließen wechseln wir den Ordner und kompilieren.
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.
cd peervpn/
vim build.sh
Holt euch von der Webseite https://www.libressl.org/ die aktuelle Versionsnummer und tragt sie unter libressl_version= ein.
#!/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.
cp peervpn /usr/local/bin
Ebenso kann diese Binary auf die anderen Server kopiert werden.
scp peervpn server2:/usr/local/bin
Punkt 5: Konfiguration
Wir erstellen uns einen Konfigurations Ordner sowie Datei.
mkdir /etc/peervpn
touch /etc/peervpn/peervpn.conf
Beispiel Konfiguration:
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 32generiert 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.
[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.
systemctl enable peervpn@peervpn.service
systemctl start peervpn@peervpn.service
Punk 7: Test
Jetzt sollte der Dienst laufen.
systemctl status peervpn@peervpn.service
Auch die Server sollten über die in der Konfiguration angegeben IP-Adressen erreichbar sein.
ping 10.1.2.3
ping 10.1.2.4
...