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

7 Kommentare

  1. Raimund Weiss

    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.

  2. Andy

    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.

  3. Bernhard

    Hallo Andy,
    Danke für die gute Anleitung.
    Leider habe ich irgendwo Tomaten auf den Augen wenn ich
    Unter “Firewall – Rules – WireGuard” das
    “Source” “Network” auf das Transfer-Netz, setze wird es bei mir im Tunnel ruhig und ich sehe nichts mehr.
    Könntest du mir bitte einen Tip geben wo ich suche könnte?

    DAnke!

  4. Andy

    > Unter “Firewall – Rules – WireGuard” das “Source” “Network” auf das Transfer-Netz, setze wird es bei mir im Tunnel ruhig und ich sehe nichts mehr.

    Wurde das richtige SOURCE- und DESTINATION-Netz gesetzt?

    Was ist mit “ich sehe nichts mehr” gemeint?

  5. Luko

    Kann es sein das in deiner Anleitung der Teil fehlt der sich ums NAT’ten kümmert, oder legt pfsense das irgendwo selber an?

  6. Andy

    Wieso denn NAT? Also welches Szenario? Für Roadwarrior kommt i.d.R. nur Routing zum Einsatz, da sich diese lediglich ins Firmennetz einwählen und dort Server/Dienste erreichen sollen.

  7. Peter

    Moin Andy,
    im Text steht “Bei “Interface Addresses” die erste IP-Adresse des Transfer-Netzes, z.B. “10.10.20.1/32”, eintragen.” und auf dem Bild ist der korrekte Subnetz-Präfix “/24” angegeben. Magst du es bitte im Text anpassen, hat mich eben ca. 30 Minuten gekostet.. ^^
    Gruß Peter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

© 2024 Andy's Blog

Theme von Anders NorénHoch ↑