Me gustaría capturar el tráfico en las interfaces virtuales de Linux, con fines de depuración. He estado experimentando con veth
, tun
y dummy
tipos de interfaz; en los tres, tengo problemas tcpdump
para mostrar algo.
Así es como configuro la interfaz ficticia:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
En una terminal, míralo con tcpdump
:
tcpdump -i dummy10
En un segundo, escúchalo con nc
:
nc -l 99.99.99.1 2048
En un tercero, haga una solicitud HTTP con curl
:
curl http://99.99.99.1:2048/
Aunque en la terminal 2 podemos ver los datos de la curl
solicitud, no aparece nada tcpdump
.
Un tutorial Tun / Tap aclara algunas situaciones en las que el núcleo puede no enviar ningún paquete cuando uno está operando en una interfaz local:
Mirando la salida de tshark, vemos ... nada. No hay tráfico pasando por la interfaz. Esto es correcto: dado que estamos haciendo ping a la dirección IP de la interfaz, el sistema operativo decide correctamente que no es necesario enviar ningún paquete "en el cable", y el núcleo mismo está respondiendo a estos pings. Si lo piensa, es exactamente lo que sucedería si pinchara la dirección IP de otra interfaz (por ejemplo, eth0): no se enviarían paquetes. Esto puede sonar obvio, pero podría ser una fuente de confusión al principio (lo fue para mí).
Sin embargo, es difícil ver cómo esto podría aplicarse a los paquetes de datos TCP.
Tal vez tcpdump
debería estar vinculado a la interfaz de una manera diferente?