正在运行 ASUS-RT-N16 路由器,设法通过 entware 获取 tcpdump。当我运行 tcpdump(在路由器上)-i any -vvv -X udp 或 tcpdump -i br0 -vvv -X udp [br0 是桥] 时,我只看到 udp 多播流量,而不是到连接到 LAN 端口的设备的 udp 流量(我验证了设备正在通过 UDP 进行通信)。还尝试使用 tcpdump 的 -p 选项。除了 192.168.1.255 之外,我看不到任何其他目标。
有什么想法吗?
正在运行 ASUS-RT-N16 路由器,设法通过 entware 获取 tcpdump。当我运行 tcpdump(在路由器上)-i any -vvv -X udp 或 tcpdump -i br0 -vvv -X udp [br0 是桥] 时,我只看到 udp 多播流量,而不是到连接到 LAN 端口的设备的 udp 流量(我验证了设备正在通过 UDP 进行通信)。还尝试使用 tcpdump 的 -p 选项。除了 192.168.1.255 之外,我看不到任何其他目标。
有什么想法吗?
在大多数此类路由器上,所有“LAN”端口都内部连接到以太网交换机芯片。1路由器的 CPU 不直接接收流量,而只是与该交换机的另一个连接(通过“CPU 端口”)——与其他以太网交换机端口一样,“CPU 端口”仅接收 a) 广播或 b) 专门针对路由器 MAC 地址的以太网帧。2
交换机由内核管理,因此您仍然会看到单独的
eth
接口(每个端口一个),但将这些接口放入桥接中会导致 DSA 驱动程序自动为桥接激活硬件卸载。此时,所有未明确发送到 CPU MAC 地址(或广播)的流量都会在硬件中转发,而 CPU 根本看不到它。我不知道您的路由器使用的是哪种固件,但上游 Linux DSA 交换机管理工具似乎没有办法单独禁用卸载(这是上个月才提出的)。如果您想监控两台主机之间的流量,您可能需要将它们放在两个单独的 VLAN 中(它们必须通过路由器进行通信),或者购买具有“端口镜像”(或监控端口,或 SPAN)功能的外部交换机。
(如果您可以设置两个子网,或者至少缩小主机的“子网掩码”以欺骗它们认为它们不再位于同一个子网,则可能不需要两个 VLAN。)
我确信至少有一些这样的内部交换机具有足够的可编程性,它们可以实现镜像端口或由 CPU 捕获 - 例如我在 RB951G 上看到了这些功能 - 但这在很大程度上取决于硬件和固件。
1(它在物理上可能是 SoC 芯片的一部分,但在逻辑上却与 CPU 分开。)
2(当接口未桥接时,所有流量都通过单个内部端口到达 CPU,使用交换机驱动程序可识别的类似 VLAN 的标签。因此实际上,
eth
操作系统看到的所有这些接口的工作方式都非常类似于“vlan”接口。)