NEWS
Docker iobroker und Wireguard
-
Hallo zusammen,
ich habe mir einen VPS gekauft um ein wenig zu testen und neues zu lernen.
Mir wurde empfohlen, einen Docker Container zu machen und darin Wireguard zu nutzen,
Außerdem soll ich iobroker auch als Docker Container nutzen und die zwei Container miteinander zu verbinden.Ich bin jetzt leider an einem Punkt, an dem ich nicht mehr weiter komme.
Der Wireguard Tunnel steht mit eine Site2Site Verbindung.Der Wireguard Tunnel selbst hat die IP 192.168.77.5/32
Der Wireguard Container hat das Netz 172.18.0.0/16 bzw. die IP 172.18.0.2 bekommen.Der Docker Container hat die IP 172.18.0.3 bekommen.
Ich komme jetzt durch den Tunnel nur auf den Wireguard Container. Allerdings nicht auf den iobroker Container.
Rufe ich allerdings die Docker Console von einem Container auf, dann kann ich den anderen Container pingen.
Wie schaffe ich es die 2 Container zu verbinden und auch durch den Tunnel beide zu erreichen?
Reicht es das Gateway von iobroker auf den Wireguard Container zu ändern oder wie müsste ich hier vorgehen?
Danke -
Du kannst für einen Container verschiedene Netzwerk Modes zu ordnen.
Die wichtigsten, sind der Host Mode, der Bridge Mode und der macvlan ModeBei Host wird das Netzwerk des Containers zu 100% auf den Host gemappt. Also alle notwendigen Ports sind dann auf dem Host auch belegt. Dadurch funktioniert dann auch evtl. notwendiges broadcast. Ein ummachen ist nicht möglich.
Bei Bridge werden nur die angegebenen Ports auf den Host gemappt. Dort kann man dann auch die Nummern ummappen. Broadcast Funktionen gehen hier nicht.
Bei macvlan kann man dem Container eine ip aus dem lan zuordnen. Hier hat man am wenigsten Probleme mit Mapping Konflikte und broadcast funktioniert ebenfalls, ist aber etwas aufwändiger zum konfigurieren, da ein eigenes macvlan Network angelegt werden muss und die ipadressen nicht durch den Router dhcp vergeben werden dürfen.
Der Vorteil von docker, neben der Applications kapselung ist auch die netzwerkkapselung (nicht im Host Mode). D.h. Du kannst sehr genau vorgeben welcher Container mit welchem Container kommunizieren darf. Du kannst beliebig viele Netzwerke definieren. Das ist dann im Container so wie wenn mehrere Netzwerkkarten eingesteckt sind.
Du hast jetzt leider nichts zu deiner Konfiguration geschrieben. Wenn du Hostmode verwendest musst eigentlich nichts machen. Bei Bridge Mode müssen beide Container mit dem Bridge Network verbunden sein oder einem eigenen definierten. Aber am Anfang nicht unbedingt notwendig.
Verwende für die Konfiguration keine ip Adressen, sondern immer nur den containername. Dieser wird automatisch als hostname angelegt.
Wenn 2 Container im gleichen Netz sind und du dichnin einen Container auf die Shell begibst kannst du den anderen Container dann unter dem containernamen anpingen.Die 172er ip Adressen sind immer nur die internen Adressen mit denen du nix anfangen kannst. Dein Container hat bei Host und Bridge immer die ip Adresse deines Hosts, bei macvlan das was man konfiguriert.
Für eine übersichtlichere Konfiguration empfehle ich docker compose (ist schon bei docker mit dabei)
Für eine gui zur besseren leichteren Verwaltung empfehle ich portainer. Lässt sich auch als Container installieren. -
Bezüglich den internen Adressen, dachte ich, dass man diese für die Vernetzung verwenden sollte?
Bevor ich jetzt meine ganze Konfig poste, kann du mir sagen, was das beste vorgehen wäre?
Dann versuche ich das umzusetzen.Bezüglich der Netzwerkmodis, hatte ich noch nichts zu tun. Daher ist macvlan Neuland für mich.
Aber da ich gerne teste, würde ich mich über das beste Setup freuen und ich versuche mich daran.
Docker Compose und Portainer laufen bereits. Die grafische Oberfläche gefällt mir übrigens auch sehr
-
Zur Konfiguration von Container zu Container, immer den Hostnamen/Container Namen verwenden. Für Konfiguration außerhalb von docker nimmst du die IP Adresse des Hosts beziehungsweise bei macvlan halt dann die konfigurierte IP
Hier ein konkretes Beispiel
Du hast einen ioBroker Container und
Du hast beispielsweise eine MySQL Datenbank als separaten Container
Beide sind über das gleiche Netzwerk miteinander verbunden.
Wenn du nun im ioBroker den SQL Adapter konfigurieren willst, dann gibst du nicht die IP Adresse des Containers an, sondern einfach den Containern Namen. Die finden sich dann -
Ok das verstehe ich.
Aber was wäre in meinem Fall das beste vorgehen?
Wireguard läuft im Container. Darin ist eine Site2Site Verbindung.Jetzt will ich den iobroker Container erreichen. Wie muss ich vorgehen, damit ich durch den Tunnel den iobroker erreiche?
-
@wusa
Hier mal ein Beispiel meinre docker-compose definition.
durch dies werden 2 container erzeugt. einmal iobrokertest und einmal redis5
wenn ich den iobroker für redis konfiguriere muss ich anstatt einer ip adresse einfach nur redis5 eintragen. dieser name ist innerhalb des netzwerks iobrokertest eindeutig diesem container zugeordnet. welche konkrete ip adresse das dann ist, kann dir egal sein (wahrscheinlich schon eine von diesen 172er.
das ist zwar ein macvlan netz, aber bis auf die unterdefinition zur ipadresse ist das identisch zu einer bridge mode definition.
bei macvlan muss man ebenfalls die zu öffnenden ports nicht angegeben. bei bridge muss man das allerdings.version: '3' services: iobrokertest: container_name: iobrokertest image: buanet/iobroker:latest-v8 hostname: iobrokertest restart: always volumes: - /home/iobroker/docker/volume/iobroker/test/iobroker:/opt/iobroker environment: DEBUG: "true" networks: macvlanipv6: ipv4_address: 192.168.1.85 iobrokertest: redis5: image: "redis:alpine" volumes: - /home/iobroker/docker/volume/iobroker/test/redis:/data networks: iobrokertest: networks: macvlanipv6: external: true iobrokertest:
-
services: 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-s2s/config:/config # - /lib/modules:/lib/modules #optional # ports: # - 13231:13231/udp sysctls: - net.ipv4.conf.all.src_valid_mark=1 restart: unless-stopped iobroker: restart: always image: buanet/iobroker:latest container_name: iobroker hostname: iobroker ports: - "8081:8081" volumes: - /root/docker/iobroker:/opt/iobroker
So sieht momentan meine Compose Datei aus.
In dem Wireguard Container ist meine wg.conf Datei hinterlegt. So komme ich auf den Container. Allerdings nicht weiter auf den iobroker. Vielleicht lässt sich das mit dem macvlan lösen? -
@oliverio
Oder anders gefragt, wie lege ich -richtig- ein macvlan an?
Dann baue ich deine Compose mit meinen Sachen mal nach. -
ne das dürfte an deiner wireguard konfiguration liegen.
prüfe mal die folgenden punkte aus diesem posthttps://discourse.linuxserver.io/t/wireguard-server-access-homenetwork/2046
es steht zwar nicht so deutlich dran, aber die einstellung zu
net.ipv4.ip_forward müsste auf dem host gemacht werden
das verhindert, das der host pakete an andere rechner weiterleitet
https://linuxconfig.org/how-to-turn-on-off-ip-forwarding-in-linux
der host müsste dann neu gestartet werden. -
Ich bin mit deinen Links leider nicht weiter gekommen.
Ich habe allerdings nochaml das Internet durchsucht und bin auf folgende Lösung gekommen:SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADESobald ich dies bei Interface eingefügt habe, funktioniert jetzt glaube ich alles wie gewollt.
-