WireGuard auf pfSense: Dein sicherer VPN-Zugang von unterwegs
Na, du alter Fuchs! Du kennst das bestimmt: Man ist unterwegs, braucht mal schnell Zugriff auf den Home Assistant, die Proxmox-VM oder einfach nur eine sichere Verbindung ins eigene Heimnetz, ohne sich durch irgendwelche unsicheren WLANs zu quälen. Für mich ist ein VPN schon lange kein Luxus mehr, sondern essenzieller Bestandteil meines Heimlabors. Und wenn es um VPNs geht, setze ich seit geraumer Zeit auf WireGuard – besonders in Kombination mit pfSense.
Warum WireGuard? Ganz einfach: Es ist schlank, schnell und im Vergleich zu OpenVPN deutlich einfacher einzurichten. Kein Zertifikats-Overkill, keine Performance-Einbrüche, die man sonst manchmal spürt. Es ist die perfekte Wahl, um von deinem Smartphone oder Laptop aus sicher und performant auf dein Netzwerk zuzugreifen. In diesem Guide nehme ich dich an die Hand und zeige dir, wie ich WireGuard auf meiner pfSense-Firewall eingerichtet habe, damit du das auch easy bei dir zu Hause umsetzen kannst. Das ist keine Raketenwissenschaft, aber es gibt ein paar Kniffe, die man kennen sollte.
Voraussetzungen
Bevor wir loslegen, lass uns kurz checken, ob du alles am Start hast. Nichts ist ärgerlicher, als mitten in der Einrichtung festzustellen, dass eine Kleinigkeit fehlt. In meiner Erfahrung sind die meisten Probleme schon hier im Vorfeld lösbar.
- pfSense Installation: Du brauchst eine laufende pfSense-Installation. Achte darauf, dass du mindestens Version 2.6.0 oder neuer verwendest. WireGuard wurde erst mit dieser Version offiziell und stabil in pfSense integriert. Alles davor ist eher experimentell und kann zu Kopfschmerzen führen.
- Internetverbindung & pfSense als Router: Deine pfSense muss als primärer Router in deinem Netzwerk fungieren und eine funktionierende Internetverbindung haben. Das WireGuard-Interface muss später über das WAN erreichbar sein.
- Öffentliche IP-Adresse oder DynDNS: Um von außen auf deine pfSense zugreifen zu können, benötigst du entweder eine feste öffentliche IP-Adresse von deinem Provider oder, was in den meisten Heimlaboren der Fall ist, einen DynDNS-Dienst. Ich persönlich nutze hierfür gerne ipv64.net, weil es zuverlässig und einfach einzurichten ist (aber jeder andere DynDNS-Dienst funktioniert natürlich auch). Wer das noch nicht hat, sollte das zuerst einrichten. Ohne eine erreichbare Adresse geht hier gar nichts.
- Admin-Zugriff auf die pfSense WebGUI: Logisch, aber wichtig: Du brauchst Administratorrechte, um Änderungen an der Firewall vornehmen zu können.
- WireGuard-Client: Für dein Smartphone oder Laptop benötigst du die WireGuard-App. Die gibt es für Android, iOS, Windows, macOS und Linux. Such einfach im jeweiligen App Store danach.
WireGuard auf pfSense einrichten: Schritt für Schritt
Jetzt geht's ans Eingemachte! Wir konfigurieren pfSense so, dass sie als WireGuard-Server fungiert und deine Clients sicher empfangen kann. Nimm dir einen Kaffee, lehn dich zurück und folge den Schritten.
WireGuard Paketinstallation (falls nötig)
In neueren pfSense-Versionen ist WireGuard oft schon vorinstalliert. Falls nicht, ist das kein Problem. Ein schneller Check und gegebenenfalls eine Installation sind schnell erledigt.
Navigiere in der pfSense WebGUI zu System > Package Manager > Available Packages. Suche nach "WireGuard". Wenn es dort gelistet ist, klick auf "Install". Wenn nicht, ist es wahrscheinlich schon installiert und du findest es unter "Installed Packages".
WireGuard Tunnel anlegen
Das Herzstück der WireGuard-Konfiguration ist der Tunnel. Hier legen wir die grundlegenden Parameter für unseren VPN-Server fest.
Gehe zu VPN > WireGuard > Tunnels und klicke auf Add Tunnel.
- Description: Gib hier einen aussagekräftigen Namen ein, z.B.
WG-VPN. Das hilft dir später, den Überblick zu behalten, wenn du mehrere VPNs hast. - Listen Port: Hier wählst du den Port, auf dem dein WireGuard-Server auf eingehende Verbindungen warten soll. Der Standard ist
51820. Ich bleibe meist dabei, es sei denn, der Port ist schon belegt oder ich habe spezielle Gründe für einen anderen. Wichtig: Diesen Port musst du später auch in deiner WAN-Firewall freigeben! - Generate Keypair: Klicke auf diesen Button. pfSense generiert dann automatisch ein privates und ein öffentliches Schlüsselpaar für diesen Tunnel. Der Public Key wird später von deinen Clients benötigt. Kopier ihn dir am besten schon mal oder notiere ihn.
Klicke auf Save und dann auf Apply Changes. Damit ist der Tunnel erstellt.
# Dies ist keine direkte Shell-Eingabe, sondern eine Darstellung der
# Konfiguration, die du über die pfSense WebGUI vornimmst.
# Die Werte, die du eingeben würdest:
# VPN -> WireGuard -> Tunnels -> Add Tunnel
# Description: WG-VPN
# Listen Port: 51820
# Private Key: [Automatisch generiert]
# Public Key: [Automatisch generiert, wichtig für Clients!]
# Save & Apply Changes
Interface zuweisen
Damit pfSense weiß, wie sie mit dem WireGuard-Tunnel umgehen soll, müssen wir ihm ein Netzwerk-Interface zuweisen. Das ist quasi der "Eingang" für deine VPN-Clients.
Navigiere zu Interfaces > Assignments. Dort siehst du eine Liste der verfügbaren Interfaces. Unter "Available network ports" sollte nun wg0 (WireGuard) auftauchen. Klicke auf Add neben wg0.
Das neue Interface wird hinzugefügt. Klicke auf den Namen des neu erstellten Interfaces (z.B. OPT1 oder ähnlich), um es zu konfigurieren.
- Enable Interface: Setze hier den Haken.
- Description: Ändere den Namen auf etwas Aussagekräftiges, z.B.
WireGuard. - IPv4 Configuration Type: Wähle
Static IPv4. - IPv4 Address: Hier legst du das IP-Subnetz für dein WireGuard-VPN fest. Ich verwende gerne
10.0.0.1/24. Die.1ist dann die IP-Adresse deiner pfSense im VPN-Netzwerk, und das/24gibt an, dass du 254 Adressen für Clients zur Verfügung hast (10.0.0.2 bis 10.0.0.254). Wichtig: Wähle ein Subnetz, das sich nicht mit deinem internen LAN überschneidet!
Klicke auf Save und dann auf Apply Changes.
Firewall-Regel für WAN erstellen
Ohne eine Firewall-Regel auf dem WAN-Interface kann niemand von außen deinen WireGuard-Server erreichen. Das ist ein häufiger Stolperstein, den ich selbst schon oft übersehen habe, besonders wenn man schnell sein will. Wir müssen den zuvor gewählten Listen Port (standardmäßig 51820) freigeben.
Gehe zu Firewall > Rules > WAN. Klicke auf Add Rule (das Plus-Symbol oben, um die Regel am Anfang der Liste zu platzieren).
- Action:
Pass(Wir wollen den Traffic durchlassen). - Interface:
WAN(Die Regel gilt für eingehenden Traffic auf deinem WAN-Interface). - Address Family:
IPv4. - Protocol:
UDP(WireGuard nutzt UDP). - Source:
Any(Jede Quelle darf sich verbinden. Wenn du nur von bestimmten IPs zugreifen möchtest, könntest du das hier einschränken, aber für den Anfang ist Any in Ordnung). - Destination:
WAN Address(Der Traffic ist für die WAN-IP deiner pfSense bestimmt). - Destination Port Range: Wähle
Otherund gib den Port51820(oder deinen gewählten WireGuard-Port) sowohl für "From" als auch für "To" ein. - Description: Eine sinnvolle Beschreibung, z.B.
WireGuard UDP Port.
Klicke auf Save und dann auf Apply Changes.
# Firewall -> Rules -> WAN -> Add Rule (oben)
# Action: Pass
# Interface: WAN
# Address Family: IPv4
# Protocol: UDP
# Source: Any
# Destination: WAN Address
# Destination Port Range: 51820 (From) - 51820 (To)
# Description: WireGuard UDP Port
# Save & Apply Changes
Firewall-Regel für das WireGuard-Interface erstellen
Nachdem die Clients den WireGuard-Server erreichen können, müssen sie auch auf dein Heimnetzwerk zugreifen dürfen. Dafür brauchen wir eine Regel auf dem WireGuard-Interface selbst.
Gehe zu Firewall > Rules > WireGuard (oder wie du dein Interface genannt hast). Klicke auf Add Rule (oben).
- Action:
Pass. - Interface:
WireGuard. - Address Family:
IPv4. - Protocol:
Any(Damit können deine VPN-Clients alle Protokolle im Heimnetz nutzen). - Source: Wähle
Networkund gibWireGuard netein. Das bedeutet, dass alle IPs aus deinem WireGuard-Subnetz (10.0.0.0/24) als Quelle erlaubt sind. - Destination:
Any(Damit können deine Clients auf alle Ziele zugreifen, sei es dein LAN oder das Internet. Wenn du den Zugriff einschränken möchtest, könntest du hier z.B.LAN netwählen). - Description:
Allow WireGuard Clients.
Klicke auf Save und dann auf Apply Changes.
# Firewall -> Rules -> WireGuard -> Add Rule (oben)
# Action: Pass
# Interface: WireGuard
# Address Family: IPv4
# Protocol: Any
# Source: Network -> WireGuard net
# Destination: Any
# Description: Allow WireGuard Clients
# Save & Apply Changes
Peer hinzufügen (für jeden Client)
Jeder Client, der sich mit deinem WireGuard-Server verbinden soll, muss als sogenannter "Peer" in pfSense eingetragen werden. Hier definierst du, welche IP der Client im VPN-Netz bekommt und mit welchem Public Key er sich authentifizieren darf.
Gehe zu VPN > WireGuard > Peers und klicke auf Add Peer.
- Description: Gib einen Namen für deinen Client ein, z.B.
Smartphone_Client. - Tunnel: Wähle deinen zuvor erstellten Tunnel aus (
WG-VPN). - Disabled: Stelle sicher, dass dieser Haken nicht gesetzt ist.
- Dynamic Endpoints: Setze hier den Haken. Das ist wichtig für mobile Clients, da deren öffentliche IP sich ständig ändern kann.
- Public Key: Hier kommt der Public Key deines Clients rein. Diesen generieren wir gleich auf dem Smartphone oder Laptop. Lass das Feld vorerst leer oder füge einen Platzhalter ein und aktualisiere es später.
- Allowed IPs: Hier legst du fest, welche IP-Adresse dieser spezifische Client im VPN-Netzwerk bekommen soll. Ich vergebe hier
10.0.0.2/32für den ersten Client. Für jeden weiteren Client wählst du die nächste freie IP, also10.0.0.3/32,10.0.0.4/32usw. Das/32ist wichtig, da es sich um eine einzelne Host-Adresse handelt. - Endpoint: Lass dieses Feld leer, wenn du Dynamic Endpoints aktiviert hast.
- Persistent Keepalive: Setze diesen Wert auf
25Sekunden. Das ist ein Geheimtipp! Es hilft dabei, NAT-Timeouts auf mobilen Netzen zu vermeiden und die Verbindung stabil zu halten. Gerade bei Smartphones, die oft zwischen Mobilfunk und WLAN wechseln, hat mir das viel Zeit gespart.
Klicke auf Save und dann auf Apply Changes.
NAT Outbound Regel (optional, aber empfohlen)
Wenn deine WireGuard-Clients nicht nur auf dein Heimnetz, sondern auch über deine pfSense ins Internet zugreifen sollen (was oft der Fall ist, um z.B. Geo-Blocking zu umgehen oder sich in unsicheren WLANs zu schützen), dann brauchst du eine entsprechende NAT Outbound Regel.
Gehe zu Firewall > NAT > Outbound.
- Wähle den Modus
Hybrid Outbound NAT rule generationoder, wenn du noch keine manuellen Regeln hast, kannst du auchAutomatic outbound NAT rule generationverwenden. Bei "Automatic" kümmert sich pfSense um alles, was oft die einfachste Lösung ist. Wenn du aber schon spezifische NAT-Regeln hast, bleib bei "Hybrid".
Wenn du "Hybrid" gewählt hast, klicke auf Add Rule (oben), um eine neue Regel zu erstellen:
- Interface:
WAN. - Address Family:
IPv4. - Protocol:
Any. - Source: Wähle
Networkund gibWireGuard netein. - Destination:
Any. - Translation/Target:
WAN Address(oderInterface address). - Description:
WireGuard Outbound NAT.
Klicke auf Save und dann auf Apply Changes. Wenn du auf "Automatic" gewechselt hast, reicht es, die Änderungen zu speichern und anzuwenden.
WireGuard Dienst starten
Last but not least: Stelle sicher, dass der WireGuard-Dienst auch läuft!
Gehe zu VPN > WireGuard > Settings. Setze den Haken bei Enable WireGuard, falls er noch nicht gesetzt ist. Klicke auf Save und Apply Changes.
Client-Konfiguration (Smartphone/Laptop)
Jetzt, wo dein pfSense-Server bereit ist, konfigurieren wir deinen Client. Ich zeige dir das Vorgehen exemplarisch für ein Smartphone, es ist aber auf Laptops und andere Clients übertragbar.
- WireGuard App installieren: Lade die WireGuard-App aus dem App Store (Android/iOS) oder von der offiziellen WireGuard-Webseite (Windows/macOS/Linux) herunter und installiere sie.
- Neuen Tunnel hinzufügen: Öffne die App und wähle "Add a tunnel" oder "Create new empty tunnel".
- Name vergeben: Gib deinem Tunnel einen Namen, z.B.
HomeLab_VPN. - Schlüsselpaar generieren: Die App sollte dir die Option "Generate keypair" anbieten. Nutze diese. Du siehst dann einen Private Key und einen Public Key. Kopiere den Public Key deines Clients – den brauchen wir gleich in pfSense!
- Interface Sektion konfigurieren:
- Address: Das ist die IP-Adresse, die du diesem Client in pfSense zugewiesen hast, z.B.
10.0.0.2/32. - DNS Servers: Hier kannst du die IP deiner pfSense angeben (
10.0.0.1), damit dein Client die DNS-Anfragen über dein Heimnetz auflöst. Alternativ kannst du auch öffentliche DNS-Server wie8.8.8.8(Google) oder1.1.1.1(Cloudflare) nutzen. Wenn du aber auf interne Hostnamen zugreifen willst, ist die pfSense-IP Pflicht.
- Address: Das ist die IP-Adresse, die du diesem Client in pfSense zugewiesen hast, z.B.
- Peer Sektion konfigurieren:
- Public Key: Hier fügst du den Public Key deines pfSense WireGuard Tunnels ein. Diesen hast du dir notiert, als du den Tunnel in pfSense erstellt hast (zu finden unter VPN > WireGuard > Tunnels > WG-VPN).
- Endpoint: Das ist die Adresse deines pfSense-Servers von außen. Gib hier deine DynDNS-Domain oder deine öffentliche IP-Adresse ein, gefolgt von einem Doppelpunkt und dem WireGuard-Listen-Port, z.B.
deine_dyndns_domain.de:51820oder81.23.45.67:51820. - Allowed IPs: Das ist entscheidend!
- Für einen Full Tunnel (gesamter Traffic deines Clients geht über das VPN): Gib
0.0.0.0/0ein. Das ist super, wenn du unterwegs maximale Sicherheit willst. Aber Achtung: Wenn du das machst, muss dein DNS-Server im Interface-Feld auch über das VPN erreichbar sein (also deine pfSense-IP 10.0.0.1). - Für einen Split Tunnel (nur Traffic ins Heimnetz geht über das VPN, der Rest direkt ins Internet): Gib die Subnetze deines Heimnetzes an, z.B.
192.168.1.0/24, 10.0.0.0/24. Das spart Bandbreite auf deinem Heimanschluss.
- Für einen Full Tunnel (gesamter Traffic deines Clients geht über das VPN): Gib
- Persistent Keepalive: Setze auch hier
25Sekunden. Das korrespondiert mit der Einstellung auf der