LW IT Solutions
« Blog-Übersicht /Raspberry Pi/Tutorials / Raspberry Pi als gehärtetes WireGuard-VPN-Gateway mit Split-Tunneling
Diesen Artikel in anderen Sprachen lesen:

Raspberry Pi als gehärtetes WireGuard-VPN-Gateway mit Split-Tunneling

Teil 6 von 6 der Reihe Homelab auf dem Raspberry Pi

Raspberry Pi als gehärtetes WireGuard-VPN-Gateway mit Split-Tunneling
Inhalt
  1. Architektur-Überblick: WireGuard-Kernel-Routing und Split-Tunneling
  2. Schritt-für-Schritt-Implementierungsanleitung
  3. Zusammenfassung und resultierender Mehrwert
  4. Fragen und Antworten
  5. Quellen

Architektur-Überblick: WireGuard-Kernel-Routing und Split-Tunneling

Klassische VPN-Protokolle wie OpenVPN oder IPsec erfordern rechenintensive Kontextwechsel im Userspace und komplexe kryptografische Handshakes, was auf Einplatinencomputern mit ARM-Architektur wie dem Raspberry Pi zu hohem CPU-Overhead und Latenzen führt. WireGuard operiert hingegen direkt im Linux-Kernel-Raum und nutzt moderne Kryptografie (ChaCha20, Poly1305, Curve25519), wodurch Datendurchsätze von über 800 MBit/s an Gigabit-Ethernet-Schnittstellen bei minimaler Prozessorlast erreicht werden.

In einer Split-Tunneling-Architektur fungiert der Raspberry Pi als gehärtetes Sicherheits-Gateway. Anstatt den gesamten Internetverkehr eines Clients durch das Heimnetzwerk zu leiten – was die Bandbreite mobiler Verbindungen drosselt –, leitet der Tunnel selektiv nur definierte Ziel-Subnetze (z. B. interne Home-Lab-Ressourcen unter 192.168.10.0/24) über die verschlüsselte WireGuard-Schnittstelle. Umgekehrt kann das Gateway auch konfiguriert werden, um bestimmte lokale LAN-Geräte gezielt über einen externen VPN-Anbieter zu verschlüsseln, während der restliche LAN-Verkehr unberührt bleibt.

Split-Tunnel-Routing vom WireGuard-Client über das Raspberry-Pi-Gateway ins Heimnetz, mit direktem Internetverkehr am Tunnel vorbei
Split-Tunneling in der Routing-Tabelle: Nur die beiden unter AllowedIPs genannten Netze laufen über wg0. Das Gateway leitet sie auf Kernel-Ebene weiter und maskiert sie auf eth0; der übrige Verkehr verlässt den Client direkt.

Schritt-für-Schritt-Implementierungsanleitung

Schritt 1: Aktivierung des Linux-Kernel-IP-Forwardings

Um die Paketweiterleitung zwischen der physischen Netzwerkschnittstelle (eth0) und dem virtuellen WireGuard-Interface (wg0) zu ermöglichen, muss das IPv4- und IPv6-Forwarding dauerhaft im Linux-Kernel aktiviert werden:

# /etc/sysctl.d/99-wireguard-forwarding.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

Übernahme der geänderten Kernel-Parameter im laufenden System ohne Neustart:

sysctl --system

Schritt 2: Kryptografische Schlüsselerzeugung und Paketinstallation

Installation der WireGuard-Kernel-Werkzeuge sowie Generierung der privaten und öffentlichen Schlüsselpaare mit restriktiven Dateirechten:

apt update && apt install -y wireguard wireguard-tools nftables
mkdir -p /etc/wireguard && cd /etc/wireguard
chmod 700 /etc/wireguard
wg genkey | tee server_private.key | wg pubkey > server_public.key
chmod 600 server_private.key

Schritt 3: Konfiguration der gehärteten Server-Schnittstelle (wg0.conf)

Die zentrale Konfigurationsdatei definiert den Server-Port, die Subnetz-Zuweisung und integrierte Firewall-Routingregeln. Der Standard-UDP-Port von WireGuard (51820) wird zusammen mit strikten nftables-Masquerading-Regeln konfiguriert:

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.100.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>

# Automatisches Firewall-Masquerading via nftables
PostUp = nft add table ip wireguard; nft add chain ip wireguard nat { type nat hook postrouting priority 100\; policy accept\; }; nft add rule ip wireguard nat oifname "eth0" masquerade
PostDown = nft delete table ip wireguard

# Beispiel-Konfiguration für einen Split-Tunnel-Client
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.100.0.2/32

Schritt 4: Client-seitiges Split-Tunnel-Routing konfigurieren

Auf dem externen Client-Gerät steuert die Direktive AllowedIPs, ob die Verbindung als Full-Tunnel oder Split-Tunnel arbeitet. Durch die Definition von AllowedIPs = 192.168.10.0/24, 10.100.0.0/24 werden ausschließlich Datenpakete für das Heimnetzwerk durch den verschlüsselten Tunnel geroutet, während allgemeiner Webverkehr auf dem Client direkt über die eigene Internetverbindung erfolgt:

# Client-seitige Konfiguration (Split-Tunneling-Modus)
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.100.0.2/24
DNS = 192.168.10.1

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = vpn.lukaswojcik.com:51820
AllowedIPs = 192.168.10.0/24, 10.100.0.0/24
PersistentKeepalive = 25

Schritt 5: Qualitätssicherung und Durchsatz-Validierung

Nach dem Start des systemd-Dienstes mittels systemctl enable --now wg-quick@wg0 muss eine Überprüfung der Infrastruktur anhand von drei Diagnose-Schritten erfolgen:

  1. Audit des Handshakes und Schlüsselaustauschs: Ausführung von wg show wg0 im Terminal des Raspberry Pi, um zu bestätigen, dass aktive Peers aktuelle Handshake-Zeitstempel und bidirektionale Datentransfers aufweisen.
  2. Verifikation der Routing-Tabelle: Kontrolle der Client-Routingtabellen (z. B. ip route show), um sicherzustellen, dass das Standard-Gateway unberührt bleibt, während statische Routen für 192.168.10.0/24 strikt auf das Interface wg0 verweisen.
  3. Bandbreiten- und Latenz-Benchmark: Durchführung eines internen iperf3-Durchsatztests zwischen dem externen Client und einem Server im Heimnetzwerk zur Prüfung, ob die Übertragungsrate ohne Paketfragmentierung die Leitungskapazität ausschöpft.

Zusammenfassung und resultierender Mehrwert

Was sich damit erreichen lässt: Der Aufbau eines gehärteten, im Linux-Kernel operierenden WireGuard-VPN-Gateways auf einem Raspberry Pi mit selektivem Split-Tunneling und automatisiertem Firewall-Masquerading.

Resultierender Mehrwert:

  • Verzögerungsfreier Fernzugriff: Interne Home-Lab-Dienste, Dashboards und Speicher-Knoten sind von unterwegs sicher erreichbar, ohne dass interne Ports am Router freigegeben werden müssen.
  • Optimierte Bandbreiten-Nutzung: Split-Tunneling verhindert, dass externer Streaming- oder Webverkehr unnötig durch die Upload-Leitung des Heimanschlusses fließt, wodurch die maximale Download-Geschwindigkeit auf den Clients erhalten bleibt.
  • Minimaler Hardware-Ressourcenverbrauch: Die Ausführung auf Kernel-Ebene benötigt je übertragenem Gigabyte deutlich weniger Rechenzeit als Userspace-Protokolle wie OpenVPN, sodass spürbar mehr Systemressourcen für containerisierte Anwendungen frei bleiben.

Fragen und Antworten

Macht ein anderer UDP-Port als 51820 das Gateway für Scans unsichtbarer?

Kaum. WireGuard beantwortet kein Paket, das keinen gültigen Handshake mit einem bekannten Schlüssel trägt; ein Portscan kann den Port deshalb nicht von einem gefilterten unterscheiden, ganz gleich, welche Nummer er trägt. Die Härtung liegt im Schweigen des Protokolls, nicht in der Portnummer, und 51820 ist ohnehin der übliche Standardport von WireGuard.

Kann ein Client den Split-Tunnel umgehen und seinen gesamten Verkehr über das Heimnetz schicken?

Ja, denn Split-Tunneling ist eine Entscheidung des Clients. AllowedIPs auf dem Client legt nur fest, welche Ziele er in den Tunnel schickt. Trägt er dort 0.0.0.0/0 ein, geht sein gesamter Verkehr zum Raspberry Pi, und der leitet ihn weiter: Das Forwarding ist aktiv, und die Masquerading-Regel gilt für alles, was eth0 verlässt, also auch für den Weg ins Internet.

Auf dem Gateway schränkt die Konfiguration nur die Absenderadresse ein: AllowedIPs = 10.100.0.2/32 in der Server-Datei bedeutet, dass von diesem Peer nur Pakete mit dieser Quelladresse angenommen werden. Über die Ziele sagt diese Zeile nichts.

Soll das Gateway den Split-Tunnel erzwingen, ist eine Filterkette am Hook forward nötig: Verkehr von wg0 ins Heimnetz 192.168.10.0/24 und Antworten auf bestehende Verbindungen erlauben, alles Übrige von wg0 verwerfen. Eine Tabelle der Familie inet deckt dabei IPv4 und IPv6 in einer Kette ab.

Was geschieht mit der Namensauflösung auf dem Client, wenn der Tunnel ausfällt?

Sie fällt mit ihm aus. Mit DNS = 192.168.10.1 fragt der Client einen Server im Heimnetz, und diese Adresse liegt in den AllowedIPs. Jede Namensauflösung läuft also durch den Tunnel, auch die für Websites, deren Verkehr sonst direkt ins Internet geht. Ist das Gateway nicht erreichbar, fließt der allgemeine Verkehr zwar weiter direkt, aber kein Name wird mehr aufgelöst, und für die Person am Gerät sieht das aus wie ein vollständiger Ausfall.

Eine zweite Randbedingung betrifft das Netz, in dem der Client gerade steckt. Nutzt ein Hotel- oder Gastnetz selbst 192.168.10.0/24, konkurrieren zwei Routen um dieselben Adressen, und je nach Routing erreicht der Client entweder das Heimnetz oder das lokale Gateway nicht. Ein weniger verbreitetes Subnetz für das Heimnetz senkt dieses Risiko.

Homelab auf dem Raspberry Pi

  1. Raspberry Pi 4 und 5: Vom SSD-Laufwerk booten über den Bootloader
  2. Unterbrechungsfreie Stromversorgung (USV) für Raspberry Pi 4 und 5: Die Top 5 Lösungen für anspruchsvolle Setups
  3. Lokales CI/CD für den Raspberry Pi: Automatisierung von Docker-Compose-Deployments
  4. Autonomer Docker-Compose-Heimserver mit Traefik, SSL und Watchtower
  5. Verzögerungsfreier lokaler Medienserver: Jellyfin auf Raspberry Pi 5 mit Hardware-Beschleunigung
  6. Raspberry Pi als gehärtetes WireGuard-VPN-Gateway mit Split-Tunneling
Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Kommentar schreiben

Erfahrungen mit anderen Modellen und Rückfragen zum Aufbau sind hier willkommen.

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.

Artikel & Kategorien

CCTV

Diese Rubrik per RSS verfolgen

Cloud & AI

Alle 16 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Data Privacy

Alle 19 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Analytics

Alle 58 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Marketing

Alle 37 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

IT & Networks

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Music Production

Alle 17 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Raspberry Pi

Diese Rubrik per RSS verfolgen

SaaS & Internet Earning

Diese Rubrik per RSS verfolgen

Smart Home

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Web Entwicklung

Alle 11 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

WordPress-Plugins & Tricks

Alle 14 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen