WireGuard bringt seine Verwaltung als kleine Werkzeugsammlung mit: wg für den Tunnel selbst und wg-quick als Startskript. Weil das Protokoll im Kernel läuft, gibt es keine Konfigurationsdatei mit Hunderten Optionen — ein Interface, beliebig viele Peers, fertig. Diese Referenz zeigt die Befehle; die Funktionsweise des Protokolls erklärt der Artikel WireGuard.

Schlüssel erzeugen

WireGuard kennt keine Zertifikate, nur Schlüsselpaare aus je einem privaten und einem öffentlichen Schlüssel. Die Dateirechte sind entscheidend — der private Schlüssel darf nie für andere lesbar sein:

umask 077
wg genkey | tee privatekey | wg pubkey > publickey
wg genpsk > preshared.key

wg genkey erzeugt den privaten Schlüssel, wg pubkey rechnet den öffentlichen daraus, wg genpsk liefert einen zusätzlichen gemeinsamen Schlüssel für eine zweite Verschlüsselungsschicht (Post-Quantum-Vorstufe, zusätzliche Absicherung gegen spätere Entschlüsselung).

Interface einrichten

ip link add dev wg0 type wireguard
ip address add 10.0.0.1/24 dev wg0
ip link set wg0 up
wg set wg0 private-key ./privatekey listen-port 51820

Peers setzen mit wg

Jeder Gegenstelle wird ein öffentlicher Schlüssel, ein erlaubter Adressbereich und ihr Endpunkt zugeordnet:

wg set wg0 peer <PUBKEY> allowed-ips 10.0.0.2/32
wg set wg0 peer <PUBKEY> endpoint vpn.example.org:51820
wg set wg0 peer <PUBKEY> persistent-keepalive 25
wg set wg0 peer <PUBKEY> preshared-key ./preshared.key
wg set wg0 peer <PUBKEY> remove

Die Option allowed-ips ist mehr als ein Routing-Eintrag: WireGuard prüft damit in beide Richtungen — nur Pakete, deren Quelladresse im Bereich liegt, werden von diesem Peer angenommen, und nur dorthin werden Pakete geschickt (Cryptokey Routing). persistent-keepalive 25 hält die Verbindung durch NAT-Geräte offen, weil alle 25 Sekunden ein leeres Paket gesendet wird.

Konfiguration laden und speichern

wg showconf wg0 > wg0.conf      # laufende Konfiguration als Datei
wg setconf wg0 wg0.conf         # Datei setzen (ersetzt Peers vollständig)
wg addconf wg0 wg0.conf         # Datei ergänzen
wg syncconf wg0 wg0.conf        # abgleichen, bestehende Peers bleiben

Für Änderungen im laufenden Betrieb ist wg syncconf die richtige Wahl: Anders als setconf entfernt es keine Peers, die in der Datei fehlen, und lässt bestehende Handshakes bestehen.

wg-quick: Tunnel aus einer Datei starten

Das Skript wg-quick liest /etc/wireguard/wg0.conf, legt das Interface an, setzt Adressen und Routen und kümmert sich um die Namensauflösung:

wg-quick up wg0
wg-quick down wg0
wg-quick save wg0      # aktuelle Peer-Endpunkte zurückschreiben
wg-quick strip wg0     # Konfiguration ohne wg-quick-Zeilen ausgeben
systemctl enable --now wg-quick@wg0

Der Aufbau der Datei folgt zwei Abschnitten:

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <PRIVKEY>
PostUp = sysctl -w net.ipv4.ip_forward=1

[Peer]
PublicKey = <PUBKEY>
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24
Endpoint = vpn.example.org:51820
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0, ::/0 leitet den gesamten Verkehr über den Tunnel (Full Tunnel), ein einzelnes /32 nur einen Host (Split Tunnel). Die Datei gehört nach /etc/wireguard/ und muss chmod 600 haben.

Zustand prüfen

wg show                # Interface, Peers, Handshake, Transfer
wg show wg0 dump       # maschinenlesbare Ausgabe für Skripte
wg show wg0 latest-handshakes
wg show wg0 transfer
wg show all            # alle Interfaces auf einmal
  • Handshake 0: Es kam noch nie eine Antwort — Endpunkt, Port oder Schlüssel passen nicht.
  • Handshake alt, Transfer klein: Der Tunnel steht, aber es fließt kaum Verkehr — meist eine Routing- oder Firewall-Frage auf der Gegenseite.
  • Operation not supported: Das Kernelmodul fehlt (modprobe wireguard) oder der Kernel ist zu alt (WireGuard ist ab Linux 5.6 enthalten).
  • Kein Verkehr nach Regeländerung: AllowedIPs und die eigene Adresse prüfen — der Bereich muss die Gegenstelle einschließen.

Verwandte Artikel

Die Protokollebene erklärt WireGuard; die klassische Schicht-3-Variante mit Schlüsselaustausch steht in den IPsec-Befehle, der TLS-basierte Tunnel in den OpenVPN-Befehle. Adressierung und Weiterleitung behandeln NAT und IP-Tunnel; der Überblick über Zweck und Einsatz steht in VPN und VPN-Grundlagen.