Wenn Sie auf einer OPNsense-Firewall ein Site-to-Site-VPN (Tunnel zwischen zwei Netzwerken) aufbauen möchten, können Sie zwischen verschiedenen Verfahren wählen. Es gibt IPsec in verschiedenen Varianten und in OPNsense auch WireGuard. In unserem Beispiel erstellen wir eine Site-to-Site-VPN-Verbindung mit WireGuard. Ab OPNsense, Version 24.1, ist WireGuard integriert und muss nicht separat hinzugefügt werden. Alle Angaben in diesem Beispiel wurden auf der Version 24.1.5_3 konfiguriert und getestet.
Im ersten Bild sehen Sie die angenommene Situation.

Wir nehmen an, Ihr Netzwerk hat den IP-Range 192.168.99.0 und Ihre Public IP ist 19.19.19.19 (es geht auch dynamisch) und eventuell haben Sie dazu einen passenden Domain-Name, wir nehmen vpn.beispiel.ch
Bei der Adresse des WireGuard-Servers müssen Sie eine IP-Adresse nehmen, die nichts mit Ihrem Netzwerk oder schon vorhandenen VPNs zu tun hat. In unserem Beispiel verwenden wir die Adresse 172.16.20.1/24. Die Maske /24 verwenden wir, damit wir mehrere VPN in derselben WireGuard-Server-Umgebung konfigurieren können.
Beginnen wir bei WireGuard im OPNsense.

  • setzen Sie als erstes im Menü VPNWireGuardInstances im Feld Enable WireGuard ein Häkchen
  • Klicken Sie nun auf der Lasche Instances auf das + um einen neuen WireGuard-Server zu erstellen. Jeder WireGuard-Server kann mehrere Clients (Peers) beinhalten. Sie benötigen also bei mehreren Clients nur einen WireGuard-Server.
  • Die Felder Public key sowie Private key lassen Sie sich mit einem Klick auf das Zahnrad bei Public key generieren.
    Bei Listen port nehmen Sie z.B. 51825. Passen Sie diesen so an, dass er andere Funktionen in OPNsense nicht stört. Standard verwendet WireGuard die Ports ab 51820.
    Im ersten Bild haben wir für den WireGuard-Server die IP-Adresse 172.16.20.1 angenommen. Dieselbe Adresse verwenden wir bei Tunnel address. Wie bereits erwähnt, nehmen Sie einen Netzwerkbereich, der von Ihrem Netzwerk abweicht. Die fernen WireGuard erhalten aus diesem Range jeweils fix eine Nummer zugeordnet. Dazu weiter unten mehr.
    Speichern Sie die WireGuard-Server-Konfiguration ab mit einem Klick auf Save.
  • Klicken Sie nun bei der Übersicht der Instanzen auf Apply.
  • Gehen Sie im Menü zu Interfaces und Assignments
  • Suchen Sie im unteren Teil der Auswahl die von Ihnen erstellte Instanz und fügen Sie diese mit Add hinzu.
  • Sie finden jetzt in der Übersicht Ihre neu hinzugefügte Instanz
  • Klicken Sie auf den orangen Text des Eintrages
  • Aktivieren Sie den Eintrag mit einem Häkchen auf Enable und sichern Sie den Eintrag mit Save.
  • In der Übersicht erscheint am oberen Rand der Hinweis auf die Änderung. Bestätigen Sie diesen mit einem Klick auf Apply changes.
  • Im Menü bei Firewall und Rules finden Sie jetzt den Eintrag WireGuard (Group) und die neu erstellte Instanz BeispielClientServer.
  • Klicken Sie als Erstes auf WireGuard (Group) und im darauf folgenden Bild auf das Plus um einen neuen Eintrag hinzuzufügen.
  • Bei diesem Eintrag können Sie alles auf den Standardeinstellungen stehen lassen und ihn abspeichern mit einem Klick auf Save. Bestätigen Sie danach den neuen Eintrag mit einem Klick auf Apply Changes.
  • Jetzt klicken Sie im Menü auf FirewallRules und die neu erstellte Instanz Beispiel-Site-to-Site-Server. Dort danach auf das Plus um einen neuen Eintrag zu erstellen.
  • Bei diesem Eintrag müssen Sie bei Source denselben Namen mit der Endung net auswählen Dies erlaubt den Clients den Zugriff auf das lokale Netzwerk. Alle anderen Werte können Sie auf den vorgegebenen Standardwerten stehen lassen. Speichern Sie den Eintrag mit einem Klick auf Save ab. Bestätigen Sie danach den neuen Eintrag mit einem Klick auf Apply Changes.
  • Als nächsten Schritt klicken Sie im Menü auf FirewallRules und WAN. Dort auf das Plus um eine neue Regel zu erstellen, welche den in der Instanz angegebenen Port frei gibt. In unserem Beispiel haben wir den Port 51825 verwendet.
  • Wichtig! Beim Protocol muss UDP stehen und bei Destination port range wählen Sie other, damit Sie bei from und to die richtigen Einträge vornehmen können. Im oben gezeigten Beispiel werden gleich alle Ports von 51820 bis 51850 freigegeben. Somit müssen wir bei einer Erweiterung diesen Punkt nicht mehr ansprechen.
  • Speichern Sie den Eintrag ab mit Save und bestätigen Sie die Änderung mit einem Klick auf Apply changes.
  • Jetzt müssen Sie auf der Gegenseite dieselbe Konfiguration durchziehen. Logischerweise mit den im Beispiel verwendeten Adressen. Wir nehmen an, das ferne Netzwerk hat den IP-Range 192.168.199.0 und die Public IP ist 20.20.20.20 (es geht auch dynamisch) und eventuell ist ein passender Domain-Name vorhanden, in unserem Beispiel ist dies vpn.extern.ch
    Bei der Adresse des WireGuard-Servers nehmen Sie jetzt eine Adresse aus dem Range des WireGuard-Servers von der ersten Konfiguration. Wir verwenden die Adresse 172.16.20.2.
  • Hier das Konfigurationsbild der Gegenseite.
  • Wichtig ist nun, dass Sie vom fernen WireGuard-Server den Public key rauskopieren, den benötigen Sie anschliessend auf Ihrem WireGuard-Server um die Verbindung weiter aufzubauen.
  • Auf dem fernen Server ziehen Sie die Punkte der Instance-Erstellung bis zu den Rule-Einträgen durch.
  • Wenn Sie auf dem fernen System soweit dasselbe konfiguriert haben, wechseln Sie wieder zum lokalen System.
  • Klicken Sie im Menü auf VPNWireGuard und Peers. Dort auf das Plus um einen neuen Peer zu erstellen.
  • Bei Name können Sie einen beliebigen Namen vergeben. Idealerweise einen selbstsprechenden Text, da Sie eventuell mehrere VPNs aufbauen möchten.
  • Bei Public key kommt nun der Public key der Instance des fernen Systems rein.
  • Bei Allowed IPs geben Sie die ferne WireGuard-IP, gefolgt von /32 ein. Wir benötigen das /32, da es sonst Probleme gibt, wenn Sie mehrere VPNs einrichten. Die erste Adresse wäre also 172.16.20.2/32. Als zweite Adresse müssen Sie den Netzwerk-Range des fernen Systems eingeben. In unserem Beispiel ist das 192.168.199.0/24.
  • Unter Endpoint address geben Sie die externe IP-Adresse oder den Domain-Namen des fernen Systems ein. In unserem Beispiel wären dies entweder 20.20.20.20 oder vpn.extern.ch.
  • Jetzt bei Endpoint port noch den auf der Gegenseite konfigurierte Port und bei Instances wählen Sie die Anfangs auf diesem WireGuard-Server erstellte Instanz aus.
  • Sichern Sie den Eintrag mit einem Klick auf Save und aktivieren Sie den Eintrag auf der Übersicht mit einem Klick auf Apply.
  • Von diesem lokalen WireGuard-Server kopieren Sie aus der installierten Instanz ebenfalls den Public key und wechseln auf das ferne System.
  • Auf dem fernen System erstellen Sie jetzt ebenfalls einen Peer und verwenden dort den Public key des lokalen Systems. Auch die Netzadressen verwenden Sie gemäss dem Bild am Anfang des Artikels. Dies sind in unserem Beispiel bei Allowed IPs 172.16.20.1/32 und 192.168.99.0/24.
    Wichtig ist, dass die Adressen und der Public key über Kreuz für die Konfiguration verwendet werden.
  • Wenn Sie auf beiden Seiten die Instances erstellt haben, im Interface die Instances angehängt haben, die Rules und die Peers erstellt haben, sollte der Tunnel stehen und die Verbindung zwischen den Netzwerken funktionieren.