Je voudrais capturer du trafic sur des interfaces virtuelles Linux, à des fins de débogage. J'ai expérimenté avec veth
, tun
et les dummy
types d' interface; sur les trois, j'ai du mal tcpdump
à montrer quoi que ce soit.
Voici comment j'ai configuré l'interface factice:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
Dans un terminal, regardez-le avec tcpdump
:
tcpdump -i dummy10
Dans une seconde, écoutez-le avec nc
:
nc -l 99.99.99.1 2048
Dans un troisième, faites une requête HTTP avec curl
:
curl http://99.99.99.1:2048/
Bien que dans le terminal 2, nous puissions voir les données de la curl
demande, rien ne s'affiche tcpdump
.
Un didacticiel Tun / Tap clarifie certaines situations dans lesquelles le noyau peut n'envoyer aucun paquet lorsque l'on opère sur une interface locale:
En regardant la sortie de tshark, on voit ... rien. Aucun trafic ne passe par l'interface. C'est exact: puisque nous envoyons une requête ping à l'adresse IP de l'interface, le système d'exploitation décide correctement qu'aucun paquet ne doit être envoyé "sur le fil", et le noyau lui-même répond à ces pings. Si vous y réfléchissez, c'est exactement ce qui se passerait si vous cingliez l'adresse IP d'une autre interface (par exemple eth0): aucun paquet ne serait envoyé. Cela peut sembler évident, mais pourrait être une source de confusion au début (c'était pour moi).
Cependant, il est difficile de voir comment cela pourrait s'appliquer aux paquets de données TCP.
Peut tcpdump
-être devrait être lié à l'interface d'une manière différente?
Réponses:
Le trafic passe par l'
lo
interface.Lorsqu'une IP est ajoutée à une boîte, une route pour cette adresse est ajoutée à la table «locale». Tous les itinéraires de ce tableau acheminent le trafic via l'interface de bouclage.
Vous pouvez afficher le contenu de la table «locale» avec les éléments suivants:
Ce qui sur mon système ressemble à ceci:
Donc , fondamentalement , si j'envoie tout le trafic vers
10.230.134.38
,127.0.0.0/8
,127.0.0.1
(redondant) ,172.17.42.1
ou192.168.0.20
, le trafic sera routés sur l'interface de réalimentation, même si les adresses IP sont vraiment sur une autre interface.la source
Vous pouvez utiliser
tcpdump
avec n'importe quelle interface sur l'hôte (tcpdump -i any ...
)la source
Cela devrait être possible en invoquant un deuxième système (peut même être une machine virtuelle sur cet hôte).
Vous pouvez utiliser
DNAT
dans laOUTGOING
chaîne de lanat
table et rediriger les paquets vers une interface que le noyau ne contrôle pas. Vous devez y réfléchir:la source