wusa88

Wireguard Client Docker, Mikrotik Router

Hallo zusammen,
ich versuche momentan dieses Image auf einem VPS mit Docker zu nutzen.
https://hub.docker.com/r/linuxserver/wireguard

Das ganze soll als Client genutzt werden.
Der Wireguard Server ist bei mir ein Mikrotik in meinem Heimnetzwerk.
Wireguard an sich funktioniert ohne Probleme. Das nutze ich bereits auf Tablets, Handys und Notebooks.

In der Dokumentation ist eine Anleitung, wie ich das ganze als Client nutzen kann, allerdings komme ich hier nicht wirklich weiter.

Folgendes habe ich bisher gemacht.
Ich habe auf einem Ubuntu die Keys erstellt nach dieser Anleitung:
https://www.wireguard.com/quickstart/#key-generation
wg genkey > privatekey
wg pubkey < privatekey > publickey

Die Keys habe ich dann in die conf Datei eingefügt:
[Interface]
Address = 192.168.77.5/32
PrivateKey = privatekeywurdezensiertgHj+kng=
ListenPort = 13333
DNS = 192.168.77.1

[Peer]
PublicKey = publickeywurdezensiert0FzMSJCM=
Endpoint = mydyndns.net:13333
AllowedIPs = 0.0.0.0/0

Die Mikrotikseite wurde demensprechend auch angepasst.
Der Publickey wurde in WG in Mikrotik hinterlegt.

Die Docker Compose Datei sieht wie folgt aus:
ervices:
  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard
    cap_add:
      
NET_ADMIN
SYS_MODULE #optional
environment:
PUID=1000
PGID=1000
TZ=Europe/Berlin

volumes:
/root/docker/wg-client/config:/config
/lib/modules:/lib/modules #optional
ports:
13333:51820/udp
sysctls:
net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped

Ich nutze nicht den Standardport von WG sondern, 13333.

Ich hänge jetzt, da ich nicht weiß wo ich den geänderten Port eintragen soll/muss.
Ich habe es mit mit
ports:
13333:51820/udp
Oder
ports:
13333:13333/udp

Oder auch in der confi Datei mit verschiedensten Varianten versucht. Leider kommt keine Verbindung zu stande.

Log vom Conatainer sagt folgendes:
Found WG conf /config/wg_confs/peer.conf, adding to list 
Activating tunnel /config/wg_confs/peer.conf 
Warning: `/config/wg_confs/peer.conf' is world accessible  
[#] ip link add peer type wireguard
[#] wg setconf peer /dev/fd/63
[#] ip -4 address add 192.168.77.5/32 dev peer
[#] ip link set mtu 1420 up dev peer
[#] resolvconf -a peer -m 0 -x
s6-rc: fatal: unable to take locks: Resource busy
[#] wg set peer fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev peer table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] iptables-restore -n

Ich komme hier leider nicht mehr weiter.
Vielleicht hat jemand den Container am laufen oder jemand kann mir Helfen.

Danke
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 672754

Url: https://administrator.de/forum/wireguard-client-docker-mikrotik-router-672754.html

Ausgedruckt am: 29.05.2025 um 01:05 Uhr

151632
151632 06.05.2025 um 10:43:26 Uhr
Goto Top
Hallo wusa88.

Versuch einen anderen Port. Idealerweise beginnend ab 51820 (Standard).

Gruß
wusa88
wusa88 06.05.2025 um 10:48:33 Uhr
Goto Top
Das ist schwierig, weil bereits die anderen Geräte wie Handy usw. schon auf dem Port laufen.
Würde ich ungern umstellen. Außerdem wollte ich nicht den Standardport haben.
aqui
aqui 06.05.2025 aktualisiert um 11:36:53 Uhr
Goto Top
Folgendes habe ich bisher gemacht.
Das hiesige Tutorial und die Mikrotik Hinweise in den weiterführenden Links hast du auch genau gelesen und umgesetzt??
Merkzettel: VPN Installation mit Wireguard

Die Verwendung von UDP 13333 ist nicht zu empfehlen, weil du damit innerhalb der von der IANA fest zugewiesenen Port Range liegst! face-sad
Verantwortungsvolle Admins verwenden niemals diese weltweit offizell fest registrierten Ports sondern immer Ports innerhalb der Ephemeral Port Range 49152 bis 65535!
wusa88
wusa88 06.05.2025 um 11:51:23 Uhr
Goto Top
13225-13399 Unassigned
Aber Danke, und gut zu Wissen, dann werde ich die Ports in diese Range ändern.

Dann muss ich leider doch nochmal über alle Geräte drüber.

Dennoch, soweit ich erkennen kann, sollte die Config so passen. Es wird aber kein Tunnel aufgebaut und auf der Mikrotik Seite sehe ich auch keine zugewiesen Current Endpoint Address.

Irgendwo ist der Haken bei dem Container.
aqui
Lösung aqui 06.05.2025 aktualisiert um 17:07:39 Uhr
Goto Top
Das Setup ist ja eigentlich eine Lachnummer für einen Admin und deine Problematik ist sehr wahrscheinlich keine Wireguard Problematik, denn da kann man ja nun nicht viel falsch machen. Vielmehr, wie du ja auch schon selber sagst, liegt es an der Container Frickelei.


back-to-topWireguard Server auf dem Mikrotik einrichten:


mt-wg-srv

back-to-topWG Client Peer für den Docker Client konfigurieren und Ping checken:


mt-wg-srvpeer

back-to-topDocker Client wg0.conf Datei


Hier als Beispiel in einem resourcenschonenden Split Tunnel Setup statt Redirect.
[Interface]
Address = 10.8.8.1/24
PrivateKey = 6NUtZ1YPmFWpjN2jU7XUA3rMeUU1SwIFKldzt48zF34=

[Peer]
PublicKey = U8Pc4LMzf2pFDlqIMeps5ovd/eyRKG0PWbUwG7iMCyo=
Endpoint = <Mikrotik>:58333
AllowedIPs = 10.8.8.254/32
PersistentkeepAlive = 25 

Fertisch....
Works as designed in 10 Minuten! 👍
wusa88
wusa88 06.05.2025 um 15:50:47 Uhr
Goto Top
Das es ein Lachnummer sein sollte, dachte ich auch.

Leider hat mir der Container einen Streich gespielt.

Der Container hat nicht den Publickey übernommen, welchen ich erzeugt hatte, sondern hat aus dem Privatekey innerhalb dem Container einen anderen Publickey erzeugt.

Sobald ich diesen Publickey an Mikrotik übergeben funktionierte es.
ich war selbst schon am Zweifeln mit mir, aber der Key war das ausschlagebende Problem.
aqui
aqui 06.05.2025 aktualisiert um 16:16:44 Uhr
Goto Top
funktionierte es.
👏 Dann bleibt ja eigentlich nur noch den Thread als erledigt zu schliessen...!
Wie kann ich einen Beitrag als gelöst markieren?

P.S.:
hat aus dem Privatekey innerhalb dem Container
Innerhalb des Containers...
Der Dativ ist dem Genitiv sein Tod! face-wink
wusa88
wusa88 06.05.2025 aktualisiert um 22:13:02 Uhr
Goto Top
Jetzt muss ich das ganze doch nochmal aufgreifen.
Die Verbindung steht wunderbar mit dem Client2Site Konstrukt.

Da ich allerdings einen zweiten Docker Container anbinden will, brauche ich jetzt vermutlich eine Site to Site Verbindung, damit ich die Netzwerkadresse im Docker Container erreichen kann?

Momentan hat der Docker Wireguard Client die IP Adresse 192.168.77.5/32.
Der Docker Container selbst, hat noch die IP 172.18.0.2 (172.18.0.0/16) mit Gateway 172.18.0.1

Damit ich innerhalb des Docker ContainerNetzwerks arbeiten kann ist vermutlich Site to Site pflicht?

Bin ich mit dieser Config auf dem richtigen Weg?
[Interface]
PrivateKey = Cxxxxxxx7adDi1p2UlhPFXdH4HHw=
Address = 172.18.0.2/32,172.18.0.0/16,192.168.77.5/32
ListenPort = 13333

[Peer]
PublicKey = Jkdn62xxxxxxxxO5kpq+oZdK/17XAY=
AllowedIPs = 0.0.0.0/0
Endpoint = mydyndns.net:13333
PersistentKeepalive = 25
aqui
Lösung aqui 07.05.2025 aktualisiert um 11:31:25 Uhr
Goto Top
Bin ich mit dieser Config auf dem richtigen Weg?
Nein! Leider bist du völlig auf dem Holzweg! face-sad

Unter Address wird ausschliesslich NUR die interne Wireguard Client IP gesetzt und das auch mit der im internen Wireguard Netz verwendeten korrekten Subnetzmaske und niemals mit einer /32er Hostmaske. Diese findet nur Verwendung unter den AllowedIPs! Also dem Parameter, der bestimmt welcher IP Traffic in den VPN Tunnel geroutet werden.
Du machst mit der "0.0.0.0/0" oben unter den AllowedIPs ein "Gateway Redirect"!! Damit wird sämtlicher Traffic dieses Clients in den VPN Tunnel geroutet und macht eine separate Angabe des Docker Netze damit logischerweise obsolet. Das wäre nur erforderlich wenn du eine sinnvollere Konfig mit Split Tunneling machst statt Redirect.
Redirect ist eher eine schlechte Konfig wenn man resourcenschonend lediglich nur die Zielnetze routen will (Split Tunneling) und nicht gleich schrotschussartig sämtlichen Traffic des Clients.

Desweiteren ist die Angabe eines Listen Ports bei einem WG Client völliger Blödsinn, denn der wird am Client immer dynamisch bestimmt.
Ein Client lauscht (listen) ja niemals auf eingehende Wireguard Verbindungen wie ein Server! Der Zielport wird dem Client immer mit der Endpoint Definition mitgegeben. Den Listen Unsinn am Client kannst du also gleich löschen!

Dieser völlig falsche Ansatz zeigt leider das du mit keiner Zeile das dir oben zur Hilfestellung gepostete Wireguard Tutorial gelesen und/oder verstanden hast! 😡
Dort wird dir in allen Details erklärt was Gateway Redirect, Split Tunneling ist und wie die korrekte IP Adressierung der in den Tunnel zu routenenden IP Netze bei den AllowedIPs aussieht.
Nimm dir also bitte die Zeit und lies dir das in aller Ruhe durch, dann musst du auch nicht solche völlig falschen Dinge hier als Admin posten! Zum weiterhin nicht konform konfigurierten Zielport jetzt mal gar nichts gesagt.
Ebenso zur Verwendung der /16er Prefixes. Niemand kann und will 65534 Endgeräte in einem IP Netz adressieren. Hier zeigen sich leider auch grobe Defizite in der IP Adressierungsplanung. face-sad
Einem verantwortungsvollen "Admin" sollte so etwas nicht passieren...

So sähe eine vernünftige Client Konfig im Split Tunneling Mode aus, wobei jetzt frei geraten ist das das interne Wireguard IP Netz (192.168.77.0) eine /24er Maske verwendet und der Wireguard Server (Mikrotik) darin die .77.1 verwendet?! Leider machst du zur IP Adressierung (insbesondere der WG IP Adressierung) keine genauen Angaben mit WinBox Screenshots etc. was eine zielführende Hilfe nicht gerade erleichtert.
[Interface]
PrivateKey = Cxxxxxxx7adDi1p2UlhPFXdH4HHw=
Address = 192.168.77.5/24

[Peer]
PublicKey = Jkdn62xxxxxxxxO5kpq+oZdK/17XAY=
AllowedIPs = 192.168.77.1/32
Endpoint = mydyndns.net:58333
PersistentKeepalive = 25 
Wenn auf der Docker Client Seite noch das 172.18.0.0/16 IP Netz liegt was erreicht werden muss dann musst du das natürlich am Server unter den Allowed IPs einstellen. Das ergänzt man dann im Peer Setup des Docker Clients auf dem Mikrotik (WG Server).
Logisch, denn der Server muss ja wissen das er allen Traffic mit 172.18.x.y Zieladressen in den VPN Tunnel zu diesem Client Peer schicken muss.
wgallo

⚠️ Der Mikrotik lernt remote Wireguard Netze nicht dynamisch! Die musst du in seiner Routing Tabelle immer statisch eintragen! Nur das du das auf dem Radar hast.
wusa88
wusa88 07.05.2025 um 10:42:13 Uhr
Goto Top
@aqui
Es tut mir wirklich leid, aber mit VPN habe ich nie wirklich viel zu tun. Daher habe ich hier auch öfter mal einen Knoten im Kopf...

Ich fasse kurz zusammen.
Mein Netz zuhause ist 192.168.7.0/24
Das Wireguard Interface hat 192.168.77.0/24

Das Netz welches ich auf dem VPS erreichen bzw. der Docker Container bekommt die 172.18.0.0/16
Der Container selbst hat nach dem Starten die 172.18.0.2

Meine Config sieht momentan wie folgt aus:
clipboard-image

[Interface]
PrivateKey = 2J6Q78xxxxxxxxxxxxxxxxxxxxxxxxxxxxS3lqQWg=
Address = 192.168.77.5/24

[Peer]
PublicKey = +o2ajzxxxxxxxxxxxxxxxxxxxxxxxxxxxxFzMSJCM=
AllowedIPs = 192.168.77.1/32, 192.168.7.0/24
Endpoint = mydyndns.net:63558
PersistentKeepalive = 25

Ich habe auch den WG Port in einen freien Port wie von die vorgeschlagen verschoben.

Jetzt ist es so, ich erreiche aus dem Container die komplette IP Range von 192.168.7.0/24
Auch die IP 192.168.77.1 erreiche ich.

Von meinem PC aus, erreiche ich den Container allerdings nur mit der IP 192.168.77.5.
Mit der IP 172.18.0.2 kommt keine Ping zurück.
BiberMan
Lösung BiberMan 07.05.2025 aktualisiert um 11:00:28 Uhr
Goto Top
Mit der IP 172.18.0.2 kommt keine Ping zurück.
Die Routen für das was in den allowed-ips des Mikrotik steht werden auf diesem nicht automatisch angelegt, ergo ist Hand anlegen angesagt ...
/ip route add dst-address=172.18.0.0/16 gateway=192.168.77.5
Zusätzlich: Firewall-Regeln des Container-Netzes beachten! Dieses muss auch den Traffc aus dem für ihn fremden Subnetz des Mikrotik auf den Container zulassen.
wusa88
wusa88 07.05.2025 um 11:03:13 Uhr
Goto Top
Vielen Dank.
Jetzt scheint alles so zu klappen wie es soll.

Firewall im Container musste ich tatsächlich nichts umstellen. Ping ging nach der Router im Mikrotik direkt durch.

Danke!