Benutzer-Werkzeuge

Webseiten-Werkzeuge


howtos:wireguard
Übersetzungen dieser Seite:

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:

  • Sicheres Nutzen des Internets auch in öffentlichen HotSpots
  • Zugriff auf die heimische Netzwerkfestplatte

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.

  • Private und Public Keys für Server und Clients
  • Für jeden Client einen QR Code, der mit der Wireguard App auf dem Client einfach gescannt werden kann
  • Eine .csv Datei, die es erleichtert sich zu merken (und zu verwalten) welcher Person man für welches Geräte einen Client zur Verfügung stellt.

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:

  • Der Server stellt für die Clients zum Einen den Zugriff auf das Heimnetz und zum Anderen aufs Internet zur Verfügung. „AllowedIPs“ wird auf dem Server nur benötigt, um die Clients auseinander zu halten. Wer hier rumfummelt, was durchaus Sinn machen kann falls ein Client Zugriff auf ein weiteres privates Netz hat, ohne zu wissen, was er tut verliert mit hoher Wahrscheinlichkeit den Netzwerk Zugriff auf seinen Raspberry Pi.
  • Route ist nicht gleich Route. Routen werden normalerweise mit einem Ziel und einem Gateway konfiguriert, Dabei ist das Gateway die IP Adresse eines einzelnen Routers, während das Ziel ein einzelner Rechner oder ein Netzwerk sein kann. Eine andere Art des Routings findet ohne spezifisches Gateway statt und überlässt das Auffinden eines passenden Routers Anderen. Diese Interface Routen werden von der Wireguard Software unterstützt da Wireguard die Netzverbindungen aller Clients kennt.
  • Wireguard unterstützt im Gegensatz nur das UPD Protokoll, TCP kann nicht verwendet werden. Ein „Verstecken“ des VPN hinter Port „443“, wie bei OpenVPN, ist nicht möglich.
howtos/wireguard.txt · Zuletzt geändert: 2022/02/18 08:09 von 127.0.0.1