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


9

我有一个带有2个以太网卡(即eth0和eth1)的Linux系统(将其命名为A),这些网卡连接到两个完全不相关的LAN。

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

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

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

有没有办法单独使用iptables实现此目的?还是我需要编写一个应用程序才能使它正常工作?我应该怎么做才能“复制”数据包?

Answers:



4

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

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,这正是作业的作用。它也可以用于与虚拟机对话。


1

rinetd之类的 东西可能会起作用(我相信只有 TCP的重定向器/服务器,所以没有ARP,第2层等),但老实说,要获得一些具有端口镜像功能的受管交换机,或者如果该盒子仅用于Wireshark,您可以在其中添加另一个NIC,桥接两个接口,将其放置在计算机A的eth0前面,并拥有专用的嗅探计算机。



0

在我的设置中,多播TX流量由iptables标记,但是使用新路由表的策略路由从未起作用。虽然它适用于单播TX数据包(将原始数据包从eth0重定向到eth5)。使用tc我可以将eth0的广播流量发送到eth5。src mac和src ip地址已更改为eth5的值,因此不会对交换机学习造成任何问题。必须启用对内核数据包调度CONFIG_NET_SCHED的所有内核支持

在WORKS下面,用于从eth0重定向到eth5的单播和多播流量

Netfilter可用于直接与表示内核中数据包的结构进行交互。这个结构sk_buff包含一个我们将要修改的名为“ __u32 nfmark”的字段。然后,TC将读取该值以选择数据包的目标类别。

IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' iptables -t mangle -A输出-s $ {IP_ADDR_ETH0} -p udp --match multiport --dports 329330 -o eth0 -j MARK --set-mark 2

要创建代表我们的调度策略并使用PRIO qdisc(数据包调度程序)的树(可以尝试其他可用的树)。qdiscs附加在设备的根目录

tc qdisc添加dev eth0根句柄15:prio

现在,一方面具有流量整形策略,另一方面具有数据包标记。要连接两者,我们需要一个过滤器。

请参阅man tc-mirred(8):mirred操作允许对接收到的数据包进行镜像(复制)或重定向(窃取)。镜像有时称为交换端口分析器(SPAN),通常用于分析和/或调试流。

请参阅man tc-fw(8):fw-fwmark流量控制过滤器fw过滤器允许根据iptables根据先前设置的fwmark对数据包进行分类。如果与过滤器的“句柄”相同,则过滤器匹配。iptables允许使用MARK目标标记单个数据包,或使用CONNMARK标记整个连接。

MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n' tc过滤器添加dev eth0父级15:0协议ip prio 1处理0x2 fw action pedit ex munge eth src set $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set $ {IP_ADDR_ETH1} pipe \ action mirred出口dev eth1

显示以上设置规则:tc qdisc显示dev eth0 tc过滤器show dev eth0

删除/取消设置规则:tc qdisc del dev eth0 root

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.