Archiv für den Monat: Februar 2022

OPNsense S2S mit Wireguard, FRR und OSPF

Durch ein Projekt hatte ich die Chance, eine Site-2-Site Vernetzung mit Wireguard umzusetzen. Dazu gibt es genug Howto’s und Youtube Videos. Bei allen wird jedoch lediglich ein einfaches Setup durchgeführt, wo das jeweils gegenüberligende Netz statisch in der Konfiguration eingetragen und dadurch die Route lokal gesetzt wird. Bei einer Änderung der Netzwerke muss jedesmal die Konfiguration angepasst werden. Gerade bei Hub and Spoke VPNs über mehrere Standorte ist es viel Arbeit diese Änderungen zu pflegen. Schön wäre es, wenn man per OSPF einfach diese Topologieänderungen publizieren, und wenn nötig einfach die Firewallregeln anpassen könnte. Das ist mit Wireguard recht einfach möglich wenn man die folgenden Punkte berücksichtigt und umsetzt. Hierzu ist wichtig wie man in Wireguard die Remotenetze definiert. Der Parameter „Allowed IPs“ ist hier wirklich sehr irreführend, denn er beschreibt eigentlich eher die „Remote Networks“. Bei einem „Roadwarrier“ wird als „Allowed IPs“ gerne die Definition „0.0.0.0/0“ gesetzt. Damit wird der Split-Tunnel entfernt und der ganze Traffic in den Tunnel geroutet. Genau dieses Verhalten werden wir uns zunutze machen. In der Konfiguration des Endpoints gebt ihr die Definition „0.0.0.0/0“ bei dem Reiter „Allowed IPs“ ein:

Damit spendiert ihr eurer OPNsense ein neues Default Gateway (also Vorsicht bei Fernwartungen!):

Dieses Verhalten könnt ihr beeinflussen wenn ihr vorher in der lokalen Konfiguration folgenden Haken setzt:

„Disable Routes“ bewirkt nun das zwar alle Netze in den Tunnel „dürfen“, aber nicht als lokale statische Routen gesetzt werden. Nun stimmt das Default Gateway wieder und der Tunnel ist aktiv ohne das Routen gesetzt sind und Traffic dorthin geroutet wird.

Das entsprechende Remotenetz muss nun entweder mit statischen Gatewayrouten oder mit dynamischen Routen gesetzt werden. Da wir uns das Leben gerne einfach machen, nutzen wir natürlich FRR und OSPF Routing. Meine internen Testnetze 192.168.40.0/24 und 192.168.30.0/24 konfiguriere ich in die Area 0.0.0.1 und 0.0.0.2.

Das Interface „Wireguard0“ wird auf beiden Seiten in die Backbone Area 0.0.0.0 konfiguriert:

Im Wireguard Transfernetz habe ich die Endpoints 192.168.169.1 und .2 gewählt. In der Routingtabelle sieht man nun schön, das der Weg ins Remotenetz per OSPF über das Transfernetz geht:

Jede weitere Site und jedes weitere Netz das auf einer Site hinzugefügt wird, kann durch anpassen der OSPF Netzwerke und Areas in allen Standorten veröffentlicht werden. Durch die Anpassung der Firewallregeln könnt ihr bestimmen wie der Zugriff auf die Netze erfolgen soll. Ich hoffe das ihr nun eine Anregung bekommen habt, wie ihr ein komplexeres Setup mit Wireguard und OSPF durchführen könnt.

Kleine Anmerkung für die pfSense User: hier wird die Option „Disable Routes“ leider (noch) nicht angeboten:

Nachtrag: Für jeden Peer muss eine eigene Wireguard Instanz angelegt werden, denn 0.0.0.0/0 kann nur einmal pro Instanz definiert werden. Also für jeden Link eine neue lokale Instanz mit eigenem Port und wgX Interface: