如何强制Linux桥在多个接口上输出帧?

如何强制Linux桥在多个接口上输出帧?

我有一台运行 Tomato v1.28(Linux 内核 2.6.22.19,没有 USB 驱动功能)的 Linksys E2500 路由器,它以桥接模式运行以连接三个接口:

root@TomatoE2500Host:/# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.586d8fb74454       no              eth1
                                                        eth2
                                                        vlan1
  • eth1 是 2.4 Ghz 无线(接入点模式 - Xbox 是唯一的无线主机)
  • eth2 是 5.0 Ghz 无线(客户端模式到主网关路由器/其他设备)
  • vlan1 是 4x LAN 以太网端口(Windows 10 桌面仅是有线主机)

该桥接器在“正常”用途下运行良好,但我试图使用运行 Wireshark 的 Windows 桌面来嗅探 Xbox 和主网关之间发送的数据包。

root@TomatoE2500Host:/# brctl showmacs br0
port no mac addr                is local?       ageing timer
  3     00:01:36:1f:e4:5c       yes                0.00
  2     4c:0b:be:3e:5b:2d       no                36.09
  1     58:6d:8f:b7:44:54       yes                0.00
  2     58:6d:8f:b7:44:56       yes                0.00
  3     68:37:e9:50:ce:f7       no               100.34
  3     6c:56:97:04:1e:3f       no               100.63
  3     a0:cc:2b:ad:46:d1       no               224.45
  3     b0:39:56:69:aa:eb       no                 1.02
  1     f4:6d:04:4f:9f:6a       no                 0.01

可以理解的是,来自 Xbox (4c:0b:be:3e:5b:2d) 的帧/数据包eth1(端口 2)仅被推送到网关(b0:39:56:69:aa:eb)eth2(端口 3),而有线桌面(f4:6d:04:4f:9f:6a)VLAN1(端口 1)陷入黑暗之中。

如何强制框架eth1广播接口VLAN1接口,除了默认/需要的eth2

就好像我需要一个MAC 泛洪我自己发起的攻击迫使网桥在多个接口上广播数据包,而不是依赖上面显示的转发数据库 (FDB)。但肯定有更好的方法来实现这一点,对吧?

答案1

转发数据库仅支持将单播地址映射到一个端口(这适用于只有一个目的地的“单播”)。还有其他方法:

  • 您可以使用 iptables 的TEE目标,例如这个 SF 帖子。要使其正常工作,您首先需要启用桥接 iptables 过滤:

    ip link set dev br0 type bridge nf_call_iptables 1
    
  • 同样地,你可以大概使用dupnftables 中的动作桥牌桌

    iifname "br0" dup to "eth0"
    
  • 就像本文, 您可以使用带有“动作镜像”和其他一些难以理解的参数。

  • 您可以使用用户空间程序捕获网桥上的数据包,并通过另一个接口转发它们,无论是原始的还是封装的(例如在 TZSP 或 ERSPAN 隧道内)。一个例子是嗅探器在接收端,Wireshark会自动识别封装的数据包。

  • 你可以运行tcpdump通过 SSH 并将其输出提供给本地 Wireshark UI:

    ssh router tcpdump -n -i eth2 -s 65535 -w - -U | wireshark -k -i -
    

    (是的,网上说你需要一个 USB 驱动器来存储“完整的” 2 MB tcpdump,但是一定某个地方有精简版吗(类似的东西dumpcap)?例如,您不需要任何数据包分析代码。似乎这种东西不需要大于 10 kB 的二进制文件……)

  • 作为最后的手段,您可以购买另一台具有本机端口镜像支持的交换机或路由器。(例如,托管交换机往往具有“镜像端口”或“SPAN 端口”,而基于 RouterOS 的设备则具有通过 TZSP 隧道进行类似 tcpdump 的捕获的本机支持。)

但请注意,您的 Linksys 很可能已桥接堆叠 - “vlan1”设备(您的 4x LAN 端口)通常代表具有自己独立 FDB 的硬件交换机,因此这些端口之间的流量根本无法到达软件 Linux 桥接器。

相关内容