Я хотел бы захватывать трафик на виртуальных интерфейсах 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 проясняются некоторые ситуации, когда ядро может фактически не отправлять какие-либо пакеты, когда оно работает на локальном интерфейсе:
Глядя на вывод tshark, мы видим ... ничего. Там нет трафика, проходящего через интерфейс. Это правильно: поскольку мы проверяем IP-адрес интерфейса, операционная система правильно решает, что пакет не должен отправляться «по проводам», и само ядро отвечает на эти запросы. Если подумать, это именно то, что произойдет, если вы пропингуете IP-адрес другого интерфейса (например, eth0): пакеты не будут отправлены. Это может показаться очевидным, но поначалу может вызвать путаницу (это было для меня).
Однако трудно понять, как это может применяться к пакетам данных TCP.
Может быть, tcpdump
следует связать интерфейс с другим способом?