Portzuordnung zwischen Maschinen, die Docker-Container verwenden

Portzuordnung zwischen Maschinen, die Docker-Container verwenden

Ich habe 2 Maschinen.

  • 192.168.0.10
  • 192.168.0.20

Auf denen einige Docker-Dienste ausgeführt werden.

Auf der zweiten Maschine sehe ich auf einigen Ports eingehenden Datenverkehr von einem Dienst auf der ersten Maschine.

Aber wenn ich den ersten Host überprüfe, sehe ich, dass diese Ports nicht verwendet werden.

Ich werde beispielsweise Folgendes sehen:

 192.168.0.10:48002 ->  192.168.0.20
 192.168.0.10:51364 ->  192.168.0.20
 192.168.0.10:52502 ->  192.168.0.20

Aber wenn ich auf 192.168.0.10 gehe, um nach diesen Ports zu suchen, wird angezeigt, dass sie nicht verwendet werden.

Das Ergebnis ist also leer:

sudo netstat -tulpan | grep '52502'

Was könnte die Ursache dafür sein und wie untersuche ich es? Ich vermute, es hat vielleicht mit Docker-Containern und Port-Mapping zu tun?

BEARBEITEN:

Das Scannen nach dem Dienst selbst zeigt ungefähr Folgendes:

tcp6       0      0 127.0.0.1:48806         127.0.0.1:8088          ESTABLISHED 1065071/java

Der interne Port geht zu einem anderen Port im Docker-Netzwerk ... und dann nichts. Soll ich davon ausgehen, dass dies eine Art Tunnel ist, über den der gesamte andere Verkehr läuft? Wie ordne ich dies zu?

Antwort1

Wenn Sie eine Verbindung zu einem TCP-Dienst herstellen, ist der Zielport im Voraus bekannt (beispielsweise 80bei einem HTTP-Dienst), der Quellport wird jedoch beim Erstellen des Sockets zufällig ausgewählt, normalerweise mit einer Portnummer über 32767.

Die drei Ports, die Sie sehen, 192.160.0.10sind die Quellports der Verbindung zu192.168.0.20

Antwort2

Der Containerverkehr beginnt und endet nicht auf dem DockerGastgeberweil es von oder zu Docker weitergeleitet wirdBehälter. Der Host selbst fungiert als Router und hat keinen Socket für diesen Datenverkehr im Einsatz (die Ausnahme ist docker-proxydie HandhabungNAT-Hairpinningwenn es nicht mit deaktiviert wird --userland-proxy=false. In diesem Fall würde NAT Hairpinning mit durchgeführt werdeniptablesUndroute_localnet).

Da Docker verwendetiptablesund NAT, all dies wird verfolgt von Netfilter'sKontakt.

Um verfolgte Flüsse anzuzeigen, verwenden Sie dieconntrack(installieren Sie das conntrackPaket, falls erforderlich). Da der gesamte Datenverkehr NAT-gestützt ist, zeigt dieser Befehl alle relevanten Datenflüsse an:

conntrack -L --any-nat -d 192.168.0.20

Es sollte auf dem System mit der Adresse 192.168.0.10 ausgeführt werden und die Quell-NAT-Flows (Container als Client) anzeigen, die vom System mit der Adresse 192.168.0.20 gesehen werden.

Wenn sich die Zielanwendung auf dem System mit der Adresse 192.168.0.20 ebenfalls in einem Docker-Container befindet, zeigt derselbe Befehl bei Ausführung auf diesem System Ziel-NAT-Flows an (Container als Server). Andernfalls wird nichts angezeigt, da kein anzuzeigendes NAT vorhanden ist.

verwandte Informationen