Wireguard Installation und Konfiguration

Die Frage, wozu man ein VPN benötigt ist einfach zu beantworten, er bietet die Möglichkeit die eigenen Infrastruktur auch unterwegs sinnvoll zu nutzen. Konkrete Beispiele:

PiVPN hat vor einiger Zeit als Standard von OpenVPN zu Wireguard gewechselt. Die wesentlich bessere Performance von Wireguard hat diesen Schritt begründet. Ich beschreibe hier kurz, wie Wireguard installiert und für den Hausgebrauch konfiguriert wird.
Als Server dient uns ein Raspberry Pi 4 mit Raspberry Pi OS. Ich gehe im folgenden davon aus, das die Aktionen mit den User root durchgeführt werden, das erspart mir die Mühe vor jedem Command „sudo“ zu schreiben.
Raspberry Pi OS liefert einen Kernel mit, der mit Wireguard kompatibel ist. Ein Kernel älter als 5.6 wird ausdrücklich nicht empfohlen. Ach, welchen Kernel habe ich denn?

uname -a | cut -d" " -f3

liefert die gewünschte Information

Installation

apt install wireguard

Ja, das war es auch schon :-) Wireguard ist nun installiert und kann benutzt werden. Die Konfiguration findet im Verzeichnis /etc/wireguard statt und besteht aus einer einzigen Datei mit der Endung .conf (z.B. wg0.conf)

Konfiguration

Sowohl Client als auch Server benötigen eine Konfigurationsdatei.
Server und Client authentifizieren sich gegenseitig mittels eines private/puclic Key Paares. Diese Keys können wie auf der Wireguard Webseite beschrieben erzeugt werden. Hier kurze Beispiele, in denen der Server immer die erste IP Adress hat und die Clients beginnend mit „2“ durchnummeriert werden
Server Konfiguration, dieser stellt zu einen eine Verbindung in unser Heimnetz (in diesem Fall 192.168.178.0/24) und ins Internet zur Verfügung

/etc/wireguard/zuhause.conf:
[Interface]
# Server zuhause
Address = 10.8.10.1/24
SaveConfig = false
ListenPort = 51196
PrivateKey = <Private Key des Servers>
[Peer]
# Client cli2_zuhause
PublicKey = <Public key des Client 2>
AllowedIPs = 10.8.10.2/32
[Peer]
# Client cli3_zuhause
PublicKey = <Public key des Client 3>
AllowedIPs = 10.8.10.3/32

Client 2 Konfiguration, dieser Client nutzt den VPN nur zum Zugriff auf das heimische Netzwerk:

[Interface]
# Client cli2_zuhause
PrivateKey = <Private Key des Client 2>
Address = 10.8.10.2/24
# DNS = 9.9.9.9
[Peer]
# Server zuhause
PublicKey = <Public Key des Servers>
AllowedIPs = 10.8.10.0/24,192.168.178.0/24
Endpoint = dein.dyndns.de:51196
PersistentKeepalive = 30

Client 3 Konfiguration, dieser Client nutzt den VPN für sämtlichen Netzwerk Traffic:

[Interface]
# Client cli3_zuhause
PrivateKey = <Private Key des Client 3>
Address = 10.8.10.3/24
DNS = 9.9.9.9
[Peer]
# Server zuhause
PublicKey = <Public Key des Servers>
AllowedIPs = 10.8.10.0/24,192.168.178.0/24,0.0.0.0/0
Endpoint = dein.dyndns.de:51196
PersistentKeepalive = 30

Der Parameter „Endpoint =“ in der Client Konfiguration nennt den (Dyn)DNS Namen oder die öffentliche IP Adresse eures Routers.
Wenn sämtlicher Traffic (Client 3) über den VPN gejagt wird ist die Angabe eines DNS erforderlich. Dies kann euer Router (i.d.R. die erste IP in eurem lokalen Heimnetz, im Beispiel also 192.168.178.1) oder ein öffentlicher DNS wie 9.9.9.9 sein. Ohne DNS Eintrag funktioniert zwar der VPN, aber eine Namensauflösung findet nicht statt. Ein ping nach 9.9.9.9 wird also funktioneren, ein ping nach dns9.quad9.net aber nicht, denn der Name kann nicht aufgelöst werden.
Der Wireguard Server Prozess wird gestartet mit

systemctl start wg-quick@zuhause

Soll der Server im Rahmen des Raspberry Pi boot automatisch gestartet werden, geht dies so:

systemctl enable wg-quick@zuhause

„zuhause“ ist der erste Teil des Namens der /etc/wireguard/zuhause.conf Datei

Das geht auch einfacher

Wer keine Lust hat, sich die Konfigurationsdateien, die Keys etc selbst zu basteln, kann dies auch per Script auf den Raspberry Pi erledigen lassen. Ihr findet meine Lösung auf Gitlab.
Das Tool stellt ein Verzeichnis mit allen nötigen Dateien und ein paar Hilfsdateien, die das Leben erleichtern, zur Verfügung.

Viel Spass

Ein wenig Technik dazu?

Stolperfallen gibt es immer. Insbesondere das Routing ist im Rahmen eines VPN Einsatzes ein gerne falsch konfigurierter Stolperstein. Im Zweifel funktioniert keinerlei Internet Zugriff mehr. Hier ein paar Gedanken dazu: