PiVPN Setup Guide
Personal Project
Secure remote access with WireGuard, static IPs, dynamic DNS, and router forwarding.
Highlights
- Step-by-step WireGuard configuration for optimal security.
- Dynamic DNS integration for consistent access.
- Router port forwarding best practices.
Guide
📌 1. Statische IP-Adresse für den Raspberry Pi setzen
Warum?
Damit der Raspberry Pi immer unter derselben IP-Adresse erreichbar ist, was besonders nützlich für SSH-Zugriffe und Port-Forwarding ist.
Statische IP-Adresse konfigurieren
-
Öffne die Konfigurationsdatei:
bashsudo nano /etc/dhcpcd.conf -
Füge folgende Zeilen am Ende hinzu (ersetze
<yourIP>mit der gewünschten IP-Adresse):interface eth0 static ip_address=<yourIP>/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 -
Datei speichern und Raspberry Pi neu starten:
bashsudo reboot
🛠️ 2. Installation von PiVPN (WireGuard)
-
Installationsbefehl ausführen:
bashcurl -L https://install.pivpn.io | bash -
Während der Installation:
- Unattended Updates aktivieren (automatische Sicherheitsupdates)
- UDP als Protokoll wählen (besser für VPNs geeignet)
- Einen eigenen Port setzen (z. B. 48675, vermeide Standardports für mehr Sicherheit)
- WireGuard als VPN-Typ wählen
- Dynamische DNS (DDNS) verwenden, um immer die aktuelle öffentliche IP zu haben → FreeDNS (afraid.org) oder einen anderen DDNS-Anbieter verwenden
🌍 3. Dynamische DNS (DDNS) mit ddclient einrichten
Warum?
Wenn dein Internetanbieter dir keine statische IP gibt, ändert sich deine öffentliche IP regelmäßig. DDNS sorgt dafür, dass deine Domain (z. B. michas-vpn.crabdance.com) immer auf die aktuelle IP zeigt.
ddclient installieren:
sudo apt install ddclientddclient konfigurieren:
-
Öffne die Konfigurationsdatei:
bashsudo nano /etc/ddclient.conf -
Beispielkonfiguration für FreeDNS (afraid.org):
daemon=5m timeout=10 syslog=no pid=/var/run/ddclient.pid ssl=yes use=if, if=eth0 server=freedns.afraid.org protocol=freedns login=<your-username> password=<your-password> your-subdomain.crabdance.com -
DDNS-Dienst als Daemon ausführen:
bashsudo nano /etc/default/ddclientStelle sicher, dass folgende Zeile gesetzt ist:
run_daemon="true" daemon_interval="300" -
Dienst testen:
bashsudo ddclient -daemon=0 -debug -verbose -noquiet -
Dienst neustarten und Status prüfen:
bashsudo systemctl restart ddclient sudo systemctl status ddclient -
Überprüfen, ob die Domain richtig aktualisiert wird:
bashnslookup your-subdomain.crabdance.com -
Dienst beim Systemstart aktivieren:
bashsudo systemctl enable ddclient
🔄 4. Port-Forwarding im Router einrichten
Damit dein VPN von außen erreichbar ist, musst du eine Portweiterleitung auf deinem Router einrichten.
- Logge dich in die Router-Konfigurationsseite ein.
- Finde die Einstellungen für Port-Forwarding.
- Erstelle eine neue Regel:
- Gerät: Raspberry Pi
- Protokoll: UDP
- Externer Port: 48675 (oder dein gewählter Port)
- Interner Port: 48675
- Interne IP:
<yourIP>(die statische IP deines Raspberry Pi)
- Speichern und Router ggf. neu starten.
📱 5. VPN-Nutzer erstellen & Verbindung testen
Einen neuen Nutzer anlegen:
pivpn addDies erstellt ein neues Schlüsselpaar für den Nutzer.
Verbindung auf dem Smartphone einrichten:
-
Installiere die WireGuard-App (iOS/Android).
-
QR-Code für die Verbindung generieren:
bashpivpn -qr -
QR-Code in der WireGuard-App scannen → Verbindung ist eingerichtet!
Alternativ für PC:
- Die
.conf-Datei aus/etc/wireguard/manuell auf den Client übertragen.
🛠 6. Problembehandlung
Diagnose-Befehle:
pivpn -d # Detaillierte Diagnose
pivpn -c # Aktive Clients anzeigenProblem: VPN nur für IPv4, aber Vodafone erlaubt nur IPv6
-
DynDNS-Adresse anpassen:
- Falls dein DynDNS-Anbieter
AAAA-Records (IPv6) unterstützt:- Erstelle einen neuen
AAAA-Eintrag mit deiner öffentlichen IPv6-Adresse.
- Erstelle einen neuen
- Falls dein DynDNS-Anbieter
-
ddclientfür IPv6 konfigurieren:bashsudo nano /etc/ddclient.confFüge eine zweite Zeile für IPv6 hinzu:
use=web, web=checkip6.spdyn.de/Neustart:
bashsudo systemctl restart ddclient sudo systemctl status ddclient -
IPv6-Unterstützung für WireGuard aktivieren:
bashsudo nano /etc/wireguard/wg0.confFalls nicht vorhanden, hinzufügen:
Address = 10.8.0.2/24, fd11:5ee:bad:c0de::2/64Neustart:
bashsudo systemctl restart wg-quick@wg0