![如何强制Linux桥在多个接口上输出帧?](https://linux22.com/image/1581653/%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6Linux%E6%A1%A5%E5%9C%A8%E5%A4%9A%E4%B8%AA%E6%8E%A5%E5%8F%A3%E4%B8%8A%E8%BE%93%E5%87%BA%E5%B8%A7%EF%BC%9F.png)
我有一台运行 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
同样地,你可以大概使用
dup
nftables 中的动作桥牌桌: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 桥接器。