VPNSmith
self-host-vpnINFO

WireGuard Peer hinzufügen: im laufenden Betrieb, ohne den Tunnel neu zu starten

Einen WireGuard-Peer hinzuzufügen erfordert keinen Neustart. wg set übernimmt einen neuen Peer sofort in eine laufende Schnittstelle, während wg-quick down/up jede bestehende Sitzung abwirft. Der Befehl, was in AllowedIPs gehört, wie er einen Neustart übersteht, und warum der neue Peer meist trotzdem nicht verbindet.

Von Eric Gerard · Gründer · VPNSmith - Spezialist für selbstgehostete VPNs & DSGVO-VPS6 Min. LesezeitFoto via Pexels

Die meisten Anleitungen beantworten „wie füge ich einen WireGuard-Peer hinzu?" mit wg-quick down wg0 && wg-quick up wg0. Das funktioniert — und trennt zugleich alle, die den Tunnel gerade benutzen, um eine einzige Zeile in eine Datei zu schreiben. Auf einem Server mit einer Handvoll Clients ist das ein kurzes Ärgernis. Auf einem Server, auf den Sie sich wirklich verlassen, ist es der Grund, warum Leute das Hinzufügen von Peers ganz vermeiden.

Es gibt einen Befehl, der es im laufenden Betrieb erledigt.

Wie fügt man einen Peer zu WireGuard hinzu?

Eine Zeile, auf der laufenden Schnittstelle:

wg set wg0 peer <CLIENT_PUBLIC_KEY> allowed-ips 10.0.0.5/32

Der Peer existiert ab diesem Moment. Kein Neustart, keine abgebrochenen Handshakes, keine Unterbrechung für irgendjemanden, der bereits verbunden ist. wg set spricht direkt mit dem Kernel-Modul und bearbeitet die Live-Konfiguration der Schnittstelle.

Prüfen, ob es angekommen ist:

wg show wg0

Der neue öffentliche Schlüssel taucht in der Liste auf, noch ohne Handshake — das ist erwartbar, der Handshake passiert, wenn der Client zum ersten Mal Verkehr sendet.

Wie sieht der vollständige Ablauf auf der Kommandozeile aus?

Auf der Client-Maschine das Schlüsselpaar erzeugen:

wg genkey | tee client.key | wg pubkey > client.pub

client.key ist der private Schlüssel und verlässt diese Maschine nie. client.pub ist das, was der Server braucht.

Auf dem Server:

wg set wg0 peer "$(cat client.pub)" allowed-ips 10.0.0.5/32

Zurück auf dem Client braucht die Konfigurationsdatei den öffentlichen Schlüssel des Servers, dessen Endpunkt und die gerade vergebene Adresse:

[Interface]
PrivateKey = <Inhalt von client.key>
Address = 10.0.0.5/32

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Die beiden Schlüssel sind der Schritt, den man falsch macht: Jede Seite hält den öffentlichen Schlüssel der anderen Seite, nie den eigenen.

Was gehört in AllowedIPs, wenn man einen Peer hinzufügt?

Es hängt davon ab, auf welcher Seite Sie stehen, und diese Asymmetrie ist die Quelle der meisten Verwirrung.

Auf dem Server, für diesen PeerAuf dem Client, für den Server
Bedeutungwelche Adresse diesem Client gehörtwelcher Verkehr durch den Tunnel geht
Typischer Wert10.0.0.5/32 — eine Adresse0.0.0.0/0 (alles) oder das LAN-Subnetz (Split Tunnel)
Darf sie sich mit einem anderen Peer überschneiden?Neinnicht zutreffend
Wirkung bei FehlerPakete gehen an den falschen Peer oder werden verworfenVerkehr umgeht den Tunnel, oder der Tunnel schluckt Ihr LAN

Die Regel gegen Überschneidungen ist strukturell, nicht kosmetisch. AllowedIPs sagt WireGuard, welchem Peer ein bestimmtes Ziel gehört — eine auf zwei Peers aufgeführte Adresse macht diese Entscheidung mehrdeutig, und das praktische Symptom ist, dass das Hinzufügen eines Clients den vorherigen stillschweigend offline nimmt. Wenn Sie über die eine /32 hinausgehen wollen, ist AllowedIPs im Detail erklärt der Ort, an dem die Routing-Seite auseinandergenommen wird.

Wie übersteht der neue Peer einen Neustart?

wg set ändert die laufende Schnittstelle. Es fasst /etc/wireguard/wg0.conf nicht an, ein Neustart vergisst es also. Zwei Wege, es dauerhaft zu machen:

Den Block von Hand in die Datei eintragen:

[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.0.0.5/32

Oder den Live-Zustand zurück auf die Platte schreiben:

wg showconf wg0 > /etc/wireguard/wg0.conf
chmod 600 /etc/wireguard/wg0.conf

wg showconf gibt neben allem anderen den privaten Schlüssel der Schnittstelle aus, die Zieldatei darf also nicht für alle lesbar sein. Wenn Sie den zweiten Weg gegangen sind, prüfen Sie die Berechtigungen, bevor Sie weitermachen.

Um eine bearbeitete Datei neu zu laden, ohne Sitzungen abzuwerfen:

wg syncconf wg0 <(wg-quick strip wg0)

syncconf wendet die Unterschiede an. wg-quick down/up tut das nicht — es baut die Schnittstelle von Grund auf neu, also genau das, was Sie vermeiden wollten.

Wie skriptet man das Hinzufügen von Peers unter Linux?

Die Abfolge hat keinen interaktiven Schritt und lässt sich deshalb direkt skripten:

#!/usr/bin/env bash
set -euo pipefail
NAME="$1"; IP="$2"          # ./addpeer.sh laptop 10.0.0.7
umask 077
wg genkey | tee "$NAME.key" | wg pubkey > "$NAME.pub"
wg set wg0 peer "$(cat "$NAME.pub")" allowed-ips "$IP/32"
wg showconf wg0 > /etc/wireguard/wg0.conf
echo "added $NAME at $IP"

umask 077 ist wichtig: Ohne die Zeile ist der frisch geschriebene private Schlüssel für jedes Konto auf der Maschine lesbar. set -euo pipefail ebenso — ohne sie hinterlässt ein fehlgeschlagenes wg set trotzdem Schlüsseldateien und eine fröhliche Erfolgsmeldung.

Die Hand eines IT-Technikers auf einer Tastatur an einem weißen Tisch in einem Serverraum, der alte quadratische Monitor vollständig dunkel, dahinter blaues Licht und Racks mit gelben und weißen Patchkabeln
Die Hand eines IT-Technikers auf einer Tastatur an einem weißen Tisch in einem Serverraum, der alte quadratische Monitor vollständig dunkel, dahinter blaues Licht und Racks mit gelben und weißen Patchkabeln

Eine Hand ruht auf der Tastatur, während der Monitor schwarz bleibt — einen Peer mit wg set hinzuzufügen erzeugt überhaupt keine sichtbare Bestätigung, weshalb wg show das Einzige ist, was Ihnen sagt, dass es funktioniert hat.

Warum verbindet sich der neue Peer nicht?

Der Befehl lief durch und nichts passiert. In der Praxis ist es fast immer eines von drei Dingen, und alle drei lassen sich prüfen statt raten.

  1. Die Schlüssel sind vertauscht. Der Server hält den öffentlichen Schlüssel des Clients, der Client den des Servers. Einen privaten Schlüssel dorthin zu schreiben, wo ein öffentlicher hingehört, scheitert lautlos.
  2. Der Client sitzt hinter NAT ohne PersistentKeepalive. Der Server hat keinen Rückweg, bis der Client zuerst spricht, und die NAT-Zuordnung läuft in der Zwischenzeit ab. PersistentKeepalive = 25 auf der Client-Seite hält sie offen — warum 25 Sekunden und was der Wert kostet ist eine eigene Frage.
  3. Die Adresse ist bereits vergeben. Zwei Peers mit denselben AllowedIPs sind der Fall, der am rätselhaftesten aussieht, weil ausgerechnet der ältere Peer kaputtgeht.

Für diesen dritten Fehler existiert wg-clients-audit. Es liest einen Ordner mit Client-Konfigurationen und meldet doppelte Adressen, wiederverwendete private Schlüssel und AllowedIPs-Bereiche, die breit genug sind, um das lokale Netz zu verschlucken — die drei Fehler, die einen Tunnel erzeugen, der verbindet und sich dann seltsam verhält. Es laufen zu lassen, bevor Sie jemandem eine Konfiguration geben, ist schneller, als es hinterher zu diagnostizieren.

Beginnen Sie mit wg show wg0. Ein Peer ohne latest handshake hat nie einen abgeschlossen, was auf Schlüssel oder Erreichbarkeit deutet. Ein Peer, der einen Handshake hat, aber keine Daten trägt, deutet auf AllowedIPs. Wenn der Handshake selbst der Punkt ist, an dem es hängt, arbeitet die Handshake-Fehlerbehebung die Ursachen der Reihe nach ab.

Was man behalten sollte

wg set fügt einen Peer live hinzu; wg-quick down/up trennt alle, um dieselbe Aufgabe zu erledigen. Was Sie live hinzufügen, ist nach einem Neustart weg, sofern Sie es nicht auch in die Konfiguration schreiben, und wg showconf schreibt Ihren privaten Schlüssel bereitwillig in eine für alle lesbare Datei, wenn Sie es zulassen. Ein /32 pro Client, niemals überschneidend. Und wenn ein neuer Peer sich seltsam verhält, sehen Sie in wg show nach, bevor Sie irgendetwas ändern — der Unterschied zwischen „kein Handshake" und „Handshake, aber kein Verkehr" sagt Ihnen, welche Hälfte des Aufbaus Sie sich ansehen müssen.

★ Nürnberger DSGVO-Rechenzentrum · ✓ Dedizierte IPv4 inklusive · 200+ Mbps garantiert

Hoste dein VPN auf deinem eigenen VPS → ContaboVoller Root-Zugriff · öffentliche IPv4 · wähle deine Region

Häufig gestellte Fragen

Wie fügt man einen Peer zu WireGuard hinzu, ohne neu zu starten?
Mit wg set auf der laufenden Schnittstelle: wg set wg0 peer <PUBLIC_KEY> allowed-ips 10.0.0.5/32. Der Peer ist sofort aktiv, und keine bestehende Sitzung wird unterbrochen. Ein Neustart mit wg-quick down wg0 && wg-quick up wg0 funktioniert ebenfalls, reißt aber jeden laufenden Tunnel ab, um eine einzige Zeile hinzuzufügen - weshalb das nicht die Standardmethode sein sollte.
Übersteht wg set einen Neustart?
Nein. wg set ändert den laufenden Kernel-Zustand, nicht die Datei. Nichts, was Sie auf diesem Weg hinzufügen, steht in /etc/wireguard/wg0.conf, ein Neustart verliert es also. Tragen Sie den [Peer]-Block zusätzlich in die Datei ein, oder schreiben Sie den laufenden Zustand mit wg showconf wg0 zurück - beachten Sie dabei, dass showconf den privaten Schlüssel mit ausgibt, die Zieldatei also chmod 600 bleiben muss.
Was gehört bei einem neuen Peer in AllowedIPs?
Auf dem Server eine Adresse pro Client, als /32 - zum Beispiel 10.0.0.5/32. Sie darf sich nicht mit einem anderen Peer überschneiden, denn AllowedIPs entscheidet, an welchen Peer ein Paket geht; eine zweimal aufgeführte Adresse macht diese Wahl mehrdeutig. Auf dem Client beschreibt AllowedIPs, was durch den Tunnel gehen soll: 0.0.0.0/0 für alles, oder nur das Server-Subnetz für Split Tunneling.
Warum verbindet sich mein neuer WireGuard-Peer nicht?
Drei Ursachen decken das meiste ab. Der Client benutzt den falschen öffentlichen Schlüssel - der Server braucht den des Clients und der Client den des Servers, und beide werden leicht vertauscht. Der Client sitzt hinter NAT ohne PersistentKeepalive, sodass der Server keinen Rückweg hat. Oder die vergebene Adresse gehört bereits einem anderen Peer, worauf meist der ältere aufhört zu funktionieren, sobald der neue verbindet.
Wie fügt man unter Linux einen Peer über die Kommandozeile hinzu?
Erzeugen Sie das Schlüsselpaar mit wg genkey | tee client.key | wg pubkey > client.pub und führen Sie dann auf dem Server wg set wg0 peer $(cat client.pub) allowed-ips 10.0.0.5/32 aus. Prüfen Sie das Ergebnis mit wg show wg0. Die gesamte Abfolge lässt sich sauber skripten, was der übliche Weg ist, um mehrere Clients auf einmal anzulegen.