tcpdump на интерфейсе моста (virbr) не получает пакетов, предназначенных для одного из его адресов

Вот конфигурация интерфейса:

# 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. Однако исходный вопрос все еще остается в силе.

2
задан 18 December 2015 в 01:47
1 ответ

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

1
ответ дан 3 December 2019 в 12:42

Теги

Похожие вопросы