Tengo 2 maquinas.
- 192.168.0.10
- 192.168.0.20
Que ejecutan algunos servicios acoplables.
En la segunda máquina veo tráfico entrante de un servicio en la primera máquina en algunos puertos.
Pero cuando reviso ese primer host, no veo esos puertos en uso.
Entonces, por ejemplo, estaré viendo:
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
Pero cuando accedo a 192.168.0.10 para verificar esos puertos, no aparecen en uso.
Entonces esto aparece vacío:
sudo netstat -tulpan | grep '52502'
¿Qué podría estar causando esto y cómo lo investigo? Sospecho que tiene que ver con los contenedores Docker y el mapeo de puertos, ¿tal vez?
EDITAR:
La búsqueda del servicio en sí muestra algo como esto:
tcp6 0 0 127.0.0.1:48806 127.0.0.1:8088 ESTABLISHED 1065071/java
El puerto interno va a otro puerto en la red acoplable... y luego nada. ¿Debo asumir que se trata de una especie de túnel por el que pasa el resto del tráfico? ¿Cómo mapeo esto?
Respuesta1
Cuando se conecta a un servicio tcp, el puerto de destino se conoce de antemano (por ejemplo, 80
para un servicio http), pero el puerto de origen se elige aleatoriamente al crear el socket, generalmente con un número de puerto superior a 32767.
Los tres puertos que ve 192.160.0.10
son los puertos de origen de la conexión realizada a192.168.0.20
Respuesta2
El tráfico de contenedores no se origina ni termina en Dockeranfitriónporque está enrutado desde o hacia Dockercontenedores. El propio host actúa como un enrutador y no tiene ningún socket en uso para este tráfico (la excepción es docker-proxy
para manejarHorquilla NATcuando no está deshabilitado con --userland-proxy=false
, en cuyo caso la horquilla NAT se haría coniptablesyroute_localnet
).
Como usa Dockeriptablesy NAT, todo esto es rastreado por Netfilterconectar.
Para ver los flujos rastreados, utilice elconntrack
comando (instale el conntrack
paquete si es necesario). Como todo este tráfico es NAT, este comando mostrará todos los flujos relevantes:
conntrack -L --any-nat -d 192.168.0.20
Se debe ejecutar en el sistema con dirección 192.168.0.10, mostrando los flujos NAT de origen (contenedor como cliente) vistos desde el sistema con dirección 192.168.0.20.
Si la aplicación de destino en el sistema con dirección 192.168.0.20 también está en un contenedor Docker, cuando se ejecute el mismo comando en ese sistema mostrará los flujos NAT de destino (contenedor como servidor). De lo contrario, no se mostrará nada ya que no hay NAT para mostrar.