桥接接口 (virbr) 上的 tcpdump 未收到发往其某个地址的任何数据包

桥接接口 (virbr) 上的 tcpdump 未收到发往其某个地址的任何数据包

以下是接口的配置:

# ifconfig virbr0
virbr0:标志=4355 mtu 1500
        inet 192.168.11.1 网络掩码 255.255.255.255 广播 255.255.255.255
        ether 52:54:00:99:e3:0d txqueuelen 0(以太网)
        RX 数据包 0 字节 0(0.0 B)
        RX 错误 0 丢失 0 超限 0 帧 0
        TX 数据包 0 字节 0(0.0 B)
        TX 错误 0 丢失 0 超限 0 载波 0 冲突 0
# ip link 显示 virbr0
13:virbr0@NONE:mtu 1500 qdisc 无队列状态 LOWERLAYERDOWN 模式 DEFAULT
    链接/以太 52:54:00:99:e3:0d brd ff:ff:ff:ff:ff:ff

我可以 ping 通 192.168.11.1,建立 TCP 连接等,但 tcpdump 报告

捕获 0 个数据包
过滤器收到 0 个数据包
内核丢弃了 0 个数据包

更新

我发现,如果我将地址分配给 veth 接口,将其放在网络命名空间中,然后将 veth 对的另一端连接到 virbr 接口,则所有数据包都会显示在 virbr 接口的 tcpdump 上。然而,最初的问题仍然存在。

答案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

相关内容