WireGuard — schlankes, modernes VPN auf der Kommandozeile

Praxis-Guide zu WireGuard: Schlüsselpaare erzeugen, Peers und AllowedIPs konfigurieren, Tunnel mit wg und wg-quick verwalten und Verbindungen prüfen.

WireGuard ist ein modernes, schlankes VPN-Protokoll, das direkt im Linux-Kernel läuft und mit nur wenigen tausend Zeilen Code auskommt – ein Bruchteil von OpenVPN oder IPsec. Statt komplexer Cipher-Aushandlung setzt es auf festgelegte, moderne Kryptografie (Curve25519, ChaCha20, Poly1305) und macht die Konfiguration dadurch erstaunlich übersichtlich. Mit wg verwaltest du Schlüssel, Peers und den Tunnel-Status, mit wg-quick bringst du ein Interface per Konfigurationsdatei in Sekunden hoch oder runter. Jeder Knoten besitzt ein Curve25519-Schlüsselpaar; Peers werden über ihren PublicKey, ihre AllowedIPs und einen Endpoint verknüpft. Dieser Guide führt dich von der Schlüsselerzeugung über das Peer-Management bis zur Fehlersuche am laufenden Tunnel.

Schlüsselerzeugung

wg genkey — Erzeugt einen privaten Schlüssel (Curve25519). Der PrivateKey darf niemals geteilt werden – Dateirechte mit chmod 600 absichern.

wg genkey > private.key

wg pubkey < <private-key-file> — Leitet aus einem privaten Schlüssel den passenden PublicKey ab, der gefahrlos mit Peers geteilt werden kann.

wg pubkey < private.key > public.key

wg genkey | tee private.key | wg pubkey > public.key — Erzeugt PrivateKey und PublicKey in einem Befehl.

wg genkey | tee private.key | wg pubkey > public.key

wg genpsk — Erzeugt einen Pre-Shared Key für eine zusätzliche symmetrische Sicherheitsschicht.

wg genpsk > preshared.key

wg-quick (Einfaches Setup)

wg-quick up <interface> — Bringt ein WireGuard-Interface anhand seiner Konfigurationsdatei hoch.

wg-quick up wg0

wg-quick down <interface> — Fährt ein WireGuard-Interface herunter.

wg-quick down wg0

wg-quick strip <interface> — Zeigt die Konfiguration ohne die wg-quick-Zusätze (reines wg-Format).

wg-quick strip wg0

systemctl enable wg-quick@<interface> — Startet WireGuard automatisch beim Booten.

systemctl enable wg-quick@wg0

systemctl start wg-quick@<interface> — Startet WireGuard über systemd.

systemctl start wg-quick@wg0

wg-Interface-Verwaltung

wg show — Zeigt den Status aller WireGuard-Interfaces.

wg show

wg show <interface> — Zeigt den Status eines bestimmten Interface.

wg show wg0

wg show <interface> dump — Gibt den Status in maschinenlesbarer Form aus.

wg show wg0 dump

wg showconf <interface> — Zeigt die laufende Konfiguration.

wg showconf wg0

wg set <interface> listen-port <port> — Setzt den Listening-Port.

wg set wg0 listen-port 51820

wg set <interface> private-key <file> — Setzt den PrivateKey für ein Interface.

wg set wg0 private-key /etc/wireguard/private.key

Peer-Verwaltung

wg set <interface> peer <pubkey> allowed-ips <cidr> endpoint <host:port> — Fügt einem Interface einen Peer hinzu. Die AllowedIPs bestimmen, welche Ziel-IPs durch den Tunnel geroutet werden – sorgfältig setzen, denn sie steuern Routing und Sicherheit.

wg set wg0 peer ABC123...= allowed-ips 10.0.0.2/32 endpoint 203.0.113.1:51820

wg set <interface> peer <pubkey> remove — Entfernt einen Peer von einem Interface.

wg set wg0 peer ABC123...= remove

wg set <interface> peer <pubkey> persistent-keepalive <seconds> — Setzt das Keepalive-Intervall für NAT-Traversal.

wg set wg0 peer ABC123...= persistent-keepalive 25

wg set <interface> peer <pubkey> preshared-key <file> — Setzt einen Pre-Shared Key für einen Peer.

wg set wg0 peer ABC123...= preshared-key /etc/wireguard/psk.key

wg show <interface> latest-handshakes — Zeigt, wann jeder Peer zuletzt einen Handshake abgeschlossen hat.

wg show wg0 latest-handshakes

wg show <interface> transfer — Zeigt die Transfer-Statistik pro Peer.

wg show wg0 transfer

Fehlersuche

wg show <interface> endpoints — Zeigt die aktuellen Endpoints aller Peers.

wg show wg0 endpoints

ping -c 4 <peer-ip> — Testet die Verbindung zu einem Peer durch den Tunnel.

ping -c 4 10.0.0.2

ip addr show <interface> — Zeigt die IP-Konfiguration des WireGuard-Interface.

ip addr show wg0

ip route | grep <interface> — Prüft, welche Routen durch den WireGuard-Tunnel laufen.

ip route | grep wg0

journalctl -u wg-quick@<interface> — Zeigt die systemd-Logs des WireGuard-Dienstes.

journalctl -u wg-quick@wg0 -f

Fazit

WireGuard zeigt, dass ein VPN nicht kompliziert sein muss: ein Schlüsselpaar pro Knoten, eine knappe Konfigurationsdatei und zwei Kommandos genügen für einen verschlüsselten Tunnel. Achte vor allem auf zwei Dinge – halte den PrivateKey unter Verschluss (chmod 600, niemals teilen) und setze die AllowedIPs bewusst, denn sie entscheiden über Routing und damit über die Sicherheit deines Tunnels. Wer mehr als eine Handvoll Peers verwaltet, kombiniert WireGuard mit systemd (wg-quick@) und einer versionierten Konfiguration unter /etc/wireguard/.

Verwandte Kommandos

  • age – moderne Datei-Verschlüsselung mit einfachen Schlüsseln
  • clamav – Open-Source-Virenscanner für Dateien und Mails
  • fail2ban – sperrt IPs nach wiederholten fehlgeschlagenen Logins