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, 80
para 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.10
sã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-proxy
lidar 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 oconntrack
comando (instale o conntrack
pacote 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.