Вот конфигурация интерфейса:
# ifconfig virbr0 virbr0: flags=4355 mtu 1500 inet 192.168.11.1 netmask 255.255.255.255 broadcast 255.255.255.255 ether 52:54:00:99:e3:0d txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # ip link show virbr0 13: virbr0@NONE: mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT link/ether 52:54:00:99:e3:0d brd ff:ff:ff:ff:ff:ff
Я могу ping, установить TCP-соединения и т. д. на 192.168.11.1, но tcpdump сообщает
0 packets captured 0 packets received by filter 0 packets dropped by kernel
ОБНОВЛЕНИЕ
Я обнаружил, что если я назначаю адрес интерфейсу veth, помещаю его в пространство имен сети, а затем присоединяю другой конец veth к интерфейсу virbr, все пакеты отображаются в tcpdump на интерфейсе virbr. Однако исходный вопрос все еще остается в силе.
tcpdump
работает на уровне канала, открывая сокет пакета [1]. Он расположен прямо под интерфейсом, поэтому он перехватывает входящие пакеты с оборудования и исходящие пакеты с интерфейса. Когда вы отправляете пакет на этот интерфейс в ядре, пакет достигает места назначения и не отправляется через интерфейс. Для любопытных вот соответствующий код [2].
[1] http://man7.org/linux/man-pages/man7/packet.7.html
[2] https://github.com/the- tcpdump-group / libpcap / blob / master / pcap-linux.c # L3281