将数据包从一个接口复制到另一个接口

将数据包从一个接口复制到另一个接口

我有一个 Linux 系统(设为 A),它有 2 个以太网卡,即 eth0 和 eth1,它们连接到两个完全不相关的 LAN。

基本上,eth0 用于正常的应用程序流量,而 eth1 仅用于调试目的。调试意味着 eth1 使用交叉电缆连接到另一个运行 Wireshark 的 Linux 机器(假设为 B)。我希望 Wireshark 能够处理在 A 的 eth0 上传输的应用程序数据包。

基本上我需要复制将数据包从 eth0 接口传输到 eth1 接口,以便盒子 B 上的 Wireshark 可以嗅探它们(由于某些原因,我无法物理访问 LAN eth0)。我可能还需要根据某些规则(顺便说一下,仅基于 TCP/IP 字段)指定要将哪些数据包从 eth0 复制到 eth1。

还要注意,A 的 eth0 不需要置于混杂模式,因为我只想复制以 A 为目的地的数据包子集

有没有办法仅使用 iptables 来实现这一点?还是我需要编写一个应用程序来实现这一点?我应该怎么做才能“复制”数据包?

答案1

如果你的内核足够新,你可以使用iptables --tee将帧从 eth0 转发到捕获机器。

答案2

您可以使用 tc mirred 操作。例如:对于传入流量:

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

对于传出流量:

tc qdisc replace dev eth0 parent root handle 10: prio
tc filter add dev eth0 parent 10: \
   protocol all prio 2 u32 \
   match u32 0 0 flowid 10:1 \
   action mirred egress mirror dev eth1

答案3

在网上搜索 tcpbridge,它就是这个工作的执行者。它也可以用于与虚拟机通信。

答案4

就像是rinetd 可能工作(TCP 重定向器/服务器仅有的我相信,所以没有 ARP、第 2 层等),但老实说,获得一些具有端口镜像功能的托管交换机,或者如果该盒子仅用于 wireshark,您可以向其中添加另一个 NIC,桥接两个接口,将其放在机器 A 的 eth0 前面,并有一个专用的嗅探机器。

相关内容