Mit einem eigenen WireGuard VPN-Server auf dem Raspberry Pi könnt ihr euch von überall sicher ins Heimnetz einloggen – egal ob ihr unterwegs seid oder ein öffentliches WLAN nutzt. WireGuard ist dabei schneller und einfacher einzurichten als OpenVPN und läuft auf dem Raspberry Pi 4 und Pi 5 problemlos unter Raspberry Pi OS Bookworm.
In diesem Tutorial zeige ich euch zwei Methoden: die manuelle Einrichtung (für alle, die verstehen wollen was passiert) und PiVPN als schnelle Alternative für Einsteiger.
Was ihr braucht
- Raspberry Pi 4 oder 5 mit Raspberry Pi OS Bookworm
- Stabile Internetverbindung mit Router-Zugang (für Portfreigabe)
- Statische lokale IP für den Pi (per DHCP-Reservierung im Router)
- Optional: Gehäuse mit Lüfter für Dauerbetrieb
Methode 1: WireGuard manuell einrichten
Schritt 1: WireGuard installieren
WireGuard ist seit Bookworm direkt in den Standard-Repos enthalten – kein PPA oder DKMS nötig:
|
1 |
sudo apt update && sudo apt install wireguard wireguard-tools qrencode -y |
qrencode brauchen wir später für den QR-Code zur einfachen Smartphone-Einrichtung.
Schritt 2: Schlüssel erzeugen
WireGuard arbeitet mit öffentlichen und privaten Schlüsseln – ähnlich wie SSH. Zuerst erzeugen wir die Server-Schlüssel:
|
1 2 3 |
cd /etc/wireguard umask 077 wg genkey | tee server_private.key | wg pubkey > server_public.key |
Den Inhalt der Dateien könnt ihr so ausgeben:
|
1 2 |
cat server_private.key # geheim halten! cat server_public.key # wird an Clients weitergegeben |
Für jeden Client (z.B. Smartphone, Laptop) brauchen wir ebenfalls ein Schlüsselpaar:
|
1 |
wg genkey | tee client1_private.key | wg pubkey > client1_public.key |
Schritt 3: Server-Konfiguration erstellen
Jetzt erstellen wir die WireGuard-Konfigurationsdatei. Zuerst prüfen wir den Namen unseres Netzwerk-Interfaces (meistens eth0 beim Pi):
|
1 |
ip -o link show | grep -v lo |
Dann die Konfiguration anlegen:
|
1 |
sudo nano /etc/wireguard/wg0.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[Interface] PrivateKey = EUER_SERVER_PRIVATE_KEY Address = 10.0.0.1/24 ListenPort = 51820 # NAT-Regeln (eth0 ggf. durch euer Interface ersetzen) PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # Client 1: Smartphone [Peer] PublicKey = CLIENT1_PUBLIC_KEY AllowedIPs = 10.0.0.2/32 # Client 2: Laptop [Peer] PublicKey = CLIENT2_PUBLIC_KEY AllowedIPs = 10.0.0.3/32 |
Datei-Berechtigungen einschränken:
|
1 |
sudo chmod 600 /etc/wireguard/wg0.conf |
Schritt 4: IP-Forwarding aktivieren
Damit der Pi den VPN-Traffic ins Internet weiterleitet, muss IP-Forwarding aktiviert werden:
|
1 2 3 |
# Dauerhaft aktivieren: echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p |
Schritt 5: WireGuard starten
|
1 2 3 |
sudo systemctl enable wg-quick@wg0 sudo systemctl start wg-quick@wg0 sudo systemctl status wg-quick@wg0 |
Mit sudo wg show könnt ihr jederzeit den Status des Tunnels prüfen.
Schritt 6: Client-Konfiguration erstellen
Für jeden Client legen wir eine eigene Konfigurationsdatei an:
|
1 |
sudo nano /etc/wireguard/client1.conf |
|
1 2 3 4 5 6 7 8 9 10 11 |
[Interface] PrivateKey = CLIENT1_PRIVATE_KEY Address = 10.0.0.2/24 DNS = 1.1.1.1 [Peer] PublicKey = SERVER_PUBLIC_KEY Endpoint = eure-ddns-adresse.duckdns.org:51820 # Gesamten Traffic durch VPN leiten: AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25 |
PersistentKeepalive = 25 ist wichtig für Smartphones hinter NAT – hält die Verbindung aktiv.
Schritt 7: QR-Code für Smartphone generieren
Die einfachste Art, WireGuard auf einem Smartphone einzurichten, ist per QR-Code. Einfach die WireGuard-App installieren und scannen:
|
1 |
sudo qrencode -t ansiutf8 < /etc/wireguard/client1.conf |
Portfreigabe im Router einrichten
Damit Verbindungen von außen den Pi erreichen, muss UDP-Port 51820 im Router auf den Pi weitergeleitet werden.
Fritz!Box: Internet → Freigaben → Portfreigaben → Neue Portfreigabe → Protokoll UDP, Port 51820, Ziel-IP des Pi
Vergebt dem Pi vorher eine feste lokale IP: Heimnetz → Netzwerk → [Pi] → Immer die gleiche IPv4-Adresse zuweisen.
Dynamische IP mit DuckDNS lösen
Da sich die öffentliche IP eurer Fritzbox regelmäßig ändert, braucht ihr einen DDNS-Dienst. DuckDNS ist kostenlos und einfach einzurichten:
- Kostenlosen Account anlegen und Subdomain erstellen (z.B.
meinpi.duckdns.org) - Token aus dem Dashboard kopieren
|
1 2 3 4 5 6 7 8 9 10 |
mkdir -p ~/duckdns cat > ~/duckdns/duck.sh << 'EOF' echo url="https://www.duckdns.org/update?domains=EURE-SUBDOMAIN&token=EUER-TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K - EOF chmod 700 ~/duckdns/duck.sh # Alle 5 Minuten aktualisieren: crontab -e # Zeile hinzufügen: # */5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1 |
Fritz!Box-Nutzer: Alternativ funktioniert auch MyFRITZ! direkt über „Internet → MyFRITZ!-Konto“ – keine extra Software nötig.
Methode 2: PiVPN – schnell und einfach
Wer weniger konfigurieren möchte, kann PiVPN verwenden. Das Tool richtet alles automatisch ein und ist aktiv gepflegt (Stand: September 2025):
|
1 |
curl -L https://install.pivpn.io | bash |
Der interaktive Wizard fragt nach Port, DNS-Server und eurer DDNS-Adresse. Danach könnt ihr mit wenigen Befehlen Clients verwalten:
|
1 2 3 4 5 6 7 8 9 10 11 |
# Neuen Client hinzufügen: pivpn add # QR-Code anzeigen: pivpn -qr clientname # Verbindungen anzeigen: pivpn -c # Client entfernen: pivpn -r clientname |
UFW Firewall konfigurieren
Falls UFW aktiv ist, müssen ein paar zusätzliche Einstellungen vorgenommen werden:
|
1 2 |
sudo ufw allow 51820/udp sudo ufw allow 22/tcp |
Außerdem muss UFW das Weiterleiten von Paketen erlauben:
|
1 2 3 4 |
sudo nano /etc/default/ufw # Ändern: DEFAULT_FORWARD_POLICY="DROP" → DEFAULT_FORWARD_POLICY="ACCEPT" sudo ufw reload |
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| Client verbindet, kein Internet | IP-Forwarding nicht aktiv | sysctl net.ipv4.ip_forward prüfen |
| Handshake kommt nicht zustande | Port nicht freigegeben oder Firewall blockt | Router-Portfreigabe + UFW prüfen |
wg0 already exists |
Interface noch aktiv | sudo wg-quick down wg0 |
| DNS-Leaks auf Smartphone | DNS nicht in Client-Config gesetzt | DNS = 1.1.1.1 in [Interface] ergänzen |
| PostUp schlägt fehl | Interface-Name stimmt nicht (nicht eth0) | ip link show → richtigen Namen eintragen |
Mit einem eigenen WireGuard VPN seid ihr von überall sicher im Heimnetz – besonders praktisch wenn ihr Pi-hole, Home Assistant oder Nextcloud nutzt und von unterwegs darauf zugreifen wollt. Viel Spaß beim Einrichten!
💡 GitHub: Die WireGuard Konfigurationsdateien (wg0.conf, Client-Template) zu diesem Tutorial findet ihr im raspberry.tips GitHub Repository.
