Mapeamento de portas entre máquinas que usavam contêineres docker

Mapeamento de portas entre máquinas que usavam contêineres docker

Eu tenho 2 máquinas.

  • 192.168.0.10
  • 192.168.0.20

Que executam alguns serviços docker.

Na segunda máquina, vejo tráfego de entrada de um serviço na primeira máquina em algumas portas.

Mas quando verifico o primeiro host, não vejo essas portas em uso.

Então, por exemplo, verei:

 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

Mas quando eu vou em 192.168.0.10 para verificar essas portas, elas não estão em uso.

Então isso aparece vazio:

sudo netstat -tulpan | grep '52502'

O que poderia estar causando isso e como posso investigar isso? Suspeito que tenha a ver com contêineres docker e mapeamento de portas, talvez?

EDITAR:

A verificação do próprio serviço mostra algo assim:

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

A porta interna indo para outra porta na rede docker... e depois nada. Devo presumir que se trata de algum tipo de túnel por onde passa todo o outro tráfego? Como faço para mapear isso?

Responder1

Quando você se conecta a um serviço TCP, a porta de destino é conhecida antecipadamente (por exemplo, 80para um serviço HTTP), mas a porta de origem é escolhida aleatoriamente ao criar o soquete, geralmente com um número de porta acima de 32767.

As três portas que você vê 192.160.0.10são as portas de origem da conexão feita para192.168.0.20

Responder2

O tráfego do contêiner não se origina nem termina no Dockerhospedarporque é roteado de ou para Dockercontainers. O próprio host atua como um roteador e não possui soquete em uso para esse tráfego (a exceção é docker-proxylidar comGrampeamento NATquando não desativado com --userland-proxy=false, nesse caso o hairpinning NAT seria feito comtabelas de iperoute_localnet).

Como o Docker usatabelas de ipe NAT, tudo isso é rastreado pelo Netfilterconexão.

Para ver os fluxos rastreados, use oconntrackcomando (instale o conntrackpacote se necessário). Como todo esse tráfego é NAT, este comando exibirá todos os fluxos relevantes:

conntrack -L --any-nat -d 192.168.0.20

Deve ser executado no sistema com endereço 192.168.0.10, exibindo os fluxos NAT de origem (container como cliente) vistos do sistema com endereço 192.168.0.20.

Se o aplicativo de destino no sistema com endereço 192.168.0.20 também estiver em um contêiner Docker, o mesmo comando quando executado nesse sistema exibirá os fluxos NAT de destino (contêiner como servidor). Caso contrário, nada será exibido, pois não há NAT para exibir.

informação relacionada