adminForge

free | no tracking | no logging | no advertising

Das ist unser Motto. Mit adminForge bieten wir kostenlose Dienste an. Unser Ziel ist es, eine freie und datensparsame Alternative zu bekannten Diensten bereitzustellen. Seit 2014 betreiben wir adminForge gemeinsam mit Spaß an der Technik und an Open-Source.

PeerVPN – Ein Mesh VPN Netzwerk aufbauen

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 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.

[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
...