Docker traffic durch einen VPN container leiten aber lokal über published ports erreichbar?

pipsen

Benutzer
Mitglied seit
03. Dez 2020
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Hallo,

ich habe eine Reihe von Docker containern, die jeweils published ports haben, dass ich sie im Heimnetzwerk über das Web interface steuern kann.
Sämtlicher public internet traffic der container sollen durch ein VPN gehen, dafür habe ich einen Container "VPN" erstellt, der den Tunnel aufbaut.

Die Webinterface container habe ich jetzt mit dem flag "--net=container:VPN" gestartet.
Soweit sogut... der traffic geht jetzt ausschließlich durch den tunnel, und sobald der tunnel zu ist, sind die angedockten container offline und erreichen das Internet nicht mehr.

Problem:
Die Container kann ich jetzt über die Webinterfaces nicht mehr erreichen. Diese Ports kann ich mit der oben gewählten Einstellung aber nicht mehr lokal publishen, weil sie ja nicht mehr in der normalen bridge sind.

docker: Error response from daemon: conflicting options: port publishing and the container type network mode.

Die weitere Recherche hat mir gezeigt, dass man dann alle published ports mit zum VPN container umzieht.
Das heißt im VPN container taucht dann auf:

Code:
-p port1:portvoncontainer1
-p port2:portvoncontainer2
-p port3:portvoncontainer3

Da die daran hängenden container alle im Network vom VPNcontainer hängen, kann ich dann wieder zugreifen. Aber was mach ich jetzt, wenn zufällig zwei der container intern den gleichen Port haben?
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Die Webinterface container habe ich jetzt mit dem flag "--net=container:VPN" gestartet.
Dadurch werden die Container in den Network-Namespace vom VPN Container geklinkt. Sprich alle Container nutzen das Netzwerkinterface dieses Containers mit. Deswegen ist es auch richtig, dass die Port-Mapping an dem VPN Container vorgenommen werden.

Aber was mach ich jetzt, wenn zufällig zwei der container intern den gleichen Port haben?
Auf einer IP kann ein Port nur einmal gebunden werden, egal ob nativ auf dem Host, oder in Containern. Für Images die eine Environment-Variable anbieten, die erlaubt den Container-Port zu ändern, ist es einfach, für Images die das nicht anbieten schwieriger bis unmöglich (kommt darauf, was das Entrypoint-Skript beim Container-Start macht).
 
Zuletzt bearbeitet:
  • Like
Reaktionen: pipsen

Luis942

Benutzer
Mitglied seit
22. Jun 2012
Beiträge
495
Punkte für Reaktionen
41
Punkte
28
Ich häng mich hier mal dran...
ich hab zwei container "jd" und "vpn" (so sind die in der Container App benannt).
ich starte beide container und die funktionieren wohl soweit laut log auch.
Aber wo trage ich "--net=container:VPN" ein?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Das funktioniert nur, wenn das VPN auch ein Docker-Container macht, was ja bei dir nicht der Fall ist. Bei dir macht das VPN ja die DS selbst über die Systemsteuerung (Surfshark), wenn ich mich richtig erinnere. Da ist denke ich (wie ich es in dem anderen Thread bereits gesagt hatte), eine Verbindung vom jd selbst an den Proxy Server auf der DS möglich. Das würde ich mal testen.
 

Luis942

Benutzer
Mitglied seit
22. Jun 2012
Beiträge
495
Punkte für Reaktionen
41
Punkte
28
Nein ich hab auch einen zweiten container für das VPN. Also einen Container für jd und einen für vpn (misioslav-surfshark)
Wenn ich per terminal
docker run jd --net=container:vpn eingebe, dann kommt, dass der container nicht gefunden wurde...
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Da müsste man halt wissen, wie die Container genau eingerichtet sind. Da muss nämlich der Name des VPN-Containers hin.
 

Luis942

Benutzer
Mitglied seit
22. Jun 2012
Beiträge
495
Punkte für Reaktionen
41
Punkte
28
mit "docker container ls" bekomme ich:
CONTAINER ID IMAGE NAMES
e45c341b1c78 misioslav/surfshark:latest vpn
f1b3953ec65a jlesage/jdownloader-2:latest jd
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Achso. Dann müsste das ja eigentlich so passen. Sind die beiden Container auch im gleichen Netz (dürfen nicht im default-bridge Netz sein!)?
 

Luis942

Benutzer
Mitglied seit
22. Jun 2012
Beiträge
495
Punkte für Reaktionen
41
Punkte
28
Ich habe beide Docker im selben bridge-netzwerk.
Ich hab auch nochmal neue container angelegt jdownloadervpn und vpnsurfshark.
Wenn ich nun "docker run jdownloadervpn --net=container:vpnsurfshark" eingebe, komm:

"Unable to find image 'jdownloadervpn:latest' locally
docker: Error response from daemon: pull access denied for jdownloadervpn, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'."
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
docker run jdownloadervpn --net=container:vpnsurfshark
Das startet aber einen neuen Container mit dem Image jdownloadervpn. Du müsstest die Container direkt mal über die CLI anlegen und dann das direkt mitangeben. Container sind nämlich Readonly. Wenn du die Einstellungen ändern willst, dann musst du ein neues erzeugen.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Das ist auch falsch. Der Imagename lautet anders. Du willst den Namen angeben, gibst aber den Imagenamen an. Befasse dich mal genauer mit dem Docker-run Befehl und schau, dass die beiden Container nicht im Standard-Bridge Netzwerk sind. Die kannst du auch im Container in ein selbst angelegtes Bridge-Netz schieben. Dann müsste es gehen
 

Luis942

Benutzer
Mitglied seit
22. Jun 2012
Beiträge
495
Punkte für Reaktionen
41
Punkte
28
Hier die Bridge:
1718358118439.png

Da sieht man auch die Containernamen, oder nicht?
 

Anhänge

  • 1718358114098.png
    1718358114098.png
    14,3 KB · Aufrufe: 2

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
Aber docker run erzeugt einen neuen Container. Guck dir doch mal die Doku an.
 

Luis942

Benutzer
Mitglied seit
22. Jun 2012
Beiträge
495
Punkte für Reaktionen
41
Punkte
28
Wo finde ich denn eine schöne doku?
docker start.... dann kommt:
docker start jdownloadervpn --net=container:vpnsurfshark
unknown flag: --net
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
@Luis942: beide Versuche sind grob falsch. Du musst einen neuen Container erzeugen.

Code:
docker run --net=container:vpnsurfshark jlesage/jdownloader-2:latest
 
  • Like
Reaktionen: Luis942

Luis942

Benutzer
Mitglied seit
22. Jun 2012
Beiträge
495
Punkte für Reaktionen
41
Punkte
28
@haydibe:

Sorry für die späte Rückmeldung. Jetzt hat es geklappt. Ich danke dir!
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat