Back to projects
Home Server / Networking

PiVPN Setup Guide

Personal Project

Secure remote access with WireGuard, static IPs, dynamic DNS, and router forwarding.

Year2024
RoleAuthor
FocusHome Server / Networking
Impact: Simplified VPN setup for secure remote access to home network resources.

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

  1. Öffne die Konfigurationsdatei:

    bash
    sudo nano /etc/dhcpcd.conf
  2. 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
  3. Datei speichern und Raspberry Pi neu starten:

    bash
    sudo reboot

🛠️ 2. Installation von PiVPN (WireGuard)

  1. Installationsbefehl ausführen:

    bash
    curl -L https://install.pivpn.io | bash
  2. 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:

bash
sudo apt install ddclient

ddclient konfigurieren:

  1. Öffne die Konfigurationsdatei:

    bash
    sudo nano /etc/ddclient.conf
  2. 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
  3. DDNS-Dienst als Daemon ausführen:

    bash
    sudo nano /etc/default/ddclient

    Stelle sicher, dass folgende Zeile gesetzt ist:

    run_daemon="true" daemon_interval="300"
  4. Dienst testen:

    bash
    sudo ddclient -daemon=0 -debug -verbose -noquiet
  5. Dienst neustarten und Status prüfen:

    bash
    sudo systemctl restart ddclient
    sudo systemctl status ddclient
  6. Überprüfen, ob die Domain richtig aktualisiert wird:

    bash
    nslookup your-subdomain.crabdance.com
  7. Dienst beim Systemstart aktivieren:

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

  1. Logge dich in die Router-Konfigurationsseite ein.
  2. Finde die Einstellungen für Port-Forwarding.
  3. 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)
  4. Speichern und Router ggf. neu starten.

📱 5. VPN-Nutzer erstellen & Verbindung testen

Einen neuen Nutzer anlegen:

bash
pivpn add

Dies erstellt ein neues Schlüsselpaar für den Nutzer.

Verbindung auf dem Smartphone einrichten:

  1. Installiere die WireGuard-App (iOS/Android).

  2. QR-Code für die Verbindung generieren:

    bash
    pivpn -qr
  3. 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:

bash
pivpn -d  # Detaillierte Diagnose
pivpn -c  # Aktive Clients anzeigen

Problem: VPN nur für IPv4, aber Vodafone erlaubt nur IPv6

  1. DynDNS-Adresse anpassen:

    • Falls dein DynDNS-Anbieter AAAA-Records (IPv6) unterstützt:
      • Erstelle einen neuen AAAA-Eintrag mit deiner öffentlichen IPv6-Adresse.
  2. ddclient für IPv6 konfigurieren:

    bash
    sudo nano /etc/ddclient.conf

    Füge eine zweite Zeile für IPv6 hinzu:

    use=web, web=checkip6.spdyn.de/

    Neustart:

    bash
    sudo systemctl restart ddclient
    sudo systemctl status ddclient
  3. IPv6-Unterstützung für WireGuard aktivieren:

    bash
    sudo nano /etc/wireguard/wg0.conf

    Falls nicht vorhanden, hinzufügen:

    Address = 10.8.0.2/24, fd11:5ee:bad:c0de::2/64

    Neustart:

    bash
    sudo systemctl restart wg-quick@wg0
Contact meBack to projects
PiVPN Setup Guide | Michael Kick