Chciałbym przechwytywać ruch na wirtualnych interfejsach Linuksa w celu debugowania. I zostały eksperymentowanie z veth
, tun
a dummy
interfejs rodzajów; we wszystkich trzech mam problem tcpdump
z pokazaniem czegokolwiek.
Oto jak skonfigurowałem fikcyjny interfejs:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
W jednym terminalu obejrzyj go za pomocą tcpdump
:
tcpdump -i dummy10
Po chwili posłuchaj go z nc
:
nc -l 99.99.99.1 2048
Po trzecie, złóż żądanie HTTP za pomocą curl
:
curl http://99.99.99.1:2048/
Chociaż w terminalu 2 możemy zobaczyć dane z curl
żądania, nic się nie pojawia tcpdump
.
TUN / TAP poradnik wyjaśnia pewne sytuacje, w których jądro może faktycznie nie wysyła żadnych pakietów, gdy ktoś pracuje na lokalnym interfejsie:
Patrząc na wyniki tsharka, widzimy ... nic. Przez interfejs nie ma ruchu. Jest to poprawne: ponieważ pingujemy adres IP interfejsu, system operacyjny poprawnie decyduje, że żaden pakiet nie musi być wysyłany „na drut”, a samo jądro odpowiada na te pingi. Jeśli się nad tym zastanowić, dokładnie tak by się stało, gdyby pingować adres IP innego interfejsu (na przykład eth0): żadne pakiety nie zostaną wysłane. Może się to wydawać oczywiste, ale na początku może być źródłem nieporozumień (dotyczyło mnie).
Trudno jednak zrozumieć, w jaki sposób mogłoby to mieć zastosowanie do pakietów danych TCP.
Może tcpdump
powinien być związany z interfejsem w inny sposób?