visucius
Goto Top

S2S-Wireguard: AVM zu Mikrotik

Ein gesegnetes Hallo in die ehrenwerte Runde am Tag der "Männer" face-wink

S2S-Wireguard: AVM/Fritze - Mikrotik

hat das jemand - funktionierend - am fliegen?! Bisher lief das ganze nicht direkt auf der Fritze sondern einem hintergeschalteten MT-AP. Mit entsprechendem Routing. Jetzt wollte ich dieses Gerät anders nutzen und das Setup gleichzeitig glattziehen.

Vorgehen:
1. Schlüssel von https://www.wireguardconfig.com erstellen lassen (für beides Seiten)
2. MT-Interface und -Peer angelegt
3. Config-Datei für FB manuell vorbereitet und dann dort unter
4. "Benutzerdefinierte Einrichtung" > ... auf Gegenstelle erstellt JA > NetBIOS JA importiert
5. Manuelles routing und bisherige FW-Port vom alten WG-Setup auf der Fritze gelöscht

Probleme:
a) Die Assistenten der Fritze unterstützen keine verschiedenen vLANs der Gegenseite
b) importiert man das obere config-File über ne bestehende IPSec-Verbindung aus der Ferne werden die Daten nicht richtig importiert
c) zwei DNS-Einträge werden automatisch vorgenommen (fritz.box & lokale IP der Fritze) auf die man keinen Einfluss hat
d) der im conf-File vordefinierte FW-Port wird abgeändert
e) ich komme zwar vom lokalen Fritzbox-Netzwerk in die vLANs des MT ... anders herum endet der Zugriff aber auf der Fritze ... und hier konkret auf der WG-internen NAT-Adresse der Fritze (10.98.200.2). Wie kann ich den Knoten lösen?
f) Beim Wechsel der WAN-IP an der Fritzbox bricht die WG-Verbindung zusammen und baut sich auch nicht mehr auf. Ok, auf MT-Seite hatte ich vergessen ein entsprechendes Skript zu modifizieren aber warum macht das die Fritze nicht von ihrer Seite aus?!

WG-NAT:
Wenn ich das richtig gesehen habe, legt der AVM Wireguard-Assistent kein NAT für Wireguard an, sondern die Fritze behält innerhalb eines von ihr kreierten Tunnel-Setups in meinem Fall 192.168.66.1, etwaige Gegenstellen bekommen offenbar eine IP außerhalb des lokalen DHCP-Bereichs.

Bei meinem manuellen Setup, das ich oben beschrieben habe, nutze ich aber die 10.98.200.1 & 2 /29. Ist das ggfs. ein Problem für die Fritzbox?! Sie ergänzt das Setup eigenständig zu:
Address = 192.168.66.1/26,10.98.200.2/29
Müsste ich in dem Fall dem MT-WG-Interface eine IP aus 192.168.66.0/26 vergeben?!

Fritzbox:
[Interface]
PrivateKey = QNqzq9HQng=
ListenPort = 54267
Address = 192.168.66.1/26,10.98.200.2/29
DNS = 192.168.66.1
DNS = fritz.box

[Peer]
PublicKey = PIfv3MkNhxiCc=
PresharedKey = GmIhEy0UA=
AllowedIPs = 10.98.200.1/32,10.98.33.0/26,10.98.99.0/26,10.98.1.0/26
Endpoint = xxxxxxc8e.sn.mynetname.net:51888
PersistentKeepalive = 25

Mikrotik:
[Interface]
PrivateKey = 0P0szFnvZHk=
ListenPort = 51888
Address = 10.98.200.1/29

[Peer]
PublicKey = OxaCpGi5zE=
PresharedKey = GmIhvRqEy0UA=
AllowedIPs = 10.98.200.2/32,192.168.66.0/26
Endpoint = test.goip.de:54640
PersistentKeepalive = 25

IP > Routes > 192.168.66.0/26 auf wg-Interface (AS)
IP > Routes > 10.98.200.0/29 auf wg-Interface (DAC)

(Anmerkung: Keys alle mittig gekürzt, ebenso Endpoints anonymisiert)

PS: Bestimmt ne doofe Frage:
Bisher hatte ich nur ne FW-Input-rule (Src 192.168.66.0/26, udp, 51888) konfiguriert. Genügt das?

Content-Key: 4495761391

Url: https://administrator.de/contentid/4495761391

Printed on: December 5, 2023 at 16:12 o'clock

Member: aqui
aqui Nov 03, 2022, updated at Aug 31, 2023 at 15:31:22 (UTC)
Goto Top
Deine vollständige Lösung zu deinem Setup und auch einem Setup die Die Fritzbox generell mit anderen, nicht AVM Wireguard Servern koppelt, findest du hier im Thread weiter unten! 😉

Wenn du die aktuelle ct' im Zugriff hast wird dort genau erklärt wie die etwas "spezielle," WG Konfig auf der AVM Fritzbox auszusehen hat. Sie entspricht leider nicht einer WG Standard Konfig, da kein dediziertes internes IP Netz genutzt wird.
https://www.heise.de/select/ct/2022/23/2225809105962410605
Die Assistenten der Fritze unterstützen keine verschiedenen VLANs der Gegenseite
Das klappt aber auch problemlos. Es kommt auf die Subnetzmaske an im Assistenten. face-wink
Member: Visucius
Visucius Nov 04, 2022 updated at 08:46:49 (UTC)
Goto Top
Nee, kennst mich ja. Habe ich natürlich nicht face-wink

Aber wenn es die aktuelle Ausgabe ist, dann hole ich mir die nachher kurz im Bahnhofsshop. Daran soll es nicht scheitern. Ist ja wieder beeindruckend, dass AVM auch bei diesem VPN wieder was "spezielles" einbaut.

Ich hatte mich vor Monaten schon im Support beschwert, dass man die config nicht im Interface nachträglich verändern kann (vom VPN-Namen abgesehen).

Naja, Hauptsache am Ende läuft es.

PS: Ich guck mal, dass ich das dann hier auch entsprechend ergänze. Für spätere Suchen.
Member: aqui
aqui Nov 04, 2022, updated at Apr 24, 2023 at 07:33:40 (UTC)
Goto Top
Wie bereits oben gesagt findest du hier unten im weiteren Verluf des Threads die Lösung.

Der Artikel ist ganz gut gemacht hilft aber im Mikrotik Umfeld nicht unbedingt weiter weil das Routing im Gegensatz zum dynamischen Crypto Routing statisch gemacht werden muss.
Es gibt also diverse Fussfallen. Allein schon die Tatsache das die WG Verbindung auf der FB nicht editierbar ist birgt schon genug Potenzial für Fehler.
Die Tatsache das die FB keine Tunnel IPs aus einem separaten Netz verwendet sondern immer eine aus dem remoten LAN macht die Sache nicht einfacher im Setup bekommt man aber dennoch in den Griff wie du weiter unten ja sehen kannst. 😉
Member: Visucius
Visucius Nov 08, 2022 updated at 15:30:24 (UTC)
Goto Top
Hm, 5,90 EUR für eine Zeitschriften-Seite und einige Versuche später stehe ich offenbar immer noch auf dem Schlauch. Jetzt weiß ich zwar, dass die Fritze im VPN-Tunnel keine eigenes IP-Netz aufspannt sondern "ihre" IP beibehält (siehe @aqui):
Heimnetz.1/24 bzw.
192.168.178.1/24 (im Standard) bzw.
192.168.66.1/26 (im obigen Setup)

Nur erwartet sie das von der anderen Seite ebenso. D.h. gebe ich z.B. in meinem Fall den Netzwerk-Bereich "10.98.33.0/26" für das Firmennetz ein, kommt als config-File für die Gegenstelle die Interface-Adresse 10.98.33.1/26 raus.

Übernehme ich das im Mikrotik, müsste ich unter IP > Adresse > wg-Interface ... die 10.98.33.1/26 hinterlegen. Damit verlieren die lokalen Clients aber offenbar den DNS-Kontakt. Vermutlich kommt das routing ins Schleudern, wenn mehrere Interfaces die selbe IP belegen face-wink

Ich habe dem Interface auf dem MT ebenso schon testweise die 192.168.66.1 gegeben. Dann wäre die Adresse aber gleichzeitig auf beiden Seiten des Tunnels aktiv. Das scheint aber kurzfristig einseitig zu klappen (von Fritzbox zu Mikrotik). Ebenso ne 192.168.66.55 auf dem MT-Interface (außerhalb DHCP der Fritze aber innerhalb des hom./26)

Ich benötige ja offenbar ein Setup, welches zwischen der eigenwilligen AVM-Interpretation und dem "üblichen" VPN-Aufbau vermittelt. Hat da jemand ne Idee?!

Ich habe das hier mal versucht etwas allgemeiner darzustellen:

bildschirm­foto 2022-11-08 um 16.18.28

PS: Der Artikel verweist darauf, dass die Fritzbox die Interface-IPs mit der Gegenstelle "austauscht". D.h. Die Fritze zu Haus bekommt z.B. 10.98.33.55 innerhalb des Tunnels und der MT am wg-Interface 192.168.66.55 ...
Mit den Assistenten wird dieses Setup NICHT erstellt, sondern das Interaface der Frizte erhält - wie oben beschrieben - die lokale IP. Lege ich so ein File manuell an und möchte es importieren erhalte ich Fehelrmeldungen.

PPS: System-Version 7.39-101156 BETA
Member: aqui
aqui Nov 08, 2022 at 16:37:10 (UTC)
Goto Top
zwar, dass die Fritze im VPN-Tunnel keine eigenes IP-Netz aufspannt sondern "ihre" IP beibehält.
Das ist nicht ganz richtig. Die Tunnel IP ist immer eine aus dem lokalen Netz des remoten Routers. Sieht man auch wenn man sich die von der FB generierte Konfig ansieht.
Member: Visucius
Visucius Nov 08, 2022 updated at 17:12:02 (UTC)
Goto Top
Die Tunnel IP ist immer eine aus dem lokalen Netz des remoten Routers.

Nutze ich den Assistenten der Fritze kommt das raus:

Fritzbox:
[Interface]
PrivateKey = GCQH6IiV0......UIU4Gk=
ListenPort = 53762
Address = 192.168.66.1/26
DNS = 192.168.66.1,10.98.33.1
DNS = fritz.box

[Peer]
PublicKey = jfDNuPW0YBk.......VFNK069404=
PresharedKey = 19OXG......oIQF1kwvw=
AllowedIPs = 10.98.33.0/26
PersistentKeepalive = 25

Export-Datei für Gegenstelle (Mikrotik):
[Interface]
PrivateKey = qBESc....VAktuDH4=
Address = 10.98.33.1/26
DNS = 9.9.9.9,192.168.66.1
DNS = fritz.box

[Peer]
PublicKey = GGFt+gu....lcnUqNJ5MkM=
PresharedKey = 19OXG4+.....oIQF1kwvw=
AllowedIPs = 192.168.66.0/26
Endpoint = …goip.de:53762
PersistentKeepalive = 25

Anmerkung: Ich habe mich - weil ja nur ein Netzwerk abgefragt wird - fürs vlan 10.98.33.0/26 entschieden. Der Wunsch wäre aber schon, dass mehrere vLANs erreichbar wären.

Das entspricht mMn. nicht der Grafik oben rechts in der Heise auf Seite 73!
Member: JHthe4
JHthe4 Apr 20, 2023 at 14:38:06 (UTC)
Goto Top
Grüß dich Visucius,

es tut mir Leid, den alten Thread wieder so hochzuholen, aber ich stehe im Moment exakt vor dem gleichen Problem. Ich habe auf der FB eine Configdatei erstellt und die Einstellungen daraus in den MT übernommen, und der Tunnel scheint erfolgreich aufgebaut werden zu können. Allerdings funktioniert das Routing über den Tunnel nicht. Wie bist du denn am Ende verblieben? Insbesondere würde mich interessieren, welche IP-Adresse du dem WG interface auf dem MT zugewiesen hast? Vielen Dank!
Member: aqui
aqui Apr 20, 2023, updated at Apr 24, 2023 at 07:34:37 (UTC)
Goto Top
Hast du beachtet das der Mikrotik keine automatische Route für das Zielnetz einträgt?!
Das musst du immer manuell im Mikrotik Setup unter IP -> Route anlegen ansonsten scheitert das Routing.
Siehe hier an einem analogen Beispiel wo der Mikrotik einen Wireguard Tunnel auf eine Firewall aufbaut.
der Tunnel scheint erfolgreich aufgebaut werden zu können
Scheint...?! Raten ist immer schlecht. face-sad
Aktiviere Wireguard unter System - Logging dann kannst du es direkt im MT Log sehen ob der Tunnel aufgebaut wurde. Oder im Peer Setup ganz unten unter Last Handshake. face-wink
Member: JHthe4
JHthe4 Apr 20, 2023 at 17:11:04 (UTC)
Goto Top
Hi aqui,

danke für die Tipps. Bitte entschuldige meine unpräzise Formulierung. Der Tunnel wird erfolgreich aufgebaut, das bestätigen sowohl die MT logs als auch die FritzBox UI.

Die Route hatte ich angelegt, funktionieren tut der Ping leider immer noch nicht (kann die FB nicht erreichen, und erst recht keinen Rechner dahinter). Ich vermute nach wie vor dass das an der Eigenheit der AVM Implementierung von WG liegt. Welche Adresse müsste ich denn dem Mikrotik am Wireguard-Interface zuweisen? Das VLAN mit dem ich die FB verknüpfen möchte, ist in 192.168.4.0/24. Mit der Adresse 192.168.4.1/24 zerschießt es mir das Routing im gesamten VLAN, mit 192.168.4.1/32 passiert das nicht aber der Ping funktioniert trotzdem nicht.

Das Beispiel mit der Firewall ist zwar nett, aber hilft mir nicht weiter, weil es ja kein internes Transfernetz im Tunnel zu geben scheint. Vielleicht kannst du mir da ja einen Tipp geben? Danke!
Member: aqui
aqui Apr 21, 2023, updated at Apr 24, 2023 at 07:35:43 (UTC)
Goto Top
weil es ja kein internes Transfernetz im Tunnel zu geben scheint.
Das gibt es schon aber bei der proprietären AVM /Fritzbox Implementation von Wireguard ist das ihre IP Adresse aus dem LAN. Das liegt an dem kranken AVM WG Setup. face-sad
Auch ein hiesiger Thread beschreibt dieses Setup:
Wireguard Lan to Lan Fritzbox Raspberry Pi
Member: JHthe4
JHthe4 Apr 21, 2023 at 17:20:15 (UTC)
Goto Top
Vielen Dank für die Links. Durch den von dir erwähnten Thread bin ich auf den hiesigen gestoßen, aber ich habe trotzdem beide nochmal umfassend durchgearbeitet. Die dort beschriebene Situation überschneidet sich aber mit meiner in der Hinsicht nicht, als dass ich direkt den Gateway-Router als WG-endpoint nutzen möchte, und nicht ein Gerät dahinter.

Weiterhin - und hier liegt die Crux - habe ich ähnlich wie @Visucius in der Interface-Konfiguration der FB auch nur die lokale IP des eigenen Subnetzes finden können, und keine IP des counterpart-Subnetzes. Somit stehen unsere Erfahrungen im Widerspruch zu der Heise-Dokumentation. Hast du denn ein entsprechendes Setup bei dir laufen? Es wäre interessant zu wissen, was in deiner Fritzbox-wg.conf steht.

Final bin ich dann mit Packet-Captures auf die Suche nach dem Problem gegangen. Ping-Packets aus dem Mikrotik-Subnetz werden erfolgreich in den Tunnel geroutet und kommen auf der Fritzbox am entsprechenden Interface an. Leider bleiben diese aber unbeantwortet. Wenn ich dem Mikrotik-Wireguard-Interface eine ungenutzte IP-Adresse aus dem Fritzbox-Subnetz zuweise, werden von dieser ausgehende Packets zwar in dem Tunnel auf die Leitung gelegt, kommen aber am Fritzbox-Interface nicht an (was ja auch klar ist, weil das Fritzbox-Subnetz nicht zu den AllowedIPs des Peers - AKA des Mikrotik-Routers gehört). Auch diese Erkenntnis steht meiner Meinung nach im Widerspruch zu der Heise-Doku, denn die Wireguard-Config, an der ich mich orientiere, kommt ja direkt aus dem Fritzbox-Setup-Assistenten.

Hast du noch weitere Ideen? Ich würde sagen, ich hänge exakt am gleichen Punkt fest wie @Visucius damals. Weißt du, wie er es gelöst hat? Tausend Dank für deine Zeit!
Member: aqui
aqui Apr 21, 2023 at 18:45:18 (UTC)
Goto Top
Hast du denn ein entsprechendes Setup bei dir laufen?
Noch nicht, kann ich aber auf Basis der Heise Doku gerne mal testen übers Wochenende.
Z.B. die Kombination FritzBox als WG Client (Initiator) auf einen bestehenden klassischen WG Server (Responder) geht m.E. gar nicht obwohl ein Youtube Video das Gegenteil behauptet. Das dort gezeigt Setup funktioniert de facto nicht!
Die AVM Büchse muss m. E. immer Responder (Server) sein sonst geht mit nicht AVM WG Endgeräten nichts und auch das nur mit Klimmzügen.

Im Endeffekt ist es deutlich leichter und erspart eine Menge graue Haare das IPsec VPN der FritzBox zu nutzen. Das klappt mit dem Mikrotik und auch allen anderen IPsec fähigen Firewalls und Routern fehlerlos und ohne jegliche Probleme sofort auf Anhieb. Egal in welcher Konstellation.
Member: JHthe4
JHthe4 Apr 22, 2023 at 10:54:17 (UTC)
Goto Top
Wäre sehr nett, wenn du das mal testen könntest. Der Tunnel wird ja established und die Packets kommen durch, deswegen muss es meiner Meinung nach an irgendeinem kleinen Routing-Problem liegen. Da die Fritzbox aber fast keine Änderungen an den Einstellungen zulässt, bin ich auf den Mikrotik angewiesen (der aber mMn alles richtig macht).

Bzgl. Initiator und Responder: Das ist in meinem Setup zufällig kein Problem, da der Mikrotik hinter einem CGNAT hängt und somit immer der Initiator sein muss.

Aufgrund der Eleganz und der höheren Geschwindigkeit würde ich Wireguard schon stark präferieren. Wenn es gar nicht geht switche ich natürlich auch zu IPSec, aber würde das gerne wenn möglich vermeiden.

Ich freue mich auf deine Ergebnisse!
Member: aqui
Solution aqui Apr 22, 2023, updated at Sep 01, 2023 at 09:13:34 (UTC)
Goto Top
Die FritzBox Konfig eines hierzu korrespondierenden Threads in der man die FritzBox LAN IP auch als ihre Tunnel IP angibt brachte in der Tat den Durchbruch!! 👍

Die folgenden Fritzbox VPN Konfigurationskniffe gelten nicht nur für Mikrotik sondern generell für ALLE Standard Wireguard Endgeräte in mit der Fritzbox gemischten Wireguard VPN Umgebungen! Dies betrifft auch die Firewalls wie OPNsense und pfSense.

Die Wireguard Konfig im Einzelnen. Fritzbox als Initiator (WG Client).
Ein folgender Thread im Anschluss beschreibt das Fritzbox Setup als Wireguard Server (Responder).


back-to-topSetup Fritzbox als Wireguard VPN Client (Initiator)


(⚠️ Ein Setup der Fritzbox als Wireguard VPN Server (Responder) ist weiter unten beschrieben!)

Grundlage für den Test ist ein klassisches, einfaches Wireguard Standardsetup.
Im ersten Anlauf spielte statt des Mikrotik Routers ein Linux (Raspberry Pi) als klassischer Wireguard Server den Responder (WG Server) um das Fritzbox Setup (WG Client) sicher zu verifizieren.
Der Wireguard Server verwendet als WAN Port IP 10.99.1.150 bzw. damit dann den DynDNS Hostnamen 0a630196.nip.io. (nip.io DNS Info siehe hier) Wireguard UDP Port ist: 51820

wgmttestneu.

wgfbneu.
Wie oben schon geschrieben lief dieses Setup sofort auf Anhieb. Ping Checks erwartungsgemäß beidseitig fehlerlos...

back-to-topWireguard Konfig Datei des Linux Servers (Responder)

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = 123Oug5cEdTJSG9OY7nTLrvE1SCbPti5siKDJ2NFBX0=

[Peer]
PublicKey = tlPY1jswXwHU/OfS+KPThhP0I+dAtyE/w3OpMC9Y9x8=
AllowedIPs = 10.10.10.2/32,192.168.188.0/24 
(Fritzbox lokales LAN Netzwerk = 192.168.188.0 /24)

back-to-topFritzBox Setup und PingCheck

Der u.a. Screenshot zeigt die Ping Checks aus den jeweiligen per VPN verbundenen lokalen LANs sowie die in die FritzBox zu importierende Wireguard Konfigdatei.

⚠️ Wichtig für den Erfolg ist, das die in der auf die Fritzbox zu importierenden Wireguard Konfigurations Datei, unter "Address = 192.168.188.1/24" eingestellte IP Adresse identisch zur LAN IP Adresse der FritzBox ist!

back-to-topFritzbox Client Konfigurations Import

Da die Fritzbox hier als VPN Client (Initiator) arbeitet, sich also auf einen bestehenden VPN Server (Mikrotik, pfSense, Linux etc.) mit bestehender Konfig verbindet, muss sie folglich auch die durch den VPN Server vorgegebene Konfig Datei in ihr Setup importieren!!
Das passiert im "VPN (Wireguard)" Karteireiter des Fritzbox Menüs indem man dort "Verbindung hinzufügen" klickt und diese o.a. Konfigurations (Text) Datei importiert.
fbimport

back-to-topFritzbox Wireguard Konfig Datei

Hier nochmals die dazu korrespondierende Wireguard Konfig Datei zum Import in die Fritzbox als Wireguard Client.
⚠️ Wichtig ist das in der Konfig Datei die unter "Address = 192.168.188.1/24" eingestellte IP Adresse immer identisch zur LAN IP Adresse der FritzBox ist!
[Interface]
PrivateKey = <Private_Key_Fritzbox>
Address = 192.168.188.1/24

[Peer]
PublicKey = <Public_Key_Server>
AllowedIPs = 10.10.10.0/24,172.25.26.0/28
Endpoint = 0a630196.nip.io:51820
PersistentKeepalive = 25 
Damit funktioniert dann auch die Kopplung der FritzBox als WG Client auf den Mikrotik und übrigens auch auf pfSense und OPNsense Firewalls fehlerlos!

back-to-topFritzBox Peer Check

wgfbstat


back-to-topMikrotik als Wireguard Server (Responder)

Der erfolgreiche Test mit dem Linux Host liess hoffen das es mit dem Mikrotik auch klappt was der Test dann letztlich auch verifizierte!
Der Mikrotik als VPN Server (Responder) bekam exakt die gleiche Konfig und Keys wie oben der testweise als VPN Server laufende Linux Host.

back-to-topFirewall Setup

Verwendet wurde ein klassisches Mikrotik Default Setup mit NAT an ether1. Hier muss eine entsprechende Firewall Regel hinzugefügt werden damit eingehend Wireguard UDP 51820 Pakete passieren dürfen.
mtfw-neu

back-to-topWireguard Peer Setup

Hier wurden exakt die o.a. Linux Parameter verwendet
wgsetup1

back-to-topIP Routing Setup

Der Linux Host übernimmt automatisch das Routing in den Peer (Cryptokey Routing) so das kein statisches Routing erforderlich ist.
⚠️ Beim Mikrotik ist das nicht der Fall! Hier ist im Setup immer eine statische Route unter (IP -> Routes) erforderlich um die remoten IP Netze (FritzBox LAN) erreichen zu können!
Es existiert zwar keine 10.10.10er Tunnel IP Adresse auf der FritzBox, weil die FB, wie oben beschrieben, ihre eigene LAN IP als Tunneladresse verwendet. Es reicht aber eine "imaginäre" IP Adresse wie 10.10.10.2 aus dem internen Wireguard IP Netz als Gateway einzugeben.
wgroute


Für die pfSense gilt dann analog zu oben das folgende Setup, welches die Fritzbox als Wireguard Client (Initiator) an die Firewall anbindet.
Die Schritte sind bei der OPNsense in deren Konfig GUI identisch.


back-to-toppfSense Firewall als Wireguard Server (Responder)


⚠️ Wichtig ist das in der pfSense wie auch in der OPNsense was Wireguard Tunnel Interface über das Interface Assignment fest zugewiesen wird! Siehe dazu HIER!
Lokales LAN pfSense: 192.168.211.0 /24
Lokales LAN Fritzbox: 192.168.188.0 /24
Internes Wireguard Netz: 100.64.64.0 /28, pfSense Wireguard Tunnel IP: 100.64.64.14

(.14 höchste IP im internen /28er Wireguard Netz so das man die Clients kosmetisch von .1 bis .13 durchnummerieren kann)

back-to-toppfSense Wireguard Tunnel


pfwgtun

back-to-toppfSense Peer zur Fritzbox


pfwgpeer

back-to-toppfsense Interface Assignment


pfwgintass

back-to-toppfSense Wireguard Gateway und Route


⚠️ Die pfSense übernimmt im Gegensatz zu anderen Endgeräten das Wireguard Gateway und die Route ins entfernte IP Netz nicht automatisch. Dies muss statisch im Menü System - Routing für alle Tunnelverbindungen konfiguriert werden!

back-to-topWireguard Gateway

pfwggate

back-to-topWireguard Route

pfwgroute

back-to-toppfSense Firewall Regeln


WAN Port:
pfrul1

Wireguard Interface:
wgaclneu.
(Das ist eine "Scheunentor" Regel die im WG Tunnel alles erlaubt. Wer hier striktere Regeln will muss das entsprechend anpassen!)

back-to-toppfSense Pingcheck zur Fritzbox

pfwgpingcheck

back-to-topFritzbox Konfigurationsdatei pfSense VPN

[Interface]
PrivateKey = 8C1234567mNOvASetoqRXm2+07tM2xuqV5s9AC0rIVs=
Address = 192.168.188.1/24

[Peer]
PublicKey = 758fxIPLzQCVjzdtQ/+Q1Nbg1CmXl0s44vlvrW5UzQY=
AllowedIPs = 100.64.64.0/28,192.168.211.0/24
Endpoint = <WAN_ip/hostname_pfSense>:57820
PersistentKeepalive = 25 

back-to-topFritzbox Wireguard Status

pfwgfbstat

Fazit: Works as designed! 👍
Member: JHthe4
JHthe4 Apr 23, 2023 at 10:37:21 (UTC)
Goto Top
Vielen Dank für deine Mühen! Ich glaube, wir kommen der ganzen Sache schon ein ganzes Stück näher! Der einzige Unterschied, den ich noch zwischen deinem und meinem Setup sehe, ist, dass aufgrund des CGNAT in meinem Fall der Mikrotik der Initiator und die FritzBox der Responder sein muss.

Bis auf diesen Unterschied bin ich deiner Konfiguration 1:1 gefolgt, aber kriege leider immer noch keine Ping responses von der Fritzbox durchgeroutet. Deswegen hänge ich jetzt mal diverse Screenshots an, vielleicht erkennst du da den entscheidenden Fehler?

Zur Erklärung, Mikrotik Subnet ist 192.168.4.0/24 und Fritzbox Subnet ist 192.168.24.0/24.

Mikrotik Wireguard Interface
chrome_2t49ddsent

Mikrotik Wireguard Peer
chrome_mnbfys7hpl

Mikrotik Interface IP Address
chrome_d8rbimou0y

Mikrotik Routes
chrome_aomvgk02uy

Mikrotik Firewall (brauche nur stateful firewall weil Mikrotik ja der Initiator ist)
chrome_ktxwplrydd

Fritzbox Wireguard State
chrome_r2j4p1oleg

Packet Capture am Fritzbox Wireguard Interface
wireshark_suck7njsne

Fritzbox Wireguard Config File
[Interface]
PrivateKey = <redacted>
ListenPort = 50120
Address = 192.168.24.1/24
DNS = 192.168.24.1
DNS = fritz.box

[Peer]
PublicKey = <redacted>
PresharedKey = <redacted>
AllowedIPs = 10.10.10.0/24,192.168.4.0/24
PersistentKeepalive = 25

Wo siehst du hier den Fehler? Freue mich sehr auf deine Rückmeldung, meiner Meinung nach spielt die Fritzbox verrückt!
Member: JHthe4
JHthe4 Apr 23, 2023 at 10:58:57 (UTC)
Goto Top
Noch ein interessanter Nachtrag, der vielleicht hilft, das Problem etwas einzuschränken: Durch einen Packet-Capture auf der LAN-Seite der Fritzbox sehe ich, dass die ICMP Echo Requests erfolgreich ins LAN geroutet werden, und ein Reply generiert wird (Screenshot anbei). Allerdings wird dieser Reply dann wohl nicht mehr von der Fritzbox auf die Wireguard-Leitung gelegt. Hast du soetwas schon mal gesehen?

wireshark_7uwe7uq5oe
Member: JHthe4
JHthe4 Apr 23, 2023 at 11:04:24 (UTC)
Goto Top
Und noch ein letzter Nachtrag: Ein Ping direkt vom Mikrotik-Router aus, der ja die 10.10.10.1/24 besitzt, funktioniert tadellos! Es scheint also wirklich nur am FritzBox-Routing in das 192.168.4.0/24 Subnetz zu liegen.
Member: aqui
Solution aqui Apr 23, 2023, updated at Oct 12, 2023 at 11:42:03 (UTC)
Goto Top
aufgrund des CGNAT in meinem Fall der Mikrotik der Initiator und die FritzBox der Responder sein muss.
OK, das ist dann sogar noch etwas einfacher, denn dann gibt die Fritzbox ja die Wireguard Konfig vor die man von ihr dann runterlädt beim Wireguard Setup.

Die Herausforderung ist hier wieder das Routing auf der Mikrotik Seite, weil die FritzBox so tut als ob das Tunnelnetz schon das remote Netz ist. Der Mikrotik aber Wireguard konform ein internes IP Netz erwartet das zusätzlich ein statisches Routing erfordert! Der Mikrotik macht kein dynamisches Wireguard Cryptokey Routing wie es „klassische“ Wireguard Endgeräte machen.
Die Fritzbox spielt nicht wirklich verrückt sondern verhält sich leider aufgrund der nicht üblichen Wireguard Konfig so, was auch das inkonsitente ICMP Paket Routing von oben erklärt.
Mit einem kleinen "Routing Kniff" ist das aber schnell und problemlos zu lösen indem man die Fritzbox und ihre nicht Standard konforme Wireguard Konfig routingtechnisch etwas "überlistet"! 😉



back-to-topFritzbox als Wireguard VPN Server (Responder)


Der "Kniff" ist das man der FritzBox mit der Angabe der remoten Netzwerkmaske in ihrem Setup Dialog ein größeres, Client seitiges LAN IP Netzwerk vorgaukelt.
Bei einem remoten /24er Prefix (255.255.255.0) wird dann z.B. stattdessen einfach ein /23er Netz (Maske = 255.255.254.0) im Fritzbox Setup angegeben.
Hier im Beispiel wurde die bestehende Mikrotik Konfig aus dem obigen Client Setup belassen mit dem lokalen 172.25.26.0 /28 LAN Netzwerk.
Der Fritzbox wurde in ihrem Wireguard Setup aber gesagt das dort ein vermeintlich größeres 172.25.26.0 /27 Netzwerk ist. face-wink
Das stimmt zwar nicht aber die Fritzbox "merkt" das nicht. Damit hat man das durch diesen "Kniff" gewonnene 2te /28er Teilnetz 172.25.26.16/28 dann quasi als "Dummy" Routing Netzwerk im Mikrotik für den Tunnel gewonnen und kann dorthin problemlos die erforderliche statische Route setzen.

⚠️ Nutzer mit einem /24er Prefix (255.255.255.0) im lokalen Mikrotik LAN (oder dem eines nicht AVM Routers) nehmen hier, wie bereits gesagt, entsprechend eine größere /23 Maske (255.255.254.0).

Bezogen auf deine Adressierung mit dem 192.168.4.0 /24 LAN Netzwerk am Mikrotik konfigurierst du der Fritzbox in ihrem Wireguard Setup dann ein remotes 192.168.4.0 /23 (255.255.254.0) IP Netz.
Das dort dann durch die Maske inkludierte .5.0 /24er Netz nutzt du dann als imaginäres Wireguard Tunnelnetz am Mikrotik für dessen statische Route zur FB.
(192.168.4.0 /23 beinhaltet den Bereich 192.168.4.1 bis 192.168.5.254 !)

fbmt1
Die FritzBox spuckt mit der vergrößerten /27er Maske (Beispiel) dafür dann die folgende Wireguard Client Konfig Datei zum Download für den remoten Wireguard Router Client (hier Mikrotik) aus:
[Interface]
PrivateKey = SHmfBISHETHvgp1NZ3OB4DHO+2ETO8A7NT2WHJkZQ1M=
Address = 172.25.26.1/27
DNS = 192.168.188.1

[Peer]
PublicKey = QkuU7B316836EOKyxW7L3RB0vgMazj6/rk3/xnN+alg=
PresharedKey = H1/LuRk1pUMSlfF0NacvcOiHB3qoQMZkZQlKGXVjaUE=
AllowedIPs = 192.168.188.0/24
Endpoint = 0a0b01c7.nip.io:54733
PersistentKeepalive = 25 
Dieser "Kniff" bewirkt, wie bereits gesagt, das die Fritzbox die zwei /28er IP Netze des Mikrotik als ein gemeinsames /27er Netzwerk "sieht". (bzw. /23er bei Verwendung einer /24 LAN Maske)

Die Mikrotik Wireguard IP Adresse setzt man dann später auf das 2te "Dummy" Netz 172.25.26.16 /28 also die IP Adresse 172.25.26.17/28 (1. IP im Netz) und die statische Route im Mikrotik dann auf die imaginäre 172.25.26.18 als Gateway IP (2. IP im Netz).
Korrekt angepasstt muss dann oben
Address = 172.25.26.17/28
in der so per Editor geänderten Fritzbox Konfig Datei für den WG Router Client stehen, was man dann auch entsprechend so für den Mikrotik Router als Client ändern muss.

Die FritzBox akzeptiert das alles, weil sie durch ihre vergrößerte Maske "denkt" alles ist in einem gemeinsamen IP Netz.
⚠️ Aufpassen muss man natürlich das dieses "Dummy" Tunnelnetz was man der Fritzbox vorgaukelt nirgendwo sonst im gesamten Netzwerk auftaucht damit die Wegefindung (Routing) immer eindeutig bleibt!! Bekanntlich der goldene Grundsatz beim IP Adressdesign. 😉


back-to-topMikrotik Setup als Wireguard VPN Client (Initiator)


Die von der FritzBox aus ihrem Wireguard Setup zum Download vorgegebene Client Konfig Datei (s.o.) setzt man dann entsprechend IP Adress- und Routing technisch angepasst dort um.
Die hier verwendete nip.io Adresse ist ggf. durch eine eigene MyFritz! oder DDNS Adresse zu ändern!
Hier sieht man dann auch die oben geänderte, interne Wireguard Client IP Adresse mit einer /28er Maske. 172.25.26.17 /28!
fbmt2

back-to-topMikrotik Routing Setup

Wie oben schon beschrieben, nutzt man das 2te interne IP Netz der größeren Maske als "Transfer" Netz für das imaginäre Gateway zur FritzBox!
fbmt3rou

Firewall Einstellung entfällt hier im Initiator (Client) Mode wie du auch oben schon richtig gesagt hast, da der Client ja von sich aus den Tunnel aktiv aufbaut!
Damit lassen sich dann beidseitig alle lokalen Komponenten per VPN erreichen. 😉

Dieser Routing "Kniff" lässt sich ebenso mit einer pfSense, OPNsense bzw. allen "klassischen" Wireguard Endgeräten als Client (Initiator) umsetzen und führt auch da zum Erfolg bei der Wireguard Kopplung einer AVM Fritzbox im VPN Server Mode mit klassischen Wireguard Endgeräten in einem VPN LAN zu LAN Design!

back-to-topBeispielsetup mit GL.inet Mobilrouter

Ein GL.inet Mobilrouter benötigt keine der o.a. "Tricksereien" die für den Mikrotik oder OPNsense/pfSense erforderlich sind, weil er kein separates IP Netz nutzt. Hier kann man also mit dem klassischen Setup Prozedere arbeiten.
Wireguard Setup mit GL.inet Router Client
Member: JHthe4
JHthe4 Apr 23, 2023 at 22:14:41 (UTC)
Goto Top
Optimal, vielen Dank nochmal für deine Zeit! Die Idee mit der Zusammenfassung der Subnetze ist hammer, meine Lösung wäre jetzt einfach ein NAT gewesen. Mit dieser Config funktioniert es inzwischen bei mir einwandfrei! Es gab noch eine alte (inaktive) IPsec Verbindung, weshalb das 4er-Subnetz auf der Fritzbox nicht richtig geroutet wurde. Nachdem ich die entfernt habe und mit dem /23-er wie oben beschrieben das Ganze konfiguriert habe, klappte alles auf Anhieb!
Member: aqui
aqui Apr 24, 2023, updated at Jul 01, 2023 at 18:59:53 (UTC)
Goto Top
meine Lösung wäre jetzt einfach ein NAT gewesen.
Hätte auch nicht geklappt, weil du damit die Problematik der statischen Route nicht hättest lösen können.
Klasse das es nun rennt wie es soll. 👍👏

Wird sicher auch dem Kollegen @Visucius helfen dessen Thread wir hier etwas "gekapert" haben aber wenn es der Lösung dient ist das ja für einen guten Zweck...?!
Mit den IP Netzwerken muss man natürlich aufpassen das man keine doppelten Netze hat. Das ist aber eine Binsenweisheit die ja allgemein immer gilt beim IP Adressdesign. 😉
Case closed...
Member: Graefe
Graefe Jul 24, 2023 updated at 12:32:00 (UTC)
Goto Top
@aqui: Was für eine tolle Beachreibung! Danke!

Eine Frage: Ich habe eine FB A, die als Wireguard-Server einer anderen FB B arbeitet. Alles ok.
FB A soll nun gleichzeitig Initiator eine zweiten Site-to-Site-Wireguard-Verbindung mit einem anderen Wireguard-Server sein (Debian, wie von Dir ganz oben beschrieben).
Geht das überhaupt? Und wie kriegt man denn die Config-Datei auf die FB A? Einfach „as is“ importieren? Was passiert dann mit den vorhandenen Konfigurationen?
Member: aqui
aqui Jul 24, 2023 updated at 14:02:31 (UTC)
Goto Top
Danke für die 💐 ! 😊
FB A soll nun gleichzeitig Initiator eine zweiten...
Das ist ein Interessanter Aspekt. Leider kann man bei der FB nicht wie im Gegensatz bei klassischen Wireguard Konfigs oder IPsec einfach einen zusätzlichen Peer dazukonfigurieren, denn das lässt die "spezielle" AVM Konfiguration so nicht zu. Bei Wireguard muss in der FB die komplette Konfig neu gemacht werden.
Das Problem ist das Importieren der notwendigen Keys was normal kein Thema ist aber leider sieht AVM das so in seiner Implementation nicht vor. Keys gehen beim Neuupload der Konfig verloren und damit auch die Konfig an sich. Ist sicher nicht so einfach...
Eine manuelle Anpassung über den Abschnitt der VPN Konfiguration in der Sicherungsdatei (ab Abschnitt vpncfg {....} hilft da leider auch nicht. face-sad

Ein wasserdichter und ggf. besserer Workaround ist für die Anbindung an den Debian Server stattdessen IPsec zu verwenden.
Beide VPN Installationen koexistieren auf der Fritzbox ohne Probleme und Strongswan ist im Handumdrehen auf dem Debian installiert. Eine detailierte Lösung findest du hier:
IKEv2 VPN Server für Windows und Apple Clients mit Raspberry Pi
Du benötigst natürlich lediglich den Connection Part der FritzBox in der Konfig. 😉
Member: Graefe
Graefe Jul 24, 2023 at 15:38:08 (UTC)
Goto Top
Hm, das hatte ich geahnt…
IPSec/StrongSwan auf Debian habe ich aktuell am laufen. Da der Tunnel für eine Backup-Lösung dient, hätte ich gerne den angeblich „sagenhaft“ bessere Durchsatz von Wireguard genutzt (wobei ich nicht einmal weiß, ob nicht das Synology Hyper Backup der eigentliche Flaschenhals ist).

Alternativ könnte man wohl auch das Debian als Initiator konfigurieren und die FB A ausschließlich als Wireguard-Server nutzen. Oder FB B zum Server machen und Fritzbox A als Initiator für Debian und FB B, oder?

Danke
Graefe
Member: aqui
aqui Jul 25, 2023 at 07:40:10 (UTC)
Goto Top
IPSec/StrongSwan auf Debian habe ich aktuell am laufen.
Dann wäre das doch perfekt. face-wink
So "sagenhaft" ist der Unterschied in der aktuellen Firmware gar nicht solange man nicht mit SHA512 Hashing in Verbindung mit DH14 arbeitet an der FB. (Siehe dazu HIER)
Ist also besser man belässt es bei SHA1 und DH2 oder DH14.
Bester Kompromiss ist es dann die LT8 (Standard 8 Stunden Lifetime) Variante im Main Mode (Tutorial) zu verwenden und mit SHA1, 512 und DH2 zu arbeiten was superstabil rennt.
Alternativ könnte man wohl auch das Debian als Initiator konfigurieren
Ja, das geht problemlos wenn du mit diesen Varinaten das bezogen auf Wireguard meinst. Mit IPsec geht das ja so oder so immer.
Member: Visucius
Visucius Jul 25, 2023 at 08:09:06 (UTC)
Goto Top
@aqui:

Vielen Dank für Deine Bemühungen. Kann es gerade nicht selber testen, mangels Zeit. Gehe aber – bei der von Dir gewohnten Perfektion – davon aus, dass das so fliegt und habe die 2 entsprechenden "Haupt"-Beiträge als Lösung markiert.

Vielen Dank nochmal ... vermutlich auch von vielen anderen, die den Thread hier ggfs. für Google finden face-wink
Member: aqui
aqui Jul 25, 2023, updated at Sep 01, 2023 at 09:16:54 (UTC)
Goto Top
Ja, klappt alles wasserdicht und absolut stabil. Nicht nur mit Mikrotik sondern auch mit OPNsense / pfSense und generell allen routenden Endgeräten die Wireguard supporten.

Dein Thread sollte hier aber nicht weiter "gekapert" 🏴‍☠️ werden und bei neuen Fragen besser auch ein neuer Thread eröffnet werden mit einem entsprechenden Verweis. 😉
Member: Graefe
Graefe Jul 25, 2023 at 20:08:21 (UTC)
Goto Top
Zitat von @aqui:

Bester Kompromiss ist es dann die LT8 (Standard 8 Stunden Lifetime) Variante im Main Mode (Tutorial) zu verwenden und mit SHA1, 512 und DH2 zu arbeiten was superstabil rennt.

Könntest Du als Beispiel eine entsprechende config für StrongSwan posten?
Member: aqui
aqui Jul 26, 2023, updated at Sep 01, 2023 at 09:17:42 (UTC)
Goto Top
Ist doch schon alles hier im Forum! face-wink Guckst du hier:
IKEv2 VPN Server für Windows und Apple Clients mit Raspberry Pi
Den unteren Teil "ikev2-mobile-defaults {...}" kannst du dir wegdenken der ist nur fürs Dialin VPN mit IKEv2. Die Phase2 SAs local_ts und remote_ts musst du auf deine IP Adressierung anpassen. Local ist hier die 2te. Loopback Adresse. Die 2te Loopback brauchst du nur dann wenn du einen "one armed" Server hast wie z.B. einen vServer der nur ein Internet Interface hat. Ansonsten legst du local_ts auf das LAN IP Netz bzw. die Netze die du im VPN Tunnel bedienen willst.

Deine Strongswan sollte dann so aussehen. Beachte das diese das neue und modernere swanctl Konzept benutzt für das Setup!!:
connections {
   fritzbox {
      local_addrs = <server_ip_addresse>
      remote_addrs = 0.0.0.0/0
      local {
          auth = psk
          id = <server_ip_addresse>
          }
      remote {
          auth = psk
          id = keyid:strongswan@fritz.box
          }
      children {
          net {
              local_ts = 172.25.25.0/28
              remote_ts = 192.168.178.0/24
              esp_proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
              }
          }
       version = 1
       proposals = aes256-sha512-modp1024,aes256-sha1-modp1024
   }
}
secrets {
 ike-1 {
      id = keyid:strongswan@fritz.box
      secret = "test1234"    
     }
} 

Die dazu korrespondierende Fritzbox VPN Konfig Datei zum Importieren:
vpncfg {
        connections {
                enabled = yes;
                editable = no;
                conn_type = conntype_lan;
                name = "StrongSwan";    
                always_renew = no;
                reject_not_encrypted = no;
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = <server_ip_addresse>;
                remote_virtualip = 0.0.0.0;
                keepalive_ip = 172.25.24.1;
			localid {
                        key_id = "strongswan@fritz.box";    
                        }
                        remoteid {
                        ipaddr = <server_ip_addresse>;
                        }
                mode = phase1_mode_idp;
                phase1ss = "LT8h/all/all/all";    
                keytype = connkeytype_pre_shared;
                key = "test1234";    
                cert_do_server_auth = no;
                use_nat_t = yes;
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.178.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 172.25.25.0;
                                mask = 255.255.255.240;
                        }
                }
                phase2ss = "esp-all-all/ah-none/comp-all/pfs";    
                accesslist = "permit ip any 172.25.25.0 255.255.255.240";    
        }
        ike_forward_rules = "udp 0.0.0.0:500 0.0.0.0:500",     
                            "udp 0.0.0.0:4500 0.0.0.0:4500";    
} 
Wenn das eine etwas längere Session wird hier, solltest du einen separaten Thread aufmachen mit einem hiesigen Verweis darauf um nicht den Thread des Kollegen @Visucius hier vollzumüllen. face-wink