Я хотів би захопити трафік на віртуальних інтерфейсах Linux для налагодження. Я експериментував з veth
, tun
і dummy
інтерфейсом типу; на всіх трьох, у мене виникають труднощі змусити tcpdump
щось показати.
Ось як я налаштував фіктивний інтерфейс:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
В одному терміналі дивіться це за допомогою tcpdump
:
tcpdump -i dummy10
За секунду послухайте це за допомогою nc
:
nc -l 99.99.99.1 2048
По-третє, зробіть HTTP-запит curl
:
curl http://99.99.99.1:2048/
Хоча в терміналі 2 ми можемо бачити дані curl
запиту, з них нічого не з’являється tcpdump
.
Tun / Tap підручник прояснює деякі ситуації , коли ядро не може фактично посилати будь-які пакети , коли один працює на локальному інтерфейсі:
Дивлячись на вихід царкви, ми бачимо ... нічого. Трафік не проходить через інтерфейс. Це правильно: оскільки ми пінгуємо IP-адресу інтерфейсу, операційна система правильно вирішує, що жоден пакет не потрібно надсилати "по дроту", а саме ядро відповідає на ці пінг. Якщо ви подумаєте про це, саме те, що буде, якби ви пінговували IP-адресу іншого інтерфейсу (наприклад, eth0): жодні пакети не надсилалися б. Це може здатися очевидним, але спочатку може бути джерелом плутанини (це було для мене).
Однак важко зрозуміти, як це могло поширюватися на пакети даних TCP.
Можливо, tcpdump
слід прив'язати до інтерфейсу іншим способом?