我有一个网络接口拒绝接收发往它的流量(目标 MAC 等于接口配置的硬件地址)。
这是驱动程序信息;
# ethtool -i eth0
driver: ixgbe
version: 4.0.1-k
firmware-version: 0x80000534
expansion-rom-version:
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
我一进入ifconfig eth0 promisc
界面就会开始接收帧。 tcpdump 显示目标 MAC 确实与接口的配置 MAC 地址一致。
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:01:02:03:04:05
UP BROADCAST RUNNING PROMISC SLAVE MULTICAST MTU:1508 Metric:1
RX packets:600363 errors:0 dropped:0 overruns:0 frame:0
TX packets:230866 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:904700278 (862.7 MiB) TX bytes:16161664 (15.4 MiB)
为什么接口需要混杂?
答案1
我通读了 ixgbe 驱动程序源代码来寻找答案。
据我所知,该驱动程序利用了硬件 VLAn 过滤(某些支持票证上已建议其原因包括安全性和性能)。
此行为通过 IXGBE_VLNCTRL_VFE VLAN 控制标志进行控制。
成功地将这些过滤器遍历到内核的两个选项是:
- 在接口上启用混杂模式
- 将 VLAN 添加到接口(例如使用 vconfig)