# 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.

Source: https://www.jpkc.com/db/cheatsheets/security/wireguard/

<!-- PROSE:intro -->
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.
<!-- PROSE:intro:end -->

## Schlüsselerzeugung

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

```bash
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.

```bash
wg pubkey < private.key > public.key
```

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

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

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

```bash
wg genpsk > preshared.key
```

## wg-quick (Einfaches Setup)

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

```bash
wg-quick up wg0
```

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

```bash
wg-quick down wg0
```

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

```bash
wg-quick strip wg0
```

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

```bash
systemctl enable wg-quick@wg0
```

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

```bash
systemctl start wg-quick@wg0
```

## wg-Interface-Verwaltung

`wg show` — Zeigt den Status aller WireGuard-Interfaces.

```bash
wg show
```

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

```bash
wg show wg0
```

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

```bash
wg show wg0 dump
```

`wg showconf <interface>` — Zeigt die laufende Konfiguration.

```bash
wg showconf wg0
```

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

```bash
wg set wg0 listen-port 51820
```

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

```bash
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.

```bash
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.

```bash
wg set wg0 peer ABC123...= remove
```

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

```bash
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.

```bash
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.

```bash
wg show wg0 latest-handshakes
```

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

```bash
wg show wg0 transfer
```

## Fehlersuche

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

```bash
wg show wg0 endpoints
```

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

```bash
ping -c 4 10.0.0.2
```

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

```bash
ip addr show wg0
```

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

```bash
ip route | grep wg0
```

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

```bash
journalctl -u wg-quick@wg0 -f
```

<!-- PROSE:outro -->
## 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/`.

## Weiterführende Links

- [WireGuard – offizielle Website](https://www.wireguard.com/) – Konzept, Protokoll und Downloads (englisch)
- [WireGuard Quick Start](https://www.wireguard.com/quickstart/) – Schnelleinstieg Schritt für Schritt (englisch)
- [WireGuard – Wikipedia](https://de.wikipedia.org/wiki/WireGuard) – Hintergrund und Einordnung
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [age](https://www.jpkc.com/db/cheatsheets/security/age/) – moderne Datei-Verschlüsselung mit einfachen Schlüsseln
- [clamav](https://www.jpkc.com/db/cheatsheets/security/clamav/) – Open-Source-Virenscanner für Dateien und Mails
- [fail2ban](https://www.jpkc.com/db/cheatsheets/security/fail2ban/) – sperrt IPs nach wiederholten fehlgeschlagenen Logins

