Privacy Handbuch

WireGuard ist ein Peer-2-Peer VPN, das durchgehend moderne Kryptografie für Verschlüsselung und Authentifizierung verwendet. Im Unterschied zu OpenVPN und IPsec werden Client-Server Architekturen nicht direkt unter­stützt, können aber auch (irgendwie) realisiert werden.

Installation von Wireguard

Die Wireguard Software kan man mit der bevorzugten Paketverwaltung installieren:

Ubuntu: > sudo apt install wireguard
Fedora: > sudo dnf install wireguard-tools

WireGuard Client für das private Heimnetz

Wenn man die Fritz!Box oder Speedport Router der Telekom als VPN Endpunkt nutzt, erhält man bei der Konfiguration der Nutzer im Router eine Wireguard Konfigurationsdatei für jeden Nutzer.

Man könnte darüber nachdenken, ob man diese VPN Verbindung nur für den Zugriff auf Ressourcen im heimischen Netzwerk nutzen möchte (Roadwarrior Szenario) oder den gesamten Datenverkehr über den heimischen Router ins Internet schicken, um die Reisetätigkeiten zu verbergen. Die vom Router generierte Konfigurationsdatei kann man dafür wie folgt anpassen.

Die vorbereitete Konfigurationsdatei kann man dann im Networkmanager importieren:

> sudo nmcli con import type wireguard file <DATEI>

Die importierte WireGuard VPN Verbindung sofort automatisch aktiviert. Das kann man in der Konfiguration im NetworkManager nachträglich deaktivieren und außerdem könnte man der VPN Verbindung einen sinnvollen Namen geben:

Zukünftig kann man die WireGuard VPN Verbindung mit einem Klick im NetworkManager Applet aktivieren oder sie auch automatisch bei Verbindung mit einem bestimmten Netzwerk aktivieren.

WireGuard Server von VPN-Providern nutzen

Viele VPN-Provider haben individuelle Lösungen entwickelt, um WireGuard für ihre Kunden in eine Client-Server ähnliche Infrastruktur zu pressen und WireGuard VPN-Server anbieten zu können.

Einige VPN-Provider (z.B. ProtonVPN) bieten fertige Konfigurationen für WireGuard inklusive der Schlüssel zum Download an. Bei anderen VPN-Providern muss man seinen selbst erstellten öffentlichen Schlüssel auf der Webseite hochladen und sich den Schlüssel für den WireGuard Server sowie die zugeteilte IP-Adresse für den eigenen Peer und den DNS-Servers von der Webseite holen.

  1. Man erstellt sich eine kleine Konfigurationsdatei "wg0.conf" für die Verbindung zum WireGuard Server. Wenn man zwischen mehreren VPN Servern wechseln möchte, muss man für jeden WireGuard Server eine eigene Konfigurationsdatei "wgX" erstellen. Ein Beispiel:

    [Interface]
    PrivateKey = <privater Schlüssel>
    Address = <IP-Addr. für den eigenen Peer>/32
    DNS = <IP-Addr. vom DNS Server>

    [Peer]
    PublicKey = <öffentlicher Schlüssel des Servers>
    Endpoint = <IP-Addr. vom Server>:<Port>
    AllowedIPs = 0.0.0.0/0,::/0

    Mit dieser Beispielkonfiguration wird der gesamt Datenverkehr, der den Rechner verlässt, zum VPN Server geschickt. Mit der Aktivierung des VPNs hat man keinen Zugriff mehr auf Resourcen im lokalen Heimnetz (Netzwerkdrucker, Router, private Nextcloud o.ä.). Wenn man nur den Datenverkehr ins Internet via VPN Server routen möchte und gleichzeitig weiterhin Zugriff auf Ressourcen im heimischen Netz haben möchte, muss man folgenden Wert anpassen:

    AllowedIPs = ::/0, 1.0.0.0/8, 2.0.0.0/8, 3.0.0.0/8, 4.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 10.13.13.1/32
  2. Die Konfigurationsdatei(en) kann man mit einem Kommando im NetworkManager importieren:

    > sudo nmcli con import type wireguard file wg0.conf
  3. Danach kann man die Eigenschaften der VPN Verbindung etwas nachbearbeiten (s.o.)

WireGuard Server für ein kleines Firmmennetz oder privates Heimnetz

Wenn man den heimischen Router nicht als Wirguard Server verwenden möchte oder der Router dieses Feature nicht bietet, könnte man einen kleinen Linux Server als VPN Gateway aufsetzen.

Die Konfiguration beginnt mit dem Erzeugen der kryptografischen Schlüssel. Idealerweise erzeugt jeder WireGuard Peer seine Schlüssel selbst. Dann müssen nur die öffentliche Schlüssel ausgetauscht werden, was auch über einen unsicheren Kanal (E-Mail o.ä.) erfolgen kann.

> sudo su
# cd /etc/wireguard
# umask 077
# wg genkey | tee privatekey | wg pubkey | tee publickey
bjqCt8IJ20zbfn3kLxvJ3mYGjTF+oe7Dg5vgyKqG4gU=

Der am Ende angezeigte öffentliche Schlüssel ist zu kopieren den anderen Peers zur Verfügung zu stellen. Man findet ihn auch in "/etc/wireguard/publickey".

Den privaten Schlüssel aus der Datei "privatekey" braucht man im nächsten Schritt in den eigenen Konfigurationsdateien für die WireGuard Verbindung(en).

Wenn man einen WireGuard Server für den Zugang zum privaten Firmen- oder Heimnetz verwenden möchte, braucht man eine Konfigurationsdatei mit allen Roadwarriors, die als /etc/wireguard/wg0.conf zu speichern ist.

(Die IP-Adressen für das Netzwerk und die Peers sind Beispiele - bitte selbst anpassen an das eigene Netzwerk.)

[Interface]
PrivateKey = <privater Schlüssel des Servers>
Address = 172.22.22.1/25
ListenPort = 51820

[Peer]
PublicKey = <öffentlicher Schlüssel des ersten Peer>
AllowedIPs = 172.22.22.211/32

[Peer]
PublicKey = <öffentlicher Schlüssel des zweiten Peer>
AllowedIPs = 172.22.22.212/32

[Peer]
PublicKey = <öffentlicher Schlüssel des dritten Peer>
AllowedIPs = 172.22.22.213/32
...

Bei der Firewallkonfiguration des Servers ist darauf zu achten dass Incoming UDP Traffic auf Port 51820 erlaubt ist, damit die Peers eine WireGuard VPN-Verbindung aufbauen können.

Debian: > sudo uwf proto udp allow 51820
Fedora: > sudo firewall-cmd --add-port=51820/udp --permanent --zone=public

Den WireGuard VPN-Server startet und stoppt man mit folgenden Kommandos: > sudo wg-quick up wg0
> sudo wg-quick down wg0
Mit dem Systemd kann man den Start des VPN-Servers beim Booten automatisieren: > sudo systemctl enable wg-quick@wg0.service
> sudo systemctl daemon-reload
Um den automatischen Start beim Booten wieder zu enfernen sind folgende Komandos nötig: > sudo systemctl stop wg-quick@wg0
> sudo systemctl disable wg-quick@wg0.service
> sudo rm -i /etc/systemd/system/wg-quick@wg0*
> sudo systemctl daemon-reload
> sudo syytemctl reset-failed

Besonderheiten für QubesOS

Hinweis für QubesOS Linux: Die Einstellungen werden nicht in der Net-VM vorgenommen sondern in dem Template, das für die Net-VM verwendet wird!

Um zu verhindern, dass die WireGuard Schlüssel in die Arbeits-VMs exponiert werden und die Arbeits-VMs eine WireGuard Verbindung zum VPN-Server aufbauen, die die QubesOS Firewall umgeht, muss man für die Net-VM eine eigene Template-VM erstellen.