WireGuard auf dem Raspberry Pi 5: vollständige Schritt-für-Schritt-Anleitung von Installation bis Geschwindigkeitstest

Kurzfassung

Schritt-für-Schritt-Anleitung für Einsteiger zur Einrichtung eines WireGuard-Servers auf dem Raspberry Pi 5: von Vorbereitung und Konfiguration bis zu Belastungstests und tatsächlicher Geschwindigkeit. In 2–3 Stunden richtest du dein persönliches VPN ein, prüfst die Bandbreite und optimierst die Performance.

WireGuard auf dem Raspberry Pi 5: vollständige Schritt-für-Schritt-Anleitung von Installation bis Geschwindigkeitstest

Einführung

In dieser Schritt-für-Schritt-Anleitung richtest du selbstständig einen schnellen und zuverlässigen VPN-Server mit WireGuard auf deinem Raspberry Pi 5 ein. Du konfigurierst Routing und Verschlüsselung, verbindest Clients vom PC und Handy, testest die echte Geschwindigkeit, führst Belastungstests durch und lernst, typische Probleme zu erkennen und zu beheben. Am Ende hast du einen persönlichen VPN-Tunnel für sicheren Zugriff auf dein Heimnetzwerk, verschlüsselte Kommunikation in öffentlichen Netzen und umgehst Einschränkungen.

Für wen ist diese Anleitung? Für Einsteiger mit Raspberry Pi, die noch nie einen VPN eingerichtet haben, sowie für diejenigen, die bereits Terminal-Erfahrung besitzen und eine detaillierte Anleitung plus ein paar Fortgeschrittenen-Tricks suchen. Wir erklären jeden Schritt ausführlich und fügen Optimierungstipps hinzu, für alle, die maximalen Speed und Stabilität erzielen wollen.

Was solltest du vorher wissen? Grundlegende Kenntnisse im Umgang mit Raspberry Pi und Bereitschaft, Befehle im Terminal auszuführen. Tiefgehendes Linux-Wissen ist nicht erforderlich, aber Aufmerksamkeit ist wichtig. Wir erklären alle wichtigen Begriffe einfach und verständlich.

Wie viel Zeit benötigst du? Die Systeminstallation und Updates dauern 20–40 Minuten. Die Grundkonfiguration von WireGuard und das Hinzufügen der ersten Clients 30–60 Minuten. Router-Konfiguration und Tests weitere 20–40 Minuten. Insgesamt plane 2–3 Stunden ein, wenn du ruhig und sorgfältig vorgehst.

Vorbereitung

Benötigte Werkzeuge und Zugänge. Du brauchst einen Raspberry Pi 5, ein 27W USB-C Netzteil oder ein hochwertiges 5V 5A Netzteil, eine microSD-Karte mit 32–128 GB Speicher, mindestens Klasse A1, ein Netzwerkkabel für den Anschluss an deinen Heimrouter, einen Computer mit installiertem Raspberry Pi Imager sowie Zugang zum Router für Port-Weiterleitungen und die Zugangsdaten deines Providers zur Prüfung von CGNAT. Ein Monitor und eine Tastatur für den Erststart sind hilfreich, dank Headless-Setup aber nicht zwingend notwendig.

Systemanforderungen. Empfohlen wird die Raspberry Pi OS 64-bit Version (Bookworm und neuer), der Kernel unterstützt WireGuard standardmäßig. Für Geschwindigkeiten bis 1 Gbit/s genügt die Standardinstallation. Stabiler ist die Verbindung per Kabel statt WLAN. Als Client kannst du jeden aktuellen mobilen oder Desktop WireGuard-Client benutzen.

Was muss heruntergeladen und installiert werden? Installiere Raspberry Pi Imager auf deinem Rechner. Bereite ein Image von Raspberry Pi OS Lite 64-bit für eine minimalistische Umgebung vor. Auf dem Raspberry Pi installieren wir während des Setups die Pakete wireguard-tools, iperf3 für Tests, nftables oder iptables-nft für NAT sowie qrencode für einfaches Hinzufügen mobiler Clients.

Sicherungskopien anlegen. Wenn sich bereits eine Installation oder wichtige Daten auf der Karte befinden, solltest du ein Image der Karte mit einem geeigneten Tool anfertigen. Nach der WireGuard-Konfiguration zeigen wir dir, wie du eine Sicherung der Einstellungen erstellst, um im Fall einer Kartenstörung schnell wiederherstellen zu können.

Grundbegriffe

Wichtige Begriffe einfach erklärt. WireGuard ist ein moderner VPN-Protokollstandard, der einen verschlüsselten Tunnel zwischen Geräten aufbaut. Der Server ist dein Raspberry Pi 5, der eingehende Verbindungen akzeptiert. Der Client ist dein Smartphone oder Laptop, das sich mit dem Server verbindet. Schlüssel bestehen aus einem privaten und einem öffentlichen Teil zur Verschlüsselung und Authentifizierung. Das Interface wg0 ist der virtuelle Netzwerkadapter, durch den der verschlüsselte Datenverkehr läuft. AllowedIPs ist die Liste von Subnetzen und IP-Adressen, die über den Tunnel geleitet werden.

Funktionsprinzip. Jeder Tunnel-Teilnehmer besitzt feste Schlüssel und eine Adresse in einem privaten Subnetz, z.B. 10.6.0.0/24. Der Client sendet UDP-Pakete an die öffentliche IP und den Port des Servers. Der Server entschlüsselt den Traffic und leitet ihn entweder ins Internet oder das lokale Netzwerk weiter, je nach Konfiguration. Routing wird auf Client-Seite über AllowedIPs definiert, auf Server-Seite über Routingregeln und NAT.

Was solltest du vor dem Start wissen? Die Geschwindigkeit von WireGuard hängt von CPU, MTU, Netzwerkqualität und Routing zwischen Providern ab. Der Raspberry Pi 5 ist leistungsstark genug für nahe Gigabit-Geschwindigkeiten im LAN und mehrere hundert Mbit/s im Internet, sofern die Verbindungen und Routing-Pfade günstig sind. Die korrekte Einstellung von MTU und NAT ist entscheidend für Stabilität und Performance.

Schritt 1: Vorbereitung von Raspberry Pi 5 und Betriebssystem

Ziel dieses Schrittes

Eine frische 64-Bit Raspberry Pi OS Lite installieren, SSH aktivieren und Grundparameter setzen, um mit der WireGuard-Installation zu starten.

Schritt-für-Schritt-Anleitung

  1. Starte den Raspberry Pi Imager auf deinem PC. Wähle Raspberry Pi OS Lite (64-bit) als Betriebssystem.
  2. Wähle die microSD-Karte als Speicherziel. Achte darauf, die richtige Karte auszuwählen, um Datenverlust auf anderen Laufwerken zu vermeiden.
  3. Klicke auf Einstellungen (Zahnradsymbol im Imager). Aktiviere „SSH erlauben“, wähle „Passwortauthentifizierung“ oder hinterlege einen öffentlichen SSH-Schlüssel. Gib einen Benutzernamen ein, z.B. „pi“, und ein sicheres Passwort mit mindestens 12 Zeichen.
  4. Setze den Hostnamen, z.B. „rpi5-wg“. Wähle Land, Sprache und Tastaturlayout. Aktiviere Wi-Fi nur, wenn keine Kabelverbindung verfügbar ist, und gib SSID sowie Passwort ein. Ethernet wird empfohlen.
  5. Klicke auf „Speichern“ und anschließend auf „Schreiben“. Warte, bis der Schreib- und Verifizierungsprozess abgeschlossen ist. Das dauert ca. 3–10 Minuten.
  6. Entnehme die Karte und stecke sie in den Raspberry Pi 5. Verbinde das Ethernet-Kabel mit dem Router und schließe die Stromversorgung an. Warte, bis das System hochgefahren ist (20–60 Sekunden).
  7. Finde die IP-Adresse des Raspberry Pi heraus. Schau in die Liste der verbundenen Geräte im Router-Admin oder benutze einen Netzwerkscanner auf deinem Smartphone. Meist ist es 192.168.1.XX.
  8. Verbinde dich per SSH im Terminal: „ssh pi@192.168.1.XX“. Bestätige beim ersten Zugriff den Fingerabdruck und gib dein Passwort ein.
  9. Aktualisiere das System: „sudo apt update && sudo apt full-upgrade -y“. Starte dann neu: „sudo reboot“ und verbinde dich wieder per SSH.
  10. Installiere die neuesten Firmware-Updates und Werkzeuge: „sudo rpi-eeprom-update -a“. Bei Bedarf erneut neustarten mit „sudo reboot“.

⚠️ Achtung: Schalte den Raspberry Pi während des Schreibens auf die Karte und der Firmware-Aktualisierung nicht aus. Das kann das Dateisystem auf der SD-Karte beschädigen.

Tipp: Gib deinem Raspberry Pi einen eindeutigen Hostnamen, damit du bei mehreren Geräten in deinem Netzwerk nicht durcheinander kommst.

✅ Überprüfung: Mit „uname -m“ solltest du „aarch64“ sehen und mit „cat /etc/os-release“ die Raspberry Pi OS Bookworm Version. Die SSH-Verbindung „ssh pi@IP“ sollte ohne Fehler funktionieren.

Erwartetes Ergebnis. Du hast ein frisches 64-Bit Raspberry Pi OS Lite, stabile SSH-Verbindung und das Gerät ist im lokalen Netzwerk erreichbar und antwortet.

Mögliche Probleme und Lösungen. Kein SSH? Prüfe, ob du SSH im Imager aktiviert hast. Gerät nicht sichtbar? Kontrolliere das Ethernet-Kabel und den Routerport, versuche einen anderen Port. System startet nicht? Schreibe die Karte neu oder verwende eine andere microSD.

Schritt 2: Netzwerkeinstellungen, statische IP und SSH-Zugang

Ziel dieses Schrittes

Dem Raspberry Pi 5 eine feste lokale IP vergeben, Zeitzone einstellen und sicherstellen, dass der SSH-Zugang stabil ist. Wichtig für Portweiterleitung und spätere Verwaltung.

Schritt-für-Schritt-Anleitung

  1. Setze die Zeitzone: „sudo raspi-config“, dann „Localization Options“ und deine Region auswählen. Das hilft bei korrekten Logs und Verbindungsdiagnosen.
  2. Finde heraus, welches Netzwerkinterface aktiv ist: „ip -4 addr“. In der Regel ist Ethernet „eth0“ mit einer IP aus 192.168.X.Y.
  3. Vergib die statische IP per DHCP-Reservierung im Router-Admin. Suche dein Gerät anhand der MAC-Adresse „ip link show eth0“ und reserviere z.B. die IP 192.168.1.10. Das ist komfortabler und empfohlen.
  4. Wenn DHCP-Reservierung nicht möglich ist, setzt du die statische IP lokal. Öffne „sudo nano /etc/dhcpcd.conf“ und füge hinzu: „interface eth0“, „static ip_address=192.168.1.10/24“, „static routers=192.168.1.1“, „static domain_name_servers=1.1.1.1 8.8.8.8“. Speichern und mit „sudo systemctl restart dhcpcd“ neu starten.
  5. Teste die Internetverbindung: „ping -c 3 1.1.1.1“ und „ping -c 3 debian.org“. Wenn Antworten kommen, läuft das Netzwerk.
  6. Verbinde dich erneut per SSH mit der statischen IP: „ssh pi@192.168.1.10“.

Tipp: Schreibe die lokale IP deines Raspberry Pi auf einen Aufkleber und klebe ihn ans Gehäuse. Das spart Zeit bei der Fehlersuche.

✅ Überprüfung: Mit „ip route“ sollte die Standardroute über deinen Router erscheinen, „ip -4 addr show eth0“ zeigt die statische IP, und SSH funktioniert stabil unter dieser Adresse.

Erwartetes Ergebnis. Raspberry Pi hat eine feste lokale IP, Internet funktioniert, die Uhrzeit ist korrekt, SSH ist erreichbar und du kannst mit der WireGuard-Installation weitermachen.

Mögliche Probleme und Lösungen. Kein Internet? Prüfe Gateway- und DNS-Einstellungen. IP-Konflikte? Verwende eine andere Adresse im zulässigen Bereich.

Schritt 3: Installation von WireGuard und Kernel-Vorbereitung

Ziel dieses Schrittes

WireGuard-Tools installieren, sicherstellen, dass Kernel und Modul zur Verfügung stehen, System auf Tunnelbetrieb vorbereiten.

Schritt-für-Schritt-Anleitung

  1. Aktualisiere Paketquellen: „sudo apt update“.
  2. Installiere WireGuard, Tools und Zusatzprogramme: „sudo apt install -y wireguard wireguard-tools qrencode iperf3 nftables resolvconf“. Das Paket wireguard-dkms wird nicht benötigt, da das Modul im aktuellen Kernel eingebaut ist.
  3. Prüfe, ob das Modul geladen ist: „modprobe wireguard“ und „lsmod | grep wireguard“. Wenn „wireguard“ erscheint, ist das Modul aktiv.
  4. Aktiviere die Autostarts für nftables und systemd-resolved: „sudo systemctl enable nftables“ sowie „sudo systemctl enable systemd-resolved“. Letzteres sorgt für funktionierendes DNS über VPN.
  5. Prüfe die Version der Tools: „wg --version“. Es sollte die Versionen von wg-quick und wireguard-tools anzeigen.

⚠️ Achtung: Installiere nicht gleichzeitig iptables-legacy und nftables mit sich widersprechenden Regeln. Diese Anleitung verwendet nftables, das moderner ist und unter Debian Bookworm besser funktioniert.

Tipp: Wenn du das Kernel-Update kürzlich gemacht hast, starte den Raspberry Pi neu, bevor du das WireGuard-Modul überprüfst, damit es geladen wird.

✅ Überprüfung: Der Befehl „wg“ ohne Parameter zeigt eine leere Ausgabe ohne Fehler, „lsmod | grep wireguard“ listet das Modul, und Paketinstallationen sind ohne Fehler durchgelaufen.

Erwartetes Ergebnis. WireGuard ist installiert, Kernelmodul geladen, Command-Line-Tools verfügbar, nftables aktiv und bereit für NAT-Konfiguration.

Mögliche Probleme und Lösungen. Modul lädt nicht? Prüfe Kernel-Version mit „uname -r“ und update das System. Paket nicht gefunden? Prüfe Quellen in „/etc/apt/sources.list“ und führe „sudo apt update“ erneut aus.

Schritt 4: Schlüssel erstellen, Adressplan festlegen, Basiskonfiguration von wg0

Ziel dieses Schrittes

Server-Schlüssel generieren, VPN-Subnetz definieren und Konfiguration für das Interface wg0 erstellen, das den Server-Tunnel startet.

Schritt-für-Schritt-Anleitung

  1. Lege das Verzeichnis für Konfiguration und Schlüssel an: „sudo mkdir -p /etc/wireguard && sudo chmod 700 /etc/wireguard“.
  2. Erzeuge Server-Schlüssel: „umask 077; wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key > /dev/null“. So erhältst du private und öffentliche Schlüssel mit korrektem Schutz.
  3. Zeige den privaten Schlüssel an: „sudo cat /etc/wireguard/server_private.key“. Kopiere ihn, du brauchst ihn für die Config. Den öffentlichen Schlüssel „sudo cat /etc/wireguard/server_public.key“ gibst du an Clients weiter.
  4. Wähle das VPN-Subnetz. Wir nutzen 10.6.0.0/24 mit Serveradresse 10.6.0.1. Dieses private Netzwerk kollidiert selten mit Heimnetzwerken.
  5. Erstelle die Interface-Konfiguration: „sudo nano /etc/wireguard/wg0.conf“. Füge folgendes ein: [Interface], Address = 10.6.0.1/24, ListenPort = 51820, PrivateKey = DEIN_PRIVATER_SCHLÜSSEL, SaveConfig = true. PostUp/PostDown ergänzen wir im nächsten Schritt für NAT.
  6. Schränke Dateiberechtigungen ein: „sudo chmod 600 /etc/wireguard/wg0.conf“.
  7. Aktiviere IPv4-Forwarding: „echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-sysctl.conf“. Übernehme die Einstellungen mit „sudo sysctl --system“. Prüfe „sysctl net.ipv4.ip_forward“, es muss 1 anzeigen.
  8. Starte das Interface zum ersten Mal: „sudo wg-quick up wg0“. Mit „ip addr show wg0“ siehst du die Adresse 10.6.0.1/24.
  9. Aktiviere Autostart: „sudo systemctl enable wg-quick@wg0“.

Tipp: Das Interface heißt wg0, kann aber beliebig benannt werden. Für mehrere Tunnel verwende wg1, wg2 usw.

✅ Überprüfung: Mit „wg show“ sollten Informationen zum Interface wg0 erscheinen, inklusive Listenport 51820 und Server-Public-Key. „wg-quick up wg0“ läuft ohne Fehler, „ip a“ zeigt wg0 als UP.

Erwartetes Ergebnis. Server-Interface WireGuard läuft, lauscht auf UDP-Port 51820, IP-Forwarding ist aktiviert und die Basiskonfiguration steht für Clients bereit.

Mögliche Probleme und Lösungen. Die Fehlermeldung „RTNETLINK answers: File exists“ heißt oft, dass es Konflikte durch alte Routen gibt. Führe „sudo wg-quick down wg0“ und danach „sudo wg-quick up wg0“ aus. „Cannot find device wg0“ bedeutet, dass Modul oder Config fehlen.

Schritt 5: Routing, NAT und Portweiterleitung im Router

Ziel dieses Schrittes

NAT mit nftables aktivieren, damit Clients über den Server ins Internet kommen, und den UDP-Port 51820 im Router freigeben, damit der Server von außen erreichbar ist.

Schritt-für-Schritt-Anleitung

  1. Finde heraus, welches Interface nach außen zeigt: „ip route get 1.1.1.1“; dort steht z.B. „dev eth0“ – das ist dein externes Interface.
  2. Erstelle die Grundregeln für nftables: „sudo nano /etc/nftables.conf“. Füge hinzu: flush ruleset; table inet wg { chain prerouting { type nat hook prerouting priority -100; } chain input { type filter hook input priority 0; policy accept; } chain forward { type filter hook forward priority 0; policy accept; } chain output { type filter hook output priority 0; policy accept; } chain postrouting { type nat hook postrouting priority 100; } }. Speichern.
  3. Ergänze in der postrouting-Kette die MASQUERADE-Regel für ausgehenden Traffic der Clients: „oifname \"eth0\" ip saddr 10.6.0.0/24 counter masquerade“ – im Beispiel für eth0 als externem Interface.
  4. Lade die Regeln mit „sudo nft -f /etc/nftables.conf“. Kontrolliere mit „sudo nft list ruleset“, deine Tabelle wg und Regel müssen sichtbar sein.
  5. Füge in deiner Datei „/etc/wireguard/wg0.conf“ unter [Interface] die Zeilen hinzu: PostUp = nft -f /etc/nftables.conf und PostDown = nft flush ruleset. So werden die Regeln beim Hoch- und Runterfahren angewendet bzw. entfernt. Für erste Tests reicht das, professionell wird das später eleganter gehandhabt.
  6. Starte das Interface neu: „sudo wg-quick down wg0 || true && sudo wg-quick up wg0“. Prüfe „nft list ruleset“ und „wg show“ erneut.
  7. Öffne im Router den Port 51820 UDP. Logge dich ins Router-Webinterface ein, finde Port-Forwarding oder NAT, lege eine Regel an: externe 51820/UDP → interne IP Raspberry Pi 192.168.1.10 Port 51820 UDP. Speichere.
  8. Prüfe auf dem Pi, ob der Port lauscht: „sudo ss -ulnpt | grep 51820“. Du solltest eine Zeile mit „udp“ und „*:51820“ sehen.

⚠️ Achtung: Falls dein Provider CGNAT verwendet, klappt keine Portweiterleitung von außen. Frage nach einem öffentlichen IP oder nutze Alternativen wie einen externen VPS zur Traffic-Weiterleitung oder WireGuard im Client-Server-Transit-Modus.

Tipp: Deaktiviere UPnP für Port 51820 an deinem Router, um Konflikte mit deiner statischen Portweiterleitung zu vermeiden.

✅ Überprüfung: Innerhalb deines LAN teste „nc -u -zv 192.168.1.10 51820“. Sollte „succeeded“ oder keine „Permission denied“-Fehler anzeigen. Von außerhalb teste mit Handy im mobilen Netz. Aktiviere den Client und kontrolliere „wg show“ auf Handshakes.

Erwartetes Ergebnis. NAT funktioniert, Client-Traffic wird mit der IP des Raspberry Pi maskiert, Port 51820/UDP ist offen, Server aus dem Internet erreichbar mit öffentlicher IP.

Mögliche Probleme und Lösungen. Kein Internet über VPN? Prüfe ip_forward und MASQUERADE-Regel. Kein Zugriff von außen? Achte auf doppeltes NAT (Provider-Modem plus Router) und stelle ggf. Bridge-Modus ein oder nutze doppelte Portweiterleitung.

Schritt 6: Clients hinzufügen (Handy, Laptop), QR-Code und erster Test

Ziel dieses Schrittes

Client-Konfigurationen erstellen, als Peer auf dem Server registrieren, Handy und Laptop verbinden und prüfen, ob der Traffic erfolgreich durch den Tunnel läuft.

Schritt-für-Schritt-Anleitung

  1. Erzeuge Client1-Schlüssel: „wg genkey | tee client1_private.key | wg pubkey | tee client1_public.key“. Für Sicherheit führe das unter deinem Benutzer aus und setze Rechte auf 600.
  2. Ermittle die öffentliche IP oder DNS-Namen deines Servers. Bei dynamischer IP richte DDNS im Router ein. Für Tests kannst du temporär die aktuelle öffentliche IP mit „curl ifconfig.me“ am Raspberry Pi ermitteln.
  3. Erstelle die Client-Konfigurationsdatei „client1.conf“ auf dem Pi, mit folgendem Inhalt: [Interface], PrivateKey = CLIENT_PRIVATER_SCHLÜSSEL, Address = 10.6.0.2/32, DNS = 1.1.1.1; dann [Peer], PublicKey = SERVER_PUBLIC_KEY, Endpoint = DEINE_IP_ODER_DNS:51820, AllowedIPs = 0.0.0.0/0, ::/0, PersistentKeepalive = 25. Damit wird kompletter Traffic vom Client über VPN geleitet.
  4. Füge den Client als Peer zum Server hinzu: „sudo nano /etc/wireguard/wg0.conf“. Am Ende: [Peer], PublicKey = CLIENT_PUBLIC_KEY, AllowedIPs = 10.6.0.2/32. Speichern.
  5. Wende die Konfiguration an: „sudo wg addconf wg0 <(wg-quick strip wg0)“ oder starte „sudo wg-quick down wg0 && sudo wg-quick up wg0“ neu.
  6. Erzeuge QR-Code für mobilen Client: „qrencode -t ansiutf8 < client1.conf“. Auf dem Bildschirm erscheint ein QR, den du in der WireGuard-App auf iOS oder Android mit „Aus QR-Code erstellen“ scannst.
  7. Installiere auf dem Laptop die offizielle WireGuard-App, importiere „client1.conf“ und speichere das Profil.
  8. Verbinde den Client: aktiviere auf dem Handy den Tunnel, am Laptop klicke auf „Aktivieren“. Auf dem Server „sudo wg show“ zeigt „latest handshake“ und steigende Traffic-Zähler.

Tipp: Möchtest du, dass der Client nur Zugriff aufs Heimnetz, aber nicht volles Internet via VPN nutzt, ändere AllowedIPs auf „10.6.0.0/24, 192.168.1.0/24“ und entferne 0.0.0.0/0 für den Split-Tunnel.

✅ Überprüfung: Teste vom Handy IP-Check-Websites; es sollte die öffentliche IP deines Heimanschlusses zeigen. Pinge 10.6.0.1 und 192.168.1.1, falls LAN-Zugriff erlaubt ist.

Erwartetes Ergebnis. Clients verbinden sich erfolgreich, der Verkehr läuft durch den VPN-Tunnel, Traffic-Counter in „wg show“ wächst, Latenz ist stabil.

Mögliche Probleme und Lösungen. Kein Handshake? Prüfe Portweiterleitung und öffentliche IP. Handshake, aber kein Internet? Kontrolliere NAT/Masquerading und ip_forward. Instabile Verbindungen im Mobilnetz? Erhöhe PersistentKeepalive auf 25–30 Sekunden.

Schritt 7: Geschwindigkeitstests, Belastung und Engpass-Diagnose

Ziel dieses Schrittes

Objektive Performance-Messungen mit WireGuard auf dem Raspberry Pi 5 durchführen, CPU-Belastung beobachten, reale Geschwindigkeiten im LAN und Internet bewerten und Flaschenhälse erkennen sowie beheben.

Schritt-für-Schritt-Anleitung

  1. Stelle sicher, dass iperf3 auf beiden Enden installiert ist. Am Raspberry Pi ist es schon vorhanden. Auf dem Laptop installiere iperf3. Starte den Server am Pi mit „iperf3 -s“. Fenster offen lassen.
  2. Vom Client aus teste mit mehreren Streams: „iperf3 -c 10.6.0.1 -P 4 -t 20“. Der Parameter „-P 4“ öffnet 4 parallele Verbindungen und belastet die Leitung besser. Notiere die Durchschnittsgeschwindigkeit.
  3. Führe einen Test mit nur einem Stream durch: „iperf3 -c 10.6.0.1 -P 1 -t 20“. Beobachte das Verhalten ohne Aggregation.
  4. Schau CPU-Auslastung während des Tests: öffne ein weiteres Terminal mit „top“ oder „htop“. Die Cortex-A76 Kerne des Pi 5 (2,4 GHz) bewältigen mehrere hundert Mbit/s problemlos.
  5. Miss Internet-Geschwindigkeit über den Tunnel. Stelle iperf3-Server auf einem VPS bereit oder nutze eine externe Test-Host. Führ den Test mit „iperf3 -c SERVER -P 4 -t 20“ durch. Alternativ vergleiche speedtest-cli mit und ohne VPN, um den Verschlüsselungs- und Routing-Overhead zu sehen.
  6. Optimiere MTU. Führe „sudo ping -M do -s 1380 1.1.1.1“ aus. Wenn keine Fragmentierung auftritt, kannst du MTU=1420 setzen. Bei Problemen reduziere MTU in wg0-Konfig auf 1380 und starte das Interface neu.
  7. Einstellen der Queueing-Disziplin (qdisc) zur Reduktion von Bufferbloat. Nutze: „sudo tc qdisc replace dev eth0 root fq_codel“ und „sudo tc qdisc replace dev wg0 root fq_codel“. Das verbessert Latenz unter Last, z.B. bei Videokonferenzen.
  8. Wiederhole iperf3-Test. Vergleiche Ergebnisse vor und nach MTU- und qdisc-Anpassungen. Beobachte Stabilität, Jitter und Spitzenwerte.

Tipp: Für Stresstest nutze „-P 8“ und „-t 60“, um stabile Langzeitmessungen und mögliche Überhitzung aufzudecken.

Tipp: Aktiviere den performanten CPU-Governor: „sudo apt install -y cpufrequtils“ und „echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils && sudo systemctl restart cpufrequtils“. Das bringt 5–10% mehr Speed bei Lastspitzen.

✅ Überprüfung: Im LAN über VPN sollten hunderte Mbit/s erreicht werden, oft 700–900 Mbit/s bei mehreren Streams und passender MTU. Internet-Geschwindigkeit hängt vom Provider und dem entfernten Endpoint ab. Stabiles Handshake bei „wg show“, keine iperf3-Retries sind wichtige Indikatoren.

Erwartete Ergebnisse und reale Geschwindigkeit. Im LAN liegt WireGuard auf dem Raspberry Pi 5 meist an der Grenze des Gigabit-Ethernets und TCP-Stacks. Üblich sind 0,7–0,95 Gbit/s total bei UDP-Tests mit mehreren Streams und optimaler MTU. Internetgeschwindigkeiten sind meist durch Provider-Peering begrenzt. 300–600 Mbit/s über WireGuard sind normal, in Einzelfällen über 700 Mbit/s erreichbar. Bei deutlich geringeren Werten prüfe MTU, thermisches Throttling und CGNAT.

Mögliche Probleme und Lösungen. CPU läuft zu 100% auf einem Kern und Speed ist niedrig? Stelle sicher, dass iperf3 parallel läuft („-P“), und dass qdisc nicht die CPU belastet. Hoher Jitter und Verlust? Prüfe Kabel, Switch-Port und Netzwerkkarten-Offloading mit „sudo ethtool -K eth0 tx off rx off gso off gro off tso off“. Manchmal bringt es Vorteile, meistens sind Standardwerte aber passend.

Ergebnisüberprüfung

Checkliste: Was muss funktionieren? WireGuard-Interface wg0 ist aktiv und startet automatisch. Der Port 51820/UDP ist im Router weitergeleitet. Clients verbinden sich stabil und Handshake ist vorhanden. Internet ist über VPN erreichbar, DNS-Auflösung funktioniert. iperf3 zeigt erwartete Bandbreite. NAT mit nftables ist aktiv, ip_forward gesetzt. Logs sind frei von kritischen Fehlern.

Wie testen? Deaktiviere WLAN am Handy und aktiviere mobiles Netz. Starte den VPN-Tunnel und öffne Webseiten. Auf dem Server „wg show“ ausführen und letzte Handshake-Zeit prüfen. Mit „traceroute 1.1.1.1“ vom Client muss Hop 1 die 10.6.0.1 sein. Führe „iperf3 -c 10.6.0.1 -P 4 -t 20“ durch und miss die Geschwindigkeit. Anschließend „dig example.com“ zur DNS-Antwortzeit.

Kriterien für Erfolg. Keine Timeouts beim Webseitenladen, stabiler Handshake alle 20–30 Sekunden bei Traffic, Speed entspricht Kanal, keine intermittierenden Verbindungsabbrüche. Log-Ausgaben mit „sudo journalctl -u wg-quick@wg0 -b“ zeigen keine Warnungen oder Fehler.

Typische Fehler und Lösungen

  • Problem: Client verbindet nicht, kein Handshake. Ursache: Portweiterleitung fehlt oder CGNAT vorhanden. Lösung: Prüfe NAT-Regeln im Router, vergewissere dich, dass eine öffentliche IP vorhanden ist. Bei CGNAT: weißen IP anfordern oder VPS als Relay nutzen.
  • Problem: Handshake ist da, aber kein Internet. Ursache: IPv4-Forwarding nicht aktiviert oder kein MASQUERADE-Regel. Lösung: Prüfe „sysctl net.ipv4.ip_forward=1“, nftables-Regeln im Postrouting und starte wg0 neu.
  • Problem: Kein Zugriff auf das lokale Netzwerk. Ursache: Client-Routen sind nur 0.0.0.0/0 ohne LAN, oder Router-Firewall blockiert. Lösung: Füge LAN-Subnetz z.B. 192.168.1.0/24 in AllowedIPs ein und prüfe, dass keine Firewall die Kommunikation einschränkt.
  • Problem: Webseiten laden teilweise nicht oder Geschwindigkeit schwankt. Ursache: falsche MTU und Paketfragmentierung. Lösung: Teste PMTU mit „ping -M do“ und setze MTU auf 1380–1420 in wg0 und Client.
  • Problem: DNS-Auflösung über VPN funktioniert nicht. Ursache: Client hat falsche DNS-Einstellungen. Lösung: Setze „DNS = 1.1.1.1“ oder verwende lokalen Resolver, aktiviere systemd-resolved, und bei Bedarf „Block untunneled traffic“ in Client.
  • Problem: Geschwindigkeit deutlich unter Erwartungen. Ursache: nur Single-Thread-Test, CPU-Drosselung, langsame Provider-Leitung oder Überhitzung. Lösung: Verwende mehrere Streams („-P 4..8“), kühle den Pi gut, aktiviere Performance-Governor.
  • Problem: Tunnel startet nach Neustart nicht. Ursache: Dienst nicht aktiviert oder PostDown-Regeln falsch. Lösung: „sudo systemctl enable wg-quick@wg0“, prüfe Status mit „systemctl status wg-quick@wg0“, vereinfache PostDown und vermeide Flush ohne Neuaufbau der Regeln.

Erweiterte Funktionen

Fortgeschrittene Einstellungen

  • Split-Tunnel nach Domains. Du kannst bestimmte Firmen-Domains über VPN leiten und den restlichen Traffic direkt schicken. Das erfordert DNS-over-WG und policy-based routing am Client, da WireGuard keine native Domain-Filterung bietet.
  • Zugriff auf mehrere Subnetze. Füge in AllowedIPs mehrere Netzwerke hinzu, z.B. 192.168.1.0/24 und 192.168.50.0/24 für Haus mit mehreren VLANs. Auf dem Server müssen entsprechende Routen und Regeln in nftables ergänzt werden.
  • Client-Isolation. Standardmäßig routet WireGuard keinen Traffic zwischen Clients. Willst du stärkere Isolierung, lasse keine fremden Routen zu und blockiere Client-zu-Client Verkehr in nftables.
  • Zugriff über Domainnamen. Richte DDNS im Router ein und nutze das DNS im Client-Endpunkt, so musst du bei dynamischer IP nicht ständig Configs anpassen. Achte darauf, dass der DDNS-Eintrag regelmäßig aktualisiert wird.
  • Logging und Monitoring. Installiere Netdata oder Prometheus node-exporter, um Verzögerungen, Traffic und Auslastung zu überwachen. Für den täglichen Gebrauch reicht es oft, „wg show“ und „nft list ruleset“ regelmäßig anzuschauen.

Optimierung

  • MTU-Tuning bei fragmentierungsanfälligen Netzen mit Startwert MTU=1280 an wg0 und Client, dann schrittweise erhöhe bis 1420, wenn keine Verluste auftreten.
  • FQ-CoDel auf WAN- und WG-Schnittstellen einsetzen, um Bufferbloat zu reduzieren. Besonders bei Video und Streaming spürbar.
  • Parallele Streams nutzen. Lade-Manager und Download-Tools sowie iperf3 mit „-P 4..8“ helfen, die verfügbare Bandbreite effektiv zu nutzen.

Weitere Tipps

  • Zweifaktorzugang sichern. Bewahre Client-Configs sicher in einem Passwortmanager auf und sperre Geräte bei Verlust sofort, indem du den Client-Schlüssel aus wg0.conf entfernst und das Interface neu startest.
  • Backup. Sichere „/etc/wireguard“ und „/etc/nftables.conf“ in einem verschlüsselten Archiv. Habe eine Ersatz-microSD mit vorbereitetem System und teste das Backup regelmäßig auf einem Ersatzgerät oder temporär auf demselben Pi.

Tipp: Für Leser, die sofort einen persönlichen VPN ohne Terminal wollen, lohnt sich ein fertiges Angebot von vpn.how. Dabei bekommt man einen dedizierten VPN-Server mit eigenem IP (nicht shared), Unterstützung von WireGuard, OpenVPN, IKEv2, L2TP, SSTP – du wählst das Protokoll passend zur Aufgabe. Verfügbar in Moskau, St. Petersburg, Amsterdam, Frankfurt, London, New York, San Jose, Chicago, Singapur, Sydney, Madrid, Helsinki, Stockholm, Warschau, Kopenhagen und Stavanger. Akzeptiert werden russische Karten (inkl. Tinkoff und Ozon), SBP, USDT und BTC. Preise starten ab 490 ₽ pro Tag und 2490 ₽ pro Monat mit Rabatten bei längeren Laufzeiten, automatische Aktivierung 5 Min nach Zahlung, keine Logs. Ideal, wenn keine Zeit für Hardware, Backups und Monitoring bleibt: DIY-Server am Raspberry Pi bietet Flexibilität, aber braucht Zeit für Einrichtung und Pflege.

FAQ

Frage: Wie erkenne ich, ob mein Provider CGNAT nutzt und ich eine öffentliche IP brauche? Antwort: Vergleiche die öffentliche IP im Router-Admin mit der auf IP-Check-Webseiten. Gibt der Router eine private IP aus (100.64.0.0/10 oder 10.0.0.0/8), ist CGNAT aktiv. Dann funktioniert keine Portweiterleitung von außen.

Frage: Kann ich einen anderen Port als 51820 verwenden? Antwort: Ja, ändere „ListenPort“ in der wg0.conf und die Portweiterleitung im Router entsprechend. Manche Provider filtern UDP und ein anderer Port kann helfen.

Frage: Wie füge ich mehrere Clients hinzu? Antwort: Generiere für jeden Client neue Schlüsselpaare, weise eindeutige Adressen 10.6.0.X/32 zu, füge jeweils einen [Peer] in wg0.conf hinzu und gib jedem Client die eigene Config. Vermeide gleiche Schlüssel auf mehreren Geräten.

Frage: Was, wenn ich meinen privaten Server-Schlüssel vergessen habe? Antwort: Erstelle neue Schlüssel, aktualisiere wg0.conf und gib den Clients den neuen Server-Public-Key. Ändere auch Endpunkt in Client-Konfigurationen, wenn IP oder Port sich ändern.

Frage: Wie verhindere ich, dass Clients Zugriff auf mein Heimnetzwerk haben und nur Internet nutzen? Antwort: Standardmäßig routet WireGuard kein LAN. Vermeide statische Routen zum LAN im Server und entferne LAN-Subnetze aus AllowedIPs der Clients.

Frage: Braucht WireGuard Zertifikate wie OpenVPN? Antwort: Nein, WireGuard setzt auf einfache und schnelle Kryptographie mit Schlüssel-Paaren, keine Zertifikate nötig. Das macht es schnell und unkompliziert.

Frage: Wie speichere ich Konfigurationsdateien sicher? Antwort: Setze Dateirechte auf 600, sichere Backups in verschlüsselten Archiven, versende Private Keys nie unverschlüsselt und gib Clients Ihre Dateien via sichere Messenger oder QR-Codes vor Ort.

Frage: Läuft WireGuard nur bei Client-Verbindung? Antwort: Ja, WireGuard hält ohne Traffic keine aktive Verbindung, aber das Interface wg0 muss laufen und Clients initialisieren Handshakes bei Bedarf automatisch.

Frage: Wie konfigurieren, dass manche Clients kompletten Traffic über VPN senden, andere nur auf mein Heimnetz zugreifen? Antwort: Einstellungen in den Client-Konfigurationen: volle Clients mit „AllowedIPs = 0.0.0.0/0, ::/0“, LAN-only mit „AllowedIPs = 10.6.0.0/24, 192.168.1.0/24“. Serverseitig ist keine Änderung nötig.

Frage: Warum ist iperf3 schneller als echte Browsergeschwindigkeit? Antwort: iperf3 überträgt große Datenströme mit minimalem Overhead, Browser sind durch TCP-Handshakes, TLS, parallele Requests und Serverregeln limitiert. Das ist normal, betrachte Gesamtdurchsatz und Langzeitmessungen.

Fazit

Zusammenfassung. Du hast den Raspberry Pi 5 vorbereitet, aktuelle 64-Bit Raspberry Pi OS installiert, SSH und statische IP aktiviert. WireGuard und Tools sind installiert, Schlüssel generiert, wg0 konfiguriert und IP-Forwarding aktiviert. NAT via nftables und Portweiterleitung im Router eingerichtet. Clients hinzugefügt, Handy und Laptop verbunden, Tunnel getestet und iperf3-Belastungstests durchgeführt. MTU und qdisc optimiert, stabile Geschwindigkeit und geringe Latenzen erreicht. Häufige Fehler und Backup-Prozeduren kennst du jetzt.

Wie geht es weiter? Füge weitere Clients hinzu, ordne das Adressraum-Management, implementiere Monitoring und Backups. Erweitere dein Setup auf mehrere Subnetze und Split-Tunnel. Halte System und Logs regelmäßig aktuell.

Wie entwickelst du dich weiter? Lerne Automatisierung mit Ansible für Konfigurationsausrollung, Policy Routing und Traffic-Markierung für flexible Splits, experimentiere mit Multihoming und Backup-Kanälen. Untersuche verschiedene qdisc- und MTU-Einstellungen für dein Netzwerk. Mit diesen Fähigkeiten baust du sichere und schnelle VPN-Lösungen nicht nur für zu Hause, sondern auch kleine Büros.

Tipp: Führe deine Konfigurationen zentral, z.B. in einem privaten Repository, und pflege aussagekräftige Kommentare. In sechs Monaten wirst du dir für klare Dokumentation dankbar sein.

Tipp: Achte auf ausreichende Kühlung des Raspberry Pi 5. Dauerhafte Belastung durch Verschlüsselung und Routing erwärmt das SoC. Für stabile 800+ Mbit/s ist gutes Thermomanagement wichtig, um Throttling zu vermeiden.

Damit ist dein persönlicher VPN-Server auf dem Raspberry Pi 5 startklar. Du weißt, wie man ihn verwaltet, testet und die maximale Geschwindigkeit herausholt. Gute Arbeit!

Roman Melnikov

Roman Melnikov

Technical Writer and System Administrator

Technical writer and DevOps engineer with 9 years of experience. Created over 50 detailed guides on system configuration and administration. His instructions helped thousands of professionals successfully solve technical tasks. Popular author on Habr and YouTube.
Bauman Moscow State Technical University. Information Systems and Technologies
Technical Documentation DevOps System Administration Linux Docker and Kubernetes CI/CD Infrastructure Automation Cloud Technologies System Monitoring Bash and Python Scripting

Diesen Artikel teilen: