我有一个 KVM 主机,来宾加入了一个虚拟网桥以进行网络连接。
该系统来宾上的Netdata引起了我对在网络接口级别丢弃数据包的注意(由 报告的度量标准RX dropped
)ifconfig
。
我从主机外部跟踪丢弃的数据包到 STP(生成树协议)广播。主机上的虚拟网桥已关闭 STP,但来自网络上其他交换机的这些数据包仍会转发给访客。
# tcpdump -i enp2s0 stp -etn
30:23:03:27:7c:27 > 01:80:c2:00:00:00, 802.3, length 38: LLC, dsap STP (0x42) Individual, ssap STP (0x42) Command, ctrl 0x03: STP 802.1d, Config, Flags [none], bridge-id fffe.30:23:03:27:7c:27.8001, length 43
# tcpdump -i enp1s0 stp -etn
10:06:45:e6:24:0b > 01:80:c2:00:00:00, 802.3, length 38: LLC, dsap STP (0x42) Individual, ssap STP (0x42) Command, ctrl 0x03: STP 802.1d, Config, Flags [none], bridge-id 8000.10:06:45:e6:24:0b.8004, length 43
问题
如何丢弃通过虚拟网桥转发的 STP 数据包?
我尝试按 dsap/ssap 编号进行过滤,但这不起作用。
ebtables -A FORWARD -p LENGTH --802_3-sap 0x42 -j DROP
或者,我会对这不是一个好主意的任何原因感兴趣。
丢弃的数据包意味着没有内核子系统将 STP 注册为支持的协议;以太网驱动程序不知道将数据包发送到哪里,因此丢弃它并增加丢弃的计数器。这本身很好,但 Netdata 将上升计数器视为一个可能的问题。
解决此问题的最简单方法是让内核/驱动程序了解 STP:
这应该会导致 STP 数据包被 STP 驱动程序而不是以太网驱动程序丢弃。
在大多数 Linux 发行版上,您可以通过
stp
添加/etc/modules
.