Heiko Zimmermann
SAP-Berater, System Engineer und Entwickler.

Weblog

23. Februar 2019, 10:38

Ich habe bei edis.at seit 2013 einen kleinen Raspberry Pi Model B Rev 2 als VPN-Server.

Bisher läuft OpenVPN darauf. Allerdings, durch die schwache Hardware, wenig performant. Da liegt es nahe, dass ich mir WireGuard als Alternative ansehe. Da WireGuard als Linux-Kernelmodul läuft gibt es unter Linux einen Performance-Schub. Das gilt entsprechend nicht für wireguard-go Implementierungen. Diese soll man unter Linux auch dringend vermeiden.

Ich habe einmal für meine Geräte etwas verglichen. Mein MacOS zu OpenBSD (beide wireguard-go) ist mit WireGuard langsamer, als mit OpenVPN (AES-NI mit nur AES-128-CBC). Mein Pine64 mit Ambian (Kernelmodul) zu OpenBSD (wireguard-go) ist schneller mit WireGuard, als mit OpenVPN. Mein iOS (APP, kein Kernelmodul) zu OpenBSD (wireguard-go) ist mit OpenVPN (AES-NI) schneller, als mit WireGuard. Dafür gewinnt WireGuard beim Verbindungsaufbau um Längen und kann problemlos VPN-On-Demand. Es lohnt sich selbst zu testen.

Der übliche Weg am Raspberry Pi ist: "deb http://deb.debian.org/debian/ unstable main" einzubinden und WireGuard normal zu installieren.

Leider macht mir da Debian einen Strich durch die Rechnung. Denn bei wg bekomme ich "segmentation fault". Die Ursache ist, dass mein kleiner Pi nur eine "ARMv6"-CPU besitzt und Debian Binär-Pakete für "ARMv7a" liefert.

Zur Lösung kompiliere ich WireGuard aus der Source selbst:

sudo apt install libmnl-dev build-essential git raspberrypi-kernel-headers qrencode
git clone https://git.zx2c4.com/WireGuard
cd WireGuard/src
make
sudo make install
sudo modinfo wireguard
sudo modprobe wireguard

Danach konnte ich WireGuard wie gewohnt benutzen

Nun zum Ergebnis. Mit OpenVPN vom Pine64 (Armbian) zum Raspberry Pi Model B Rev 2 (Raspbian) erreichte ich im Durchschnitt 8500 kbit/s. Mit WireGurad erreichte ich im Durchschnitt 21000 kbit/s. Ich bin beeindruckt.

Abschließend sei noch ausdrücklich erwähnt, dass WireGuard zwar vielversprechend ist, sich dennoch in der Entwicklung befindet und experimentell ist. Hierzu einige Überlegungen vom VPN-Anbieter Perfect-Privacy.

PS: qrencode ist nicht nowendig, nur angenehmer, um die Konfiguration in der iPhone-App einzulesen:
qrencode -t ansiutf8 < mobile.conf

Nach einem Kernel-Update muss Wireguard neu gebaut werden.

Update:
"Warning: modules_install: missing 'System.map' file. Skipping depmod." kann ignoriert werden.

Update 10.10.19:
Mit dem Kernel 4.19.75+ kam folgender Fehler:  DKMS error: "/bin/sh: 1: scripts/basic/fixdep: Exec format error"
Das konnte ich so lösen.

Matthias Michel
4 Juli 2019, 10:26
Womit hast du den Speedtest gemacht?
Heiko Zimmermann
4 Juli 2019, 11:08
Je drei Durchläufe mit aria2c eines 1 GB file.tar.gz über den Tunnel.
Matthias Michel
5 Juli 2019, 09:14
Das Resultat häng vermutlich (Client als auch Server Seite) stark von deiner Bandbreite ab.
Heiko Zimmermann
5 Juli 2019, 10:20
Ja. Deshalb drei nahezu identische Durchläufe, über die selbe Leitung (100 MBit VDSL). Das ist rund das 4-fache von dem, was der o.a. RPI B effektiv über sein Ethernet/USB Bottleneck leisten kann.

Dabei ging es nicht um einen verbindliches Benchmarking unter Labor-Bedingungen, sondern um das Verhältnis WireGuard zu OpenVPN mit AES im o.a. Szenario. Und hier unter Linux gewinnt WireGuard mit Faktor ~2,5 .

Unter OpenBSD auf Hardware mit AES-NI beispielsweise, oder einem MacBOOK Pro, gewinnt OpenVPN, denn da läuft WireGuard nicht als Kernel-Modul. Übrigens auch auf meinem iOS Gerät, das dafür AES-NI kann.

Es gibt offensichtlich bei der reinen Abwägung nach Geschwindigkeit zwei starke Faktoren, die hier zum Tragen kommen: v.a. Kernel Modul, oder nicht. Und AES-NI oder nicht (für OpenVPN).

Mit meinem WireGuard Tunnel vom PINE64 (Zuhause, Armbian) zu meinem SOCKS5-Proxy (OpenBSD, Wireguard-go) im Rechenzentrum am DE-CIX und von dort weiter zu einem VPN-Anbieter und einem Speedtest auf wieistmeineip.de/speedtest erreichte ich jetzt gerade im Download: 104670 KBit/s im Download und 37794 KBit/s im Upload. Und das entspricht im Grunde meiner maximal möglichen Bandbreite mit VDSL100. Mit OpenVPN kam ich früher auf 50% davon, auf dem selben System.

Ausprobieren lohnt sich auf jeden Fall. Und für mich ist WireGuard eine Bereicherung.