IPv4 über Wireguard von Opnsense zu Opnsense routen (CGNAT umgehen)

Endlich funktioniert es! Nach einem monatelangen Austausch mit einem netten Kollegen im #opnsense IRC-Channel (DANKE @FingerlessGloves https://fingerlessgloves.me der diese Anleitung in Stichpunkten formuliert hat) funktioniert nun endlich auch die Nutzung einer öffentlichen IPv4 die von einem VPS Provider über Wireguard geroutet wird. Anwendungszweck wie schon zuvor, Carrier-Grade-NAT ohne eigene v4, Betrieb eines Mailservers daheim oder für ein Homelab oder halt um von Unterwegs auf die Haussteuerung über v4 zugreifen zu können. Die Gründe sind vielfältig und nachdem ich von der Sophos UTM zur Opnsense gewechselt bin fehlte mir genau noch dieser Baustein. Eine Anleitung für die UTM findet man hier. Das ganze funktioniert auch bei der OPNsense wie ein weiterer (virtueller) WAN Anschluss. Natürlich benötigt man dann noch ein Regelwerk über welches Interface was "raus" soll. Dies ist aber nicht Thema dieser Anleitung. Ich kann leider keinen Support für die Einrichtung eines Wireguards Tunnels in OPNsense oder für die Installation einer OPNsense auf einem VPS geben! Es gibt aber ein sehr netes OPNsense-Forum und einen IRC-Channel (freenode #opnsense) wo freundlich geholfen wird.

IPv6 vs. IPv4:

Ich würde dieses Konstrukt immer noch als Notlösung bezeichnen. IPv6 ist meiner Meinung nach die Zukunft. Wer sich aber noch mit Software/Hardware rumplagen muss oder Diensten die noch viel/hauptsächlich über IPv4 abgewickelt werden, der hat mit CGNAT keine Möglichkeit zuhause oder im kleinen Büro vernünftig zu arbeiten.

Grundkonstrukt:

Man benötigt natürlich daheim eine OPNsense, egal ob an Dual-Stack der DS-Lite, DSL/Glasfaser. Für eine weitere IPv4 braucht man nun einen vServer Anbieter wo die OPNsense installiert werden kann. Hetzner Cloud habe ich hier zum Testen benutzt, man kann die OPNsense hier direkt installieren da das ISO zur Verfügung gestellt wird. Würde mich über die Nutzung dieses Anmelde-REF-Links freuen um evtl. etwas Guthaben für weitere Tests zu bekommen. Der Geworbene bekommt 20 € Guthabenbei Nutzung des Links. Ist also ein Win-Win 🙂 Die Installation von OPNsense wird hier nicht beschrieben und ich kann da auch keine Hilfestellung geben. Es gibt aber viele Anleitungen dazu. Hat man kein IPV6 benötigt man außerdem eine Floating IPv4 die derzeit 1,19 € / Monat kostet. FALLS man IPv6 daheim hat und weiss wie man es benutzt, kann man die Wireguard Tunnel per IPv6 aufbauen, die IPv4 auf dem OPNsense 1 (siehe unten) vom WAN Interface entfernen und direkt diese durchleiten. Es ist erstmal nicht Bestandteil dieser Anleitung aber leicht zu adaptieren, da man statt der Zusatz IPv4 nun einfach die Primary IPv4 durchreicht.

Auf beiden OPNsense muss logischerweise das Wireguard Plugin installiert werden. Zum aktuellen Zeitpunkt ist dies os-wireguard in der Version 1.4_1. Die IPv4 55.51.51.X Adressen sind BEISPIELE und natürlich durch die echten zugewiesenen IPv4. zu ersetzen! Grundsätzliche Anleitungen zu Wireguard findet man z.B. bei Thomas Krenn oder im Wiki von OPNsense. Wie auch bei anderen VPNs (OpenVPN) benötigt nur eine Seite eine erreichbare v4. Setzt man IPv6 ein kann man das ganze natürlich auch bidirektional eintragen.

OPNsense 1 im Rechenzentrum:

  • OPNsense 1 befindet sich im Rechenzentrum (Siehe oben, Hetzner Cloud oder andere Anbieter) und hat zwei öffentliche IPv4 Adressen. Sagen wir mal 51.51.51.1 and 51.51.51.10 (zugewiesene Floating IPv4).
  • Das WAN-Interface hat die 51.51.51.1 mit dem Gateway 51.51.51.254.
  • 51.51.51.10 wurde als Proxy ARP virtual IP auf der WAN Schnittstelle eingerichtet
  • Nun erstellt man ein WireGuard local auf dieser OPNsense mit der IPv4 10.0.9.1 (es handelt sich hier einfach um irgendeine private IPv4 damit das Interface aktiv ist), dazu braucht man jetzt noch einen WireGuard Endpunkt (peer) auf der weiteren OPNsense Box zuhause oder woanders (OPNsense 2). Die erlaubte IP dieses peer ist nur 51.51.51.10 (hier natürlich nur als Beispiel, also nicht eintragen!) bzw. die IPv4 der zweiten weiteren IPv4 (floating IPv4), also die IPv4 die nachher daheim nutzbar ist.
  • Dieser WireGuard Tunnel wird WG_RoutedIP benannt und dem WG0 Interface zugewiesen. Nun wird noch eine WAN Regel benötigt die Traffic zu unserer zusätzlichen IPv4 zulässt. Man erstellt also eine WAN Regel die Traffic zu 51.51.51.10 zulässt. Außerdem eine ANY-Regel auf dem WG_RoutetIP Interface. Dies kann natürlich später nach eigenem Gusto angepasst werden, wenn man schon im RZ Traffic filtern/blockieren möchte.
  • Je nach dem ob euer Anschluss nativ eine MTU von 1500 hat (z.B. Kabelanschluss) muss noch im Submenü Firewall: Settings: Normalization eine Regel hinzugefügt werden, welche die "Max mss " vom Tunnel "normalisiert". Hier also bei der Regel das WG_RoutetIP als Interface auswählen (in meinem Screenshot heisst es wghetzner), bei einem Kabelanschluss z.B. den Wert 1380 bei "max mss" eintragen. Das ganze sollte zur Sicherheit auf der OPNsense 2 auch gemacht werden. Hat man einen DSL-Anschluss versucht es mal 1372 oder niedriger. Das ganze optimiert die Geschwindigkeit eures Tunnels.

OPNsense 2 im Büro oder zuhause

  • WAN-Interface hat die 31.31.31.1 mit dem Gateway 31.31.31.254
  • Nun erstellt man ein WireGuard local auf dieser OPNsense mit der IPv4 of 51.51.51.10 (Hier kommt die zusätzliche "floating IPv4" rein die man dazu gebucht hat!), ich habe "Disable Routes" ausgewählt and (vorher Advanced Settings anhaken) als Gateway die 51.51.51.254 (also das Gateway von OPNsense 1 im RZ) gesetzt.
  • Jetzt muss der WireGuard Peer der anderen OPNsense VM (OPNsense 1) erstellt werden. Die "AllowedIPs" werden auf 0.0.0.0/0 gesetzt, damit Internet IPv4 Traffic geroutet werden kann.
  • Dieses WireGuard Tunnel-Interface wird WAN_RoutedIP benannt und dem WG0 Interface zugewiesen.
  • Nun muss ein Gateway auf WAN_RoutedIP erstellt werden mit 51.51.51.254 (hier also wieder das IPv4 GW von der opnsense 1, im Falle der Hetzner Cloud ist dies hier eine IPv4 aus einem privaten Adressraum 172.31.x.x siehe auch Screenshot) als "far gateway" und benötigt natürlich wie andere WAN Anschlüsse eine entsprechende NAT-Regel falls Clients über dieses Gateway mit dem Internet kommunizieren sollen.
  • Jetzt in das Interface WAN_RoutedIP (In meinem Screenshot heisst es wghetzner) wechseln, als IPv4 Configuration "Static IPv4" auswählen, und als IPv4 Address 51.51.51.10 (das ist wieder die zusätzliche "floating" IPv4) setzen und als "upstream gateway" das vorher erstellte auswählen (das mit dem "far gateway").
  • Zu guter letzt noch den wireguard-go service neu starten. Jetzt kann man anfangen eigene Regeln für das "WAN_RoutedIP" Interface zu erstellen um den Traffic "fliessen" zu lassen 🙂
  • Siehe oben bei der OPNsense 1, auch hier sollte eine "Normalization" Regel erstellt werden die die MSS entsprechend begrenzt.

Schaut das ihr jetzt noch ein Regelwerk anliegt das festlegt wie der Traffic fliessen soll. Besonders über welche Verbindung euer LAN Traffic rausgeht. Im Prinzip ist hier ein (virtuelles) Multi-WAN entstanden. Hier gibts zu dem noch was bei Thomas Krenn zu lesen.

WordPress Appliance - Powered by TurnKey Linux