欺骗接口时复制流量

欺骗接口时复制流量

总结一下我的问题,我有一个具有 3 个网络接口的 Linux 路由器:

  • 充当 DHCP 服务器的 wlan 接口,我通过它来管理设备,这不在本问题的范围内。
  • 一个 LAN 接口,它链接到 eth0 设备(以太网端口),它是非托管的。
  • 一个 wan 接口,链接到非托管的 eth1 设备(以太网端口)。

如果有任何变化,我的路由器正在 openwrt 上运行,所以 lan 实际上是 br-lan。

我的目标有两个:

  • 我需要将我的设备插在站点(连接到 eth0)和交换机(连接到 eth1)之间的局域网和广域网上,并充当它们之间的透明桥梁。
  • 我需要能够向欺骗站点的 Linux 路由器发送数据包以及从该路由器接收数据包。

透明桥接部分可以通过 net.ipv4.ip_forward 轻松完成,并将 eth1 添加到具有 eth0 的虚拟桥接设备中。但是,一旦我将站点的 IP/MAC 分配给 eth1,交换机发往站点的所有流量都会在 eth1 处停止(可以理解)。我可以 ping 交换机,但站点不能,因为 eth1 会保留自己的响应。

为了解决这个问题,我尝试了多种方法,主要是这个问题:iptables 与 tee(直接不起作用,即使我创建了一条通过 eth0 路由站点 IP 流量的路由),iptables 转发(参见此问题), tcpbridge 从 eth1 到 eth0, tc...

但在所有这些情况下,交换机发往站点的数据包都会按预期重定向到 eth0,但现在 Linux 设备没有收到答复,这意味着站点可以 ping 交换机,但当我这样做时,站点会得到响应。(即使 eth1 仍在欺骗站点的 IP/MAC)。

有人知道为什么镜像流量实际上对我而言不起作用吗?
是因为两个接口还是在同一个 vbridge 中?
是否有一个数据包实用程序允许我通过使用自定义 IP/MAC 包装数据包来路由数据包?这将允许我实现透明桥接而无需篡改 eth1 的 IP/MAC。

谢谢!

答案1

好的,我似乎找到了答案,我取消了 2 个接口的桥接,并在每个方向添加了镜像流量控制规则:

tc qdisc add dev eth0 ingress
tc qdisc add dev eth1 ingress
tc filter add dev eth0 parent ffff: protocol all u32 match u32 0 0 action mirred egress mirror dev eth1
tc filter add dev eth1 parent ffff: protocol all u32 match u32 0 0 action mirred egress mirror dev eth0

更多信息这里以及我链接的第一个问题)。

现在我可以 ping 服务器,站点和 Linux 设备都收到响应。可能有一种方法可以过滤哪些数据包真正用于哪些数据包,一些依赖于 tcp 标志或类似功能的实用程序,但我找不到任何方法。

相关内容