OPNsense Forum

International Forums => German - Deutsch => Topic started by: wupperi on March 05, 2020, 10:28:22 am

Title: Wireguard Multiwan
Post by: wupperi on March 05, 2020, 10:28:22 am
Hallo,

ich habe ein Problem, dass keine Daten durch den Wireguard Tunnel geroutet werden. Mein Setup sieht so aus:

Code: [Select]

              WAN                      WAN
                 :                        :
                 : DSL-Provider       : DSL-Provider
                 :                        :
             .---+---.                 .--+--.
         WAN | DSL |           | DSL | WAN2
             '---+---'                 '--+--'
                 |                        |
                |  Stat public IP     |Public IP
                 +------| OPNsense |------+
                             |       |
                      LAN |       | LAN
                             |       |
                       .-----+------.
                       | LAN-Switch |
                       '-----+------'
                             |
                     ...-----+-----...
                     (Clients/Servers) 10.1.1.0/24 und 192.168.4.0/24



Ich habe den Wireguard Server aufgesetzt und Clients entsprechend konfiguriert.
Ich hatte Wireguard schon einmal aufgesetzt, als ich nur eine Leitung hatte.

Jetzt mit 2 Leitungen wird mein Tunnel im client log zwar als "Connected" angezeigt, allerdings werden keine Daten geroutet. "TLS handshake initialization started" und diese läuft dann in einen Timeout. Der Tunnel terminiert über den DSLer mit statischer IP Adresse und muss ja darüber auch wieder raus.

Inbound allow Regel UDP auf WG Server Port auf "This Firewall" ist gesetzt, allowed IPs sind testweise jeweils die kompletten /24 Netze aus den beiden LANs und aus dem virtuelle WG Netz.

Ich vermute stark, dass ich irgendwo im outbound NAT noch ein Thema habe, stehe aber auf dem Schlauch.
Kann mir jemand einmal kurz mit den notwendigen Regeln (ggfls. Routen) helfen?

wupperi
Title: Re: Wireguard Multiwan
Post by: mimugmail on March 05, 2020, 12:23:49 pm
Kannst du das mal mit einem anderen Dienst testen (z.B. SSH auf die Firewall) um den Fehler einzugrenzen (Wireguard selbst oder MultiWAN an sich)
Title: Re: Wireguard Multiwan
Post by: wupperi on March 05, 2020, 04:22:14 pm
SSH auf die Firewall geht ohne Probleme. (any -> this Firewall -> SSH -> allow)

Auch Portforwarding auf Server im LAN geht (inbound NAT: externe statische IP WAN1-> LAN IP / outbound NAT: src IP server -> destination any, NAT source address = gateway address, gateway = wan1 gateway)

Ich sehe auch, dass mein WG Tunnel aufgebaut wird, die Clients senden halt nur TLS handshake requests, die offensichtlich nicht beantwortet werden. Der Wireguard traffic schlägt also sicherlich auf der FW auf.
Title: Re: Wireguard Multiwan
Post by: wupperi on March 06, 2020, 10:43:57 am
Denke ich habe das Problem schon mal identifiziert, weiss nur nicht, wie ich es lösen kann:

Vielleicht vorab:

Meine Leitungen in den Gateway Groups sind nicht im gleichen Tier, sondern die Leitung mit der Dynamischen IP ist Tier 1, die mit den statischen IPs ist Tier 2. Die Tier 2 Leitung ist nur Backup, bzw. wird nur für inbound services (Server) genutzt. Damit für diesen Traffic für den outbound Weg nicht die Tier 1 Leitung genutzt wird, setze ich mittels Firewall route den Gateway der Tier 2 als Gateway für genau diesen Traffic von den jeweiligen Servern outbound. Klassisches Poilcy Based Routing.

Das WireGuard Paket kommt über das richtige WAN Interface (Tier 2 mit statischen IPs) rein und geht aber über das falsche (Tier 1) raus.

Mir fehlt aber gerade die Phantasie, wie ich für den Wireguard Serice den Traffic über Tier 2 outbound erzwinge?


Title: Re: Wireguard Multiwan
Post by: mimugmail on March 06, 2020, 04:58:02 pm


Das WireGuard Paket kommt über das richtige WAN Interface (Tier 2 mit statischen IPs) rein und geht aber über das falsche (Tier 1) raus.

Mir fehlt aber gerade die Phantasie, wie ich für den Wireguard Serice den Traffic über Tier 2 outbound erzwinge?

Wenn du auf dem richtigen Interface ein Upstream Gateway gesetzt hast sollte das funktionieren.
Das Problem ist dass Wireguard state-less ist, kann sein dass der nur sein Default Gateway nimmt, also das vom System und nicht von loadbalancing Logik
Title: Re: Wireguard Multiwan
Post by: alh on March 06, 2020, 09:59:48 pm
Ich habe genau das gleiche Problem. Eine OPNsense mit 3 WAN-Interfaces. WireGuard via WAN1 (default) funktioniert, via WAN2 und WAN3 nicht. OpenVPN funktioniert hingegen auf allen dreien. Sollten die Antwortpakete nicht automatisch auf das eingehende Interface geroutet werden?

Eine Lösung wäre natürlich, wenn man im PlugIn das Interface pro Server festlegen könnte. Jetzt lauscht WG ja auf allen Interfaces.
Title: Re: Wireguard Multiwan
Post by: wupperi on March 07, 2020, 07:35:53 am
Kann ich bestätigen. Habe in den clients als "peer" einen DDNS Namen zeigend auf die dyn IP des WAN links mit der dynamischen IP gelegt und läuft...
Title: Re: Wireguard Multiwan
Post by: mimugmail on March 07, 2020, 08:39:54 am
Ich glaub das ist dann unabhängig von FreeBSD oder Linux. Hat da einer Mal Lust zu googlen? Oder im #wireguard channel im IRC fragen?
Title: Re: Wireguard Multiwan
Post by: alh on March 09, 2020, 11:52:44 am
Im IRC bestätigen sie im Prinzip das Verhalten.

Quote
Wireguard uses the kernel routing table for where to route traffic which is always going to be the default route unless you have other more specific routes.

Könnte man das evtl. so wie OpenVPN im MultiWAN lösen? WireGuard auf das Loopback-Interace setzen und dann mit Port-Forwards arbeiten? Man braucht ja wohl irgendwie ein SNAT, damit die entsprechenden Routen wirksam werden, oder?
Title: Re: Wireguard Multiwan
Post by: alh on March 09, 2020, 12:04:45 pm
Michaels Antwort war leider richtig:

Quote
The core limitation here is that wg doesn't have a concept of connections, and thus won't try to send replies from the same ip where incoming packets arrived.

Das ist wohl genau das Problem.
Title: Re: Wireguard Multiwan
Post by: alh on March 09, 2020, 12:34:46 pm
Hier noch ein paar Vorschläge aus dem IRC:

Quote
Either a single wg interface on the server + SNAT, or one wg interface per wan interface + DNAT or network namespaces.

Wobei Wireguard nicht an eine IP/Interface gebunden werden kann, sondern nur an Ports!

Quote
[12:22:56]  Just to verify: I cannot even bind wg to listen on a specific interface/ip only, right?
[12:23:39]  No, unfortunately not. That may change at some point, though.

Hier noch ein paar mehr Details:

Quote
[12:19:25]  Could you do some policy based stuff for this based on wireguards port perhaps?
[12:21:05]  Unless you want to stick every wan interface into its own network ns (each with its own wg tunnel), you're gonna have to involve netfilter in this somehow.
[12:21:05]  in fact, thats over complicating it...
[12:21:27]  Just set DNAT rule for wireguards port surely?
[12:22:04]  And there are numerous ways of pulling that off, sure, but NAT is by far the simplest to set up, because it leaves most of the work to the conntracking machinery.
[12:23:24]  Either a DNAT rule that maps traffic to different wg interfaces depending on the input interface, or, if you're hell-bent on using only a single wg interface, SNAT + some hackery.

Würde das in OPNsense folgendes bedeuten (für 2 WANs)?

- 2 WG-Instanzen (51821, 51822)?
- Port Forwards auf jedem Interface von 51820 auf 51821/51822
- Firewall-Regel für S-Port 51821 via WAN1
- Firewall-Regel für S-Port 51822 via WAN2

Sollte das so funktionieren?
Title: Re: Wireguard Multiwan
Post by: mimugmail on March 09, 2020, 01:05:11 pm
Ich check grad nicht wohin ein Portforward dann gehen soll?
Title: Re: Wireguard Multiwan
Post by: alh on March 09, 2020, 02:09:50 pm
Auf dem gleichen Interface von 51820 auf 51821. Braucht man natürlich nur, wenn man gleichzeitig auf allen WANs arbeiten will.

Im OP könnte man das weglassen und einfach eine Policy-Route für die Antwort setzen.
Title: Re: Wireguard Multiwan
Post by: mimugmail on March 09, 2020, 02:26:43 pm
Eigentlich bringt Policy route nichts weil das kein Reply to Paket ist und auch selbst initiiert (geht nicht mit PBR).
Das wird noch eklig. Am besten ist eigentlich Default GW Switching aktivieren und immer nur das primäre WAN zu verwenden.
Title: Re: Wireguard Multiwan
Post by: alh on March 09, 2020, 02:30:47 pm
In unserem Fall kann man leider die Uploadrate von WAN1 vergessen... Könnte man evtl. mit der Option "fwmark" arbeiten?
Title: Re: Wireguard Multiwan
Post by: mimugmail on March 10, 2020, 12:11:23 pm
Nein, da es ja wie gesagt eine Kernel Route ist, kein pf.
Title: Re: Wireguard Multiwan
Post by: alh on March 10, 2020, 01:00:06 pm
Und könnte man etwas mit NAT probieren, so dass eine andere Route zum Zug kommt? Evtl. bei den ankommenden Verbindungen auf WAN2 die Source-IP auf die Interface-IP ändern?
Title: Re: Wireguard Multiwan
Post by: mimugmail on March 10, 2020, 01:02:46 pm
Du kannst dich gern austoben, ich schaffs selbst zeitlich leider nicht.  :(
Title: Re: Wireguard Multiwan
Post by: alh on March 10, 2020, 01:26:33 pm
Habe nur leider keine Ahnung wie man das in OPNsense macht, da ich nur Outbound-NAT gefunden habe. In dem Fall wäre es ja ein Inbound-NAT, oder?
Title: Re: Wireguard Multiwan
Post by: mimugmail on March 10, 2020, 02:52:44 pm
Ja, also eher ein Port-Forward
Title: Re: Wireguard Multiwan
Post by: alh on March 10, 2020, 03:20:44 pm
Ein Port-Forward verändert aber nicht die Source-IP... aber genau das wird ja benötigt, so dass eine andere Route als die Default-Route greift.

Ich werde mal folgendes probieren:

- WG-Instanz auf 51821
- Port Forward von WAN2:51820 auf 127.0.0.1:51821
- Outbound NAT auf WAN2 von nicht-privaten IPs auf 127.0.0.1:51821

Anderer/besserer Vorschlag?
Title: Re: Wireguard Multiwan
Post by: AndreK on April 13, 2021, 01:51:57 pm
Hallo,

Ich habe aktuell das gleiche Problem. Hast du es zum laufen bekommen?

Gruß Andre
Title: Re: Wireguard Multiwan
Post by: alh on April 13, 2021, 02:21:11 pm
Jein. Ich habe einfach die VPN-Leitung als Default-Gateway inkl. Default-Gateway-Switching festgelegt und den restlichen Internetverkehr über ein Multi-WAN in der gewünschten Reihenfolge geleitet. Alle anderen Versuche schlugen fehl.
Title: Re: Wireguard Multiwan
Post by: KernelMaker on September 28, 2021, 11:25:29 am
Gibt es hier schon neue Erkenntnisse?

Ich stehe vor dem selben Problem. Ich würde gern einen WireGuard Tunnel über ein zweites WAN (LTE Backup) realisieren, welches im Normalzustand nicht das Default Gateway ist.

Der Plan ist eine Art Heartbeat für die LTE Verbindung. "Solange der Tunnel steht, ist die Verbindung OK".

Also WG0 -> WAN1 (Glasfaser)
WG1 -> WAN2 (LTE)

unabhängig vom gesetzten Default Gateway.
Bei OpenVPN, IPsec und GRE kann man das ausgehende Interface festlegen. Sowas vermisse ich hier. Wenn ich den Thread richtig verstanden habe, ist aber genau das technisch bei WG nicht möglich, korrekt?
Title: Re: Wireguard Multiwan
Post by: alh on September 28, 2021, 11:32:49 am
So habe ich es verstanden, ja. WireGuard nimmt immer die default-Route.
Title: Re: Wireguard Multiwan
Post by: JeGr on September 28, 2021, 06:28:32 pm
Man kann ein Ziel definiert über ein spezifisches Gateway routen. Dann kann man bspw. Wireguard dazu "zwingen" eben nicht das Default GW zu nutzen, sondern dediziert über das ausgewählte WAN. Aber damit kann nicht "ein Tunnel via WAN1 und ein zweiter Tunnel via WAN2" zum gleichen Ziel realisiert werden - es sei denn das Ziel hätte 2 separate IP Adressen. Alles andere haut noch nicht hin, weil Wireguard ohne Interface oder IP Bindung agiert und einfach auf "alles" hört und lauscht und sich sonst an der normalen Kernel Routing Tabelle orientiert.

Cheers
Title: Re: Wireguard Multiwan
Post by: alh on September 28, 2021, 06:56:36 pm
D. h. für RoadWarriors alles mit sprt 51280 (als Beispiel) über Gateway X routen in der Firewall? Frage deshalb, weil ich es damals nicht hinbekommen habe...
Title: Re: Wireguard Multiwan
Post by: JeGr on September 28, 2021, 07:09:19 pm
Ich hatte das mal auf die Schnelle gebaut aber nur für den simplen Case, dass ich bei 2 WANs Wireguard eben auf dem nicht-default WAN haben wollte. Dazu dann einfach die Gegenstelle (die Firma zum Test) per statische Route via WAN2 geroutet (einfach neue statische Route mit /32 für die IP hinzugefügt), geprüft, dass die IP auch wirklich via WAN2 raus geht und dann Wireguard konfiguriert. Er hat zwar dann ein zwei Mal versucht WAN1 zu nutzen wenn die Anfrage von der anderen Seite zuerst kam, sie haben sich dann aber nach ein paar Sekunden immer auf WAN2 verständigt und darüber den Traffic abgewickelt. Tatsächlich mehrere Tunnel mit der gleichen IP über andere WANs dürfte schwer werden, da ich mir vorstellen kann, dass WG an Policy based Regeln/Routen vorbei geht und die komplett ignorieren dürfte. Somit fällt "pro Port" wahrscheinlich raus.
Title: Re: Wireguard Multiwan
Post by: chw0 on September 12, 2023, 05:12:25 pm
Interessantes Thema :) Gibt es hierzu was neues oder ist das Verhalten noch wie beschrieben?