pfSense: WireGuard-Roadwarrior-Server einrichten

Das moderne und performante WireGuard-VPN kann in pfSense nach der zunächst unglücklichen integrierten Variante mittels Erweiterung installiert und genutzt werden.

Dieser Beitrag basiert auf pfSense 2.5.2 bzw. 1.6.0 (jeweils Community Edition) und dem WireGuard-Paket 0.1.5 bzw. 0.1.6.

Persönliche Bemerkung: Zu diesem Thema gibt es eine sehr hohe Anzahl von Anleitungen. Ich hatte vor längerer Zeit bereits erfolglos versucht WireGuard unter pfSense zum Laufen zu bekommen. Ebenso erfolglos wurden zahllose Anleitungen durchgearbeitet. Aktuell, so scheint es, gibt es mehrere Wege zum Ziel, einen davon beschreibt dieser Beitrag. In früheren Versionen sahen zudem manche Dialoge anders aus oder es gab andere/weitere Punkte zu beachten, mit den genannten Versionen scheint es ebenfalls mehrere Optionen zu geben.

Die WireGuard-Erweiterung installieren

Unter “System – Package Manager – Available Packages” nach “WireGuard” suchen und das Paket installieren:

Es dauert ggf. einen Moment, bis das Paket heruntergeladen und installiert ist.

WireGuard als Server einrichten

Damit sich Außendienst-Mitarbeiter, Home Office-Arbeitsplätze oder andere externe Personen oder Geräte Einwählen können, muss zunächst WireGuard unter “VPN – WireGuard – Settings” aktiviert werden:

Als nächstes muss unter “VPN – WireGuard – Tunnels” ein Tunnel angelegt werden:

  • Auf “+Add Tunnel” geklickt werden.
  • Bei “Interface Keys” auf “Generate” klicken um ein privaten und öffentlichen Schlüssel zu erzeugen.
  • Bei “Interface Addresses” die erste IP-Adresse des Transfer-Netzes, z.B. “10.10.20.1/32”, eintragen.
  • Auf “Save Tunnel” klicken.

Hinweis: Die Angaben aus der Anleitung und aus dem Screenshot stimmen nicht überein. Alle angezeigten Schlüssel (Keys) stammen aus einer geschlossenen Test-Umgebung und befinden sich nicht im produktiven Einsatz.

Roadwarrior (Peers) hinzufügen

Um nun die eigentlichen Roadwarrior (Peer, Client) hinzufügen zu können, entweder den zuvor erstellten Tunnel bearbeiten oder unter “Peers” auf “+ Add Peer” klicken.

  • Bei “Public Key” den öffentlichen Schlüssel des jeweiligen Roadwarriors einfügen.
    Wichtig: Für jedes Peer/jeden Client muss ein eigenes Schlüsselpaar erzeugt werden! Dies geht in der jeweiligen Client-seitigen Anwendung.
  • Bei “Pre-shared Key” (PSK) auf “Generate” klicken.
    Wichtig: Für jedes Peer/jeden Client muss ein eigener PSK erzeugt werden!
  • Bei “Allowed IPs” die nächste freie IP-Adresse aus dem Transfer-Netz, z.B. “10.10.20.2/32”, eintragen.
  • Auf “Apply Changes” klicken.

Firewall-Regeln konfigurieren

Für den Zugang vom Internet aus, muss der WireGuard-Port (Standard: 51820/udp) in der Firewall freigegeben werden:

  • Unter “Firewall – Rules – WAN” auf “Add” klicken.
  • Bei “Protocol” “UDP” auswählen.
  • Bei “Destination” “This Firewall” auswählen.
  • Bei “Destination Port Range” “(other)” auswählen und “51829” eintragen.

Damit nach dem Verbindungsaufbau Daten durch den Tunnel geschickt werden können, muss mindestens eine “any”-Regel erstellt werden.

  • Unter “Firewall – Rules – WireGuard” auf “Add” klicken.
  • Bei “Protocol” “Any” auswählen.
  • Bei “Source” “Network” auswählen und das Transfer-Netz, hier “10.10.20.0/24” eintragen.
  • Bei “Destination” mindestens die “any”-Vorauswahl belassen.
  • Auf “Apply Changes” klicken.

Hinweis: Da “any”-Regeln böse sind, sollte nach dem anfänglichen Test ein strikteres Regelwerk konfiguriert werden, das nur den Datenverkehr zulässt, der wirklich benötigt wird.

Clients einrichten

Für alle gängigen Plattformen gibt es einen WireGuard-Client, mit dabei sind z.B. Linux, Windows, BSD, MacOS, Android und iOS. Man kann die Konfiguration manuell im jeweiligen Client eintragen oder eine fertige Datei importieren. Eine einfache Konfigurations-Datei sieht z.B. so aus:

[Interface]
PrivateKey = <Privater Schlüssel des Clients>
Address = <IP aus dem Transfer-Netz, z.B. "10.10.20.2/24">
#DNS = <LAN-IP der pfSense>, 1.1.1.1, 8.8.8.8

[Peer]
PublicKey = <Öffentlicher Schlüssel der pfSense>
PresharedKey = <Pre-shared Key, muss identisch sein mit dem der pfSense>
AllowedIPs = <LAN der pfSense, z.B. "192.168.1.0/24" oder "0.0.0.0/0">
Endpoint = <IP oder FQDNS der pfSense>:51820

Der Abschnitt “[Interface]” bezieht sich auf die virtuelle Netzwerkschnittstelle auf dem Client, während der Abschnitt “[Peer]” die Gegenstelle, in diesem Fall die pfSense, darstellt.

Wie man sieht, kann man mehrere DNS-Server angeben. Einzelne Zeilen können mit einer Raute (aus-)kommentiert werden. Zu beachten ist bei der Nutzung von DNS, das jedwede Anfragen die Namensauflösung betreffend dann umgeleitet werden!

Wichtig: Für jeden Client muss eine Konfiguration samt eigener privater-öffentlicher Schlüssel, Preshared Key (PSK) und IP-Adresse (“Address”) angelegt werden!

Quellen

pfSense – Docs – WireGuard

YouTube – Tutorial: pfsense Wireguard For Remote Access

reddit – pfSense 2.5.2 and WireGuard experimental package road warrior tutorial

2 Kommentare

  • Danke für die gute Anleitung, werde ich in Kürze brauchen können.

    Zwei Fragen: Bei OpenVPN mit pfSense kann man durch ein Häkchen einstellen, ob jeder Verkehr über das VPN läuft oder nur der, der für das andere Netz nötig ist. Mittlerweile lasse ich wegen der vielen Heimarbeiter nur den Traffic übers VPN, der auch dafür bestimmt ist.
    Ist das bei Wireguard auch möglich? Wo stellt man das ein?

    Zweite Frage: Hast Du Lan-to-Lan-Kopplung auch schon getestet? Läuft das mit zwei pfsense-Routern schon zuverlässig? Würde ich in Kürze auch gern produktiv einsetzen.

    Danke.

  • Hallo Raimund,

    im Gegensatz die OpenVPN kann man bei WireGuard keine Optionen pushen (d.h. vom Server zum Client übertragen kann), daraus ergibt sich das man die Client-Konfiguration entsprechend gut vorbereiten muss.
    Das Pendant zu “redirect-gateway” ist

    AllowedIPs = 0.0.0.0/0

    im “[Peer]”-Teil der Client-Konfiguration. DNS muss dann im “[Interface]” noch gemacht werden.
    Zum Thema DNS und Split-Tunneling bei WireGuard gehe ich in einem Beitrag zum WireGuard-Client (unter Windows) dediziert ein.
    Dieser ist noch in Arbeit und wird die nächsten Tage veröffentlicht.

    Lan-to-Lan/Site-to-Site habe ich noch nicht getestet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.