Я хотел бы захватывать трафик на виртуальных интерфейсах 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следует связать интерфейс с другим способом?