Im Zuge der Vernetzung zweier Firmen soll ein Site-to-Site VPN auf Basis von WireGuard aufgesetzt werden. Auf der eine Seite wird eine Securepoint UTM RC100 verwendet, auf der anderen Seite eine OPNsense.

Folgende Standort-Daten werden in diesem Beitrag verwendet:

Standort A

  • Securepoint UTM RC100, Firmwareversion: 12.7.4
  • IP-Netz: 192.168.0.0/24

Standort B

  • OPNsense 24.7.8 (Community)
  • IP-Netz: 192.168.100.0/24

Grundsätzlich kann man WireGuard-Site-to-Site-Verbindungen uni- wie auch bidirektional einrichten, gemeint ist welcher Standort sich wohin verbindet (z.B. A->B oder B->A oder auch A<->B). Gibt es allerdings auf einer Seite beispielsweise keine öffentliche IP-Adresse, CGNAT, usw. dann geht nur unidirektional. In diesen Fall-Beispiel baut die OPNsense eine Verbindung zur Securepoint UTM auf. Optional ist die bidirektionale Verbindung ebenfalls angegeben.

Die für diesen Beitrag zugrundeliegenden Dokumentationen finden sich hier:

OPNsense – Virtual Private Networking – WireGuard Site-to-Site Setup – WireGuard Site-to-Site Setup

Securepoint – Wiki – UTM – VPN – WireGuard Site-to-Site VPN (S2S)

Schritt 1: WireGuard Instance auf OPNsense einrichten

  • Im Web-Interface unter “VPN – WireGuard – Instances” auf der gleichnamigen Registerkarte den Haken setzen bei “Enable WireGuard” und auf “Apply” klicken.
  • Auf “+” (Add) klicken.
  • Einen Namen, z.B. “wg-site-b”, eingeben und das Public/Private-Keypair erzeugen lassen (auf das Zahnradsymbol klicken).
  • Den “Listen port”  leer lassen, dann wird 51820/udp verwendet. In diesem Beitrag wird Port “51821/udp” verwendet.
  • Bei “Tunnel address” das Transfer-Netz, genauer ausgedrückt die erste IP-Adresse dieses Netzes, beispielsweise “10.0.10.1/24”, eintragen.
  • Auf “Save” klicken.

Schritt 2: WireGuard Server und Peer auf der Securepoint UTM einrichten

  • Im Web-Interface unter “VPN – WireGuard” auf “+ WireGuard Verbindung hinzufügen” klicken.
  • “Schritt 1 – Konfiguration importieren” mit einem Klick auf “Weiter” überspringen.
  • Bei “Schritt 2 – Schnittstelle” einen Namen, z.B. “wg-site-a” eintragen, bei “IPv4-Adresse” passend zum obigen Beispiel “10.0.10.2/24” (die nächste freie IP aus dem Transfernetz) eintragen.
  • Der “Listening Port” hier auf “51821” einstellen.
  • “Privater Schlüssel” auf “Automatisch generieren” belassen.
  • Im Feld “Servernetzwerke global freigeben:” das lokale Netz auswählen, das letztlich über den Tunnel erreichbar sein soll.
  • Auf “Weiter” klicken.
  • Bei “Schritt 3 Peer” zunächst einen Namen für die Gegenstelle, z.B. “wg-site-b” eingeben.
  • Bei “Peernetzwerke freigeben:” die IP-Netze der Gegenstelle eintragen, die über den Tunnel erreichbar sein sollen. In diesem Fall “192.168.100.0/24”.
  • Optional (für bidirektionale Verbindungen):
    Bei “Endpunkt:” die öffentliche IP-Adresse oder den FQDN der Gegenstelle eintragen.
    Für FQDNs gilt allerdings, das WireGuard diese nur einmalig beim Start auflöst. Beim Einsatz von DDNS mit dynamischen Adressen kann das ein Problem sein. Verbirgt sich hinter dem FQDN eine feste öffentliche IP-Adresse ist das in der Regel kein Problem.
    Bei “Endpunkt Port:” den bei Schritt 1 vergebenen Port, hier “51821”, eintragen.
  • Bei “Öffentlicher Schlüssel:” den Public Key der OPNsense eintragen.
  • Bei “Pre-Shared Key (optional):” einen PSK generieren lassen.
  • “Keepalive:” aktivieren.
  • Bei “Schritt 4 Erweiterte Einstellungen” können optional alle Funktionen aktiviert werden. Auf diese Weise kommt man schnell zu einem funktionierenden Regelwerk.
    Diese Regeln sollten im weiteren Verlauf den eigenen Anforderungen entsprechend angepasst werden!
  • Zu guter Letzt rechts oben auf “Neustart” klicken. Es wird dabei lediglich WireGuard neu gestartet, nicht die UTM!

Wird die implizierte Regel für WireGuard verwendet muss man nichts weiter tun. Ist das allerdings nicht der Fall muss man eine eigene Regel erstellen:

Damit die Verbindung angenommen werden kann, muss im Paketfilter eine entsprechende Regel erstellt werden. Im Web-Interface unter “Firewall – Paketfilter” z.B. in der zuvor automatisch generierten Regelgruppe eine neue Regel hinzufügen, die den Zugriff aus dem Internet (oder sofern der andere Standort eine feste IP besitzt dann von dieser aus) auf den für den verwendeten Port-anzulegenden Dienst (z.B. Name “wireguard-s2s-51821”) auf dem “external-interface” zulässt.

Schritt 3: WireGuard Peer auf der OPNsense einrichten

  • Im Web-Interface unter “VPN – WireGuard – Instances – Peers” auf “+” (Add) klicken.
  • Einen Namen, z.B. “wg-site-a”, eingeben.
  • Bei “Public key” den öffentlichen Schlüssel der Securepoint UTM eintragen.
  • Bei “Pre-shared key” den PSK, der auf der Securepoint UTM erzeugt wurde. eintragen.
  • Bei “Allowed IPs” die IP-Netze der Gegenstellen, z.B. “192.168.0.0/24”, eintragen.
  • Bei “Endpoint address” die öffentliche IP oder den FQDN der Gegenstelle eintragen.
  • Bei “Endpoint port” den zu verwendenden Port, hier “51821”, eintragen.
  • Bei “Instances” die unter Schritt 1 erstellte Instanz auswählen.
  • Bei “Keepalive interval” “25” eintragen.
  • Auf “Save” klicken.
  • Auf “Apply” klicken.

Schritt 4: Firewall-Regeln auf der OPNsense anlegen

Zunächst eine Regel definieren, die den Zugriff vom LAN auf die Gegenstelle ermöglicht:

  • Im Web-Interface unter “Firewall – Rules – LAN”  auf “+” (Add) klicken.
  • Bei “Interface” “LAN” auswählen.
  • Bei “Source” “Single host or Network” auswählen und das lokale IP-Netz, hier “192.168.100.0/24”, eintragen.
  • Bei “Destination” “Single host or Network” auswählen und das IP-Netz der Gegenstelle, hier “192.168.0.0/24”, eintragen.
  • Bei “Description” einen Namen, z.B. “Allow LAN Site B to LAN Site A”, eintragen.
  • Auf “Save” klicken.
  • Auf “Apply changes” klicken.

Hinweis: In der OPNsense gibt es per Standard die Regel “Default allow LAN to any rule” (je 1x für IPv4 & IPv6). Diese greift ebenfalls für den Zugriff vom LAN auf das entfernte Netz. Sofern diese Standard-Regel verwendet wird würde sie also die obige Regel ggf. überflüssig machen.

Als nächstes eine Regel definieren, die den Zugriff von der Gegenstelle auf das LAN ermöglicht:

  • Im Web-Interface unter “Firewall – Rules – WireGuard (Group)”  auf “+” (Add) klicken.
  • Bei “Interface” “WireGuard (Group)” auswählen.
  • Bei “Source” “Single host or Network” auswählen und das IP-Netz der Gegenstelle, hier “192.168.0.0/24”, eintragen.
  • Bei “Destination” “Single host or Network” auswählen und das lokale IP-Netz, hier “192.168.100.0/24”, eintragen.
  • Bei “Description” einen Namen, z.B. “Allow LAN Site A to LAN Site B”, eintragen.
  • Auf “Save” klicken.
  • Auf “Apply changes” klicken.

Hierbei handelt es sich lediglich um Minimal-Angaben. Letztlich sollten auf diese Regeln entsprechend den eigenen Anforderungen angepasst werden.

Optional: Wird eine bidirektionale Verbindung verwendet, muss auf der OPNsense der entsprechende Port, hier “51821”, zugelassen werden:

  • Im Web-Interface unter “Firewall – Rules – WAN”  auf “+” (Add) klicken.
  • Bei “Interface” “WAN” auswählen.
  • Bei “Protocol” “UDP” auswählen.
  • Bei “Source” “Single host or Network” auswählen und, sofern vorhanden, die feste öffentliche IP der Gegenstelle eintragen. Bei dynamischen Adressen “WAN network” auswählen.
  • Bei “Destination” “WAN address” auswählen.
  • Bei “Destination port range” “other” auswählen und “51821” eintragen.
  • Bei “Description” einen Namen, z.B. “WireGuard-S2S”, eintragen.
  • Auf “Save” klicken.
  • Auf “Apply changes” klicken.

Last, but not least sollte eine “Normalization rule” angelegt werden:

  • Im Web-Interface unter “Firewall – Settings – Normalization”  auf “+” (Add) klicken.
  • Bei “Interface” “WireGuard (Group)” auswählen.
  • Bei “Description” einen Namen, z.B. “Wireguard MSS Clamping Site A”, eintragen.
  • Bei “Max mss” “1380 oder weniger” (“subtract at least 40 bytes from the Wireguard MTU”, siehe eingangs verlinkte Doku) eintragen.
  • Auf “Save” klicken.
  • Auf “Apply changes” klicken.

Wie geht es weiter

Neben dem Einschränken der Firewall-Regeln auf notwendige Ports bzw. Dienste und wer mit dem auf der jeweils anderen Seite überhaupt kommunizieren darf bestehen weitere Schritte darin, die gegenseitige DNS-Namensauflösung zu ermöglichen. Im Anschluss daran kann man beispielsweise eine Vertrauensstellung zwischen den Active Directory-Domänen aufbauen und auf dieser Basis die Ressourcen auf beiden Seiten freigeben und nutzen. Außerdem sollte man den Status der Standort-Vernetzung überwachen, also beispielsweise regelmäßig vom Monitoring einen Ping senden lassen.