tripod
Goto Top

Mikrotik WireGuard VPN Probleme

Moin zusammen,

testweise möchte ich statt des bisherigen OpenVPN-Raspis bei mir WireGuard nun direkt auf dem MT-Router einrichten. Mit dem VPN bezwecke ich grundsätzlich zwei Dinge:
  • von unterwegs Zugriff auf einzelne Server in meinem Heimnetz (bzw. in einzelne Teilnetze)
  • von unterwegs bei Bedarf "sicher" surfen (z.B. wenn man in einem Hotel-WLAN mit dem Smartphone steckt)

Mit dem OpenVPN-Setup läuft alles einwandfrei. Da MT in der 7er Version von ROS das nun integriert hat, besteht die Chance dass nun direkt dort laufen zu lassen, so dass ich auf den OpenVPN-Raspi verzichten kann (ja, ich weiß, OpenVPN ist bei ROS auch mit dabei, aber die Konfiguration fand ich nicht so prickelnd).

Hier im Forum habe ich diverse gute Beiträge gefunden und versucht mich daran entlang zu hangeln - aber wie so häufig, ist der Teufel offenbar ein Eichhörnchen.

WG-Config auf dem MT-Router:
(Hinweis: Entsprechende Established/Related-Regeln sind bereits vorhanden)
/interface wireguard
add listen-port=13231 mtu=1420 name=wg0 private-key="XXX" public-key="YYY"  
/interface wireguard peers
add allowed-address=192.168.40.10/32 comment=Test interface=wg0 public-key="BBB"  
/ip firewall filter
add action=accept chain=input comment="allow WG-VPN connections" dst-port=13231 in-interface=WAN protocol=udp  
add action=accept chain=forward comment="allow WG-VPN to WAN" out-interface-list=WAN src-address=192.168.40.2-192.168.40.254  
/ip address
add address=192.168.40.1/24 interface=wg0 network=192.168.40.0


WG-Config auf dem Peer:

[Interface]
PrivateKey = AAA
Address = 192.168.40.10/32

[Peer]
PublicKey = YYY
Endpoint = meine.domain.de:13231
AllowedIPs = 0.0.0.0/0

Das Testgerät baut laut App eine Verbindung auf, aber es werden nur Daten gesendet (tx>0) und nix empfangen (rx=0). Vom Testgerät aus kann ich bei aktiviertem WG-VPN weder ins Internet noch irgendwelche internen (z.B. 192.168.40.1) oder externen IPs (z.B. 8.8.8.8) anpingen.

Die Input-Rule greift, d.h. im Log kann ich sehen das was reinkommt. Allerdings nicht bei der Forward-Rule, da kommt nix an. Die Status-Anzeige beim Peer im WireGuard-Dialog zeigt unter Rx/Tx 0 Bytes an, dementsprechend auch keinen last Handshake.

Vermutlich habe ich irgendein Brett vorm Kopf, da bereits der Handshake nicht funktioniert?!

Content-Key: 1667151743

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

Printed on: April 27, 2024 at 21:04 o'clock

Member: Tripod
Tripod Dec 28, 2021 at 23:16:01 (UTC)
Goto Top
Das Hauptproblem konnte ich gerade lösen:
  • Statt das Private/Public-Key-Pair für den jeweiligen Peer in zwei Schritten per wg genkey > private.key und wg pubkey < private.key > public.key zu erzeugen, habe ich den Einzeiler wg genkey | tee private.key | wg pubkey > public.key probiert
  • Das daraus resultierende Paar hat die Verbindungsprobleme gelöst

Dann bleiben bei mir noch 1..2 Fragezeichen:
  • Das WG-Interface hängt ja nicht an der VLAN-Bridge (darf es vermutlich auch gar nicht?); folglich kann ich das vorher genutzte VPN-VLAN entfernen da es sinnlos ist (da stand bisher der OpenVPN-Raspi drin)
  • Im WG-Tunnel kann ich kein DHCP nutzen, die IP wird ja praktisch statisch eingetragen. Wie kann ich den MT nun dennoch weiterhin als DNS/NTP-Server bzw Gateway nutzen? Die diesbezügliche Konfiguration liegt ja unter dem DHCP-Server (ich meine nicht die DNS-Config auf dem WG-Peer, sondern im MT)
Mitglied: 149569
Solution 149569 Dec 29, 2021 updated at 10:27:11 (UTC)
Goto Top
Zitat von @Tripod:
Dann bleiben bei mir noch 1..2 Fragezeichen:
  • Das WG-Interface hängt ja nicht an der VLAN-Bridge (darf es vermutlich auch gar nicht?); folglich kann ich das vorher genutzte VPN-VLAN entfernen da es sinnlos ist (da stand bisher der OpenVPN-Raspi drin)
Die Bridge bietet das Interface überhaupt nicht zum Hinzufügen an, geht also aus Prinzip nicht. Man kann zwar eine Interface-Liste mit dem WG-Interface darin anlegen und diese in der Bridge als Port hinzufügen, das funktioniert am Ende dann aber nicht weil das WG-Interface in der Liste ignoriert wird.

* Im WG-Tunnel kann ich kein DHCP nutzen, die IP wird ja praktisch statisch eingetragen.
Korrekt.
Wie kann ich den MT nun dennoch weiterhin als DNS/NTP-Server bzw Gateway nutzen?
Indem du in der Wireguard-Config des Clients die IP des Mikrotik als DNS-Server hinterlegst, also unter [Interface] einen Eintrag anlegst der wie folgt aussieht DNS = 192.168.40.1
Und natürlich die in der Firewall den DNS-Port (53 UDP/TCP) für das Wireguard-Netz freigeben nicht vergessen!
/ip/firewall/filter 
add chain=input src-address=192.168.40.0/24 in-interface=wg0 protocol=udp dst-port=53 action=accept
add chain=input src-address=192.168.40.0/24 in-interface=wg0 protocol=tcp dst-port=53 action=accept
NTP-Server musst du hier manuell auf dem Client setzen.
Die diesbezügliche Konfiguration liegt ja unter dem DHCP-Server (ich meine nicht die DNS-Config auf dem WG-Peer, sondern im MT)
Die DHCP Config ist für das Wireguard-Netz irrelevant da Multicasts und Broadcast über einen Wireguard-Tunnel nicht übertragen werden, um das zu nutzen müsstest du erst einen weiteren Tunnel (z.B. IPIP, EoIP, GRE, etc.) in den WG-Tunnel legen. Dann ist aber auch auf dem Client eine entsprechende Config nötig wenn dieser das überhaupt anbietet, die meisten mobilen Clients sind dann ausgeschlossen.
Member: aqui
aqui Dec 29, 2021 at 11:49:42 (UTC)
Goto Top
Oder....
Man nimmt als Alternative statt der ganzen Frickelei oben einen L2TP VPN Server:
Scheitern am IPsec VPN mit MikroTik
Hat den unschätzbaren Vorteil das man bei allen Endgeräten egal ob Rechner oder Smartphone immer den eingebauten Onboard Client verwenden kann und sich die Mühe mit externer Client Software erspart. face-wink
Mitglied: 149569
149569 Dec 29, 2021 updated at 11:54:45 (UTC)
Goto Top
Man sollte übrigens auch auf eine aktuelle Winbox-Version achten wenn man GUI Jüngling ist, damit werden ein paar Fehler in der Winbox GUI für Wireguard ausgebügelt, wie bspw. das Verschwinden von ::/0 bei Eintrag in die AllowedIPs
https://forum.mikrotik.com/viewtopic.php?t=181663
Member: Tripod
Tripod Dec 30, 2021 at 23:29:16 (UTC)
Goto Top
Zitat von @149569:
Indem du in der Wireguard-Config des Clients die IP des Mikrotik als DNS-Server hinterlegst, also unter [Interface] einen Eintrag anlegst der wie folgt aussieht DNS = 192.168.40.1
Und natürlich die in der Firewall den DNS-Port (53 UDP/TCP) für das Wireguard-Netz freigeben nicht vergessen!
/ip/firewall/filter 
add chain=input src-address=192.168.40.0/24 in-interface=wg0 protocol=udp dst-port=53 action=accept
add chain=input src-address=192.168.40.0/24 in-interface=wg0 protocol=tcp dst-port=53 action=accept

Jip, waren schon drin, hatten aber tatsächlich eine Einschränkung auf der Input-Chain zuviel (VLAN), nachdem ich die rausgeworfen hatte, funktionierte das Test-Setup.

Die DHCP Config ist für das Wireguard-Netz irrelevant da Multicasts und Broadcast über einen Wireguard-Tunnel nicht übertragen werden, um das zu nutzen müsstest du erst einen weiteren Tunnel (z.B. IPIP, EoIP, GRE, etc.) in den WG-Tunnel legen. Dann ist aber auch auf dem Client eine entsprechende Config nötig wenn dieser das überhaupt anbietet, die meisten mobilen Clients sind dann ausgeschlossen.

Richtig, allerdings hat MT - zumindest über die GUI - die Konfiguration für einen DNS-Server innerhalb der DHCP-Server-Dialogs integriert. Das führte zum einer Frage, weil ich keine weitere Stelle zur Konfiguration gefunden hatte, sprich keine Stelle wo ich am MT einen DNS-Server mit der IP 192.168.40.1 angeben konnte. Da es allerdings gestern mit deaktiviertem DHCP-Config hier funktioniert hat, gehe ich davon aus, dass das der MT automatisch so macht (und die Angabe in der DHCP-Config dann nur dem Weiterreichen des DNS an den DHCP-Client dient)

ABER:
  • Nachdem ich es heute nochmal "ordentlich" machen wollte, habe ich offenbar irgendwas geschrottet. Der Client/Peer kann sich per WG verbinden; am MT kann ich auch den Last Handshake sehen.
  • Aber alles danach, egal ob Aufruf einer Website per URL oder direkt per IP geht nicht mehr.
  • Am Client wird unter tx ein stetiger Versand angezeigt; die rx Rate bleibt sehr flach, hier kommt also nur wenig zurück. Gleiches sieht man auch in den zugehörigen FW-Regeln, bei der Input-Chain kommt was an; bei der Forward-Chain kommt nix an
  • Selbst mit testweise deaktiviertem Drop All (letzte Regel bei Forward) klappt keine weitere Datenverbindung. Auch nicht mit einem zweiten Client/Peer und einem anderen Schlüsselpaar.

MT
/interface wireguard
add listen-port=51820 mtu=1420 name=wg0

/interface wireguard peers
add allowed-address=192.168.40.10/24 comment=Client1 interface=wg0 public-key="<Public-Key-Client>"  

/ip firewall filter
add action=accept chain=input comment="allow DNS requests over UDP from WG-VPN" dst-address=192.168.40.1    dst-port=53 protocol=udp src-address=192.168.40.2-192.168.40.254  
add action=accept chain=input comment="allow DNS requests over TCP from WG-VPN" dst-address=192.168.40.1 dst-port=53 protocol=tcp src-address=192.168.40.2-192.168.40.254  
add action=accept chain=input comment="allow WG-VPN connections" dst-port=51820 in-interface-list=WAN log=yes log-prefix="[WG]" protocol=udp src-port=""  
add action=accept chain=forward comment="allow WG-VPN to WAN" connection-state="" log=yes log-prefix="[WG-to-WAN]" out-interface-list=WAN src-address=192.168.40.2-192.168.40.254  

Client
[Interface]
PrivateKey = <Private-Key-Client>
Address = 192.168.40.10/24
DNS = 192.168.40.1

[Peer]
PublicKey = <Public-Key-Server>
Endpoint = <meine.domain.de>:51820
AllowedIPs = 0.0.0.0/0

Hat jemand einen Tipp wo ich gerade den Wald vor lauter Bäumen nicht mehr sehe?
Mitglied: 149569
149569 Dec 31, 2021 updated at 07:03:15 (UTC)
Goto Top
Zitat von @Tripod:


Richtig, allerdings hat MT - zumindest über die GUI - die Konfiguration für einen DNS-Server innerhalb der DHCP-Server-Dialogs integriert.
Natürlich aber das gilt für wireguard überhaupt nicht da hier kein DHCP stattfindet!
Das führte zum einer Frage, weil ich keine weitere Stelle zur Konfiguration gefunden hatte, sprich keine Stelle wo ich am MT einen DNS-Server mit der IP 192.168.40.1 angeben konnte.
Den DNS Proxy aktiviert man unter
/ip dns set allow-remote-requests=yes
Der reagiert auf alle seine IPs die man in seiner Firewall für DNS freischaltet, und dort muss entweder ein statischer DNS-Forwarder eingetragen werden oder dieser über einen DHCP Client am WAN bezogen werden.

Da es allerdings gestern mit deaktiviertem DHCP-Config hier funktioniert hat, gehe ich davon aus, dass das der MT automatisch so macht (und die Angabe in der DHCP-Config dann nur dem Weiterreichen des DNS an den DHCP-Client dient)
Nur wenn der DNS Proxy aktiviert ist beantwortet dieser auch DNS Anfragen !

ABER:
  • Nachdem ich es heute nochmal "ordentlich" machen wollte, habe ich offenbar irgendwas geschrottet. Der Client/Peer kann sich per WG verbinden; am MT kann ich auch den Last Handshake sehen.
  • Aber alles danach, egal ob Aufruf einer Website per URL oder direkt per IP geht nicht mehr.
Hat jemand einen Tipp wo ich gerade den Wald vor lauter Bäumen nicht mehr sehe?

Du hast entweder den DNS Proxy abgeschaltet (siehe oben) oder du hast das Masquerading fur den ausgehenden Traffic des Wireguard-Netzes in der SRCNAT Chain vergessen, denn wenn du mit den Client's darüber surfen willst musst du diesen Traffic am WAN auf die WAN-IP NATen
/ip firewall nat add chain=srcnat out-interface-list=WAN action=masquerade
Ansonsten wie immer ein
/export hide-sensitive
hier posten, dann ist das schnell erledigt, sind ja eh meist nur Flüchtigkeitsfehler oder fehlendes Wissen über den Traffic-Flow.
Member: Tripod
Tripod Dec 31, 2021 at 13:21:39 (UTC)
Goto Top
Danke für die angebotene Unterstützung!

Hab den Fehler gerade gefunden, nachdem ich die WG-Config nochmal neu aufgesetzt habe ist mir aufgefallen, dass das Ganze nicht mehr funktioniert, sobald ich auf dem MT einen zweiten Peer angelegt hatte.

Mein Fehler lag darin, dass ich auf dem MT unter der WG-Peer-Config bei Allowed Address "/24" hinter den IPs geschrieben habe ... na klar, WG macht darüber das Routing und routet dann auf das Netz und nicht die einzelne IP. Bei den Peers habe ich nun "/32" für den einzelnen Host dahinter gemeißelt und nun läufts
Member: aqui
aqui Dec 31, 2021 updated at 13:59:36 (UTC)
Goto Top
Bei den Peers habe ich nun "/32" für den einzelnen Host dahinter gemeißelt
Wenn man das Tutorial (und auch die WG Doku) dazu wirklich einmal gelesen hätte, wäre das schon vorher klar gewesen. face-wink
Wie gesagt: Mit L2TP viel einfacher, gleiche Performance, bordeigene Clients statt Frickelei mit 3rd Party VPN Clients....aber egal.
und nun läufts
Na dann kann 2022 ja kommen... 🥂🎉
Member: Tripod
Tripod Dec 31, 2021 at 14:01:24 (UTC)
Goto Top
Zitat von @aqui:
Wie gesagt: Mit L2TP viel einfacher, gleiche Performance, bordeigene Clients statt Frickelei mit 3rd Party VPN Clients....aber egal.

Habe ich gesehen und werde ich auch nochmal ausprobieren - aber erst im nächsten Jahr face-smile