连接到集线器时转发所有通信

我有一个Ubuntu有两个网卡。 eth0连接到集线器,eth1连接到Internet。 eth1用来使用openVPN进行点到点VPN。 所以我有一个tun0接口。 VPN隧道端点是10.9.0.1(绑定在eth1上)和10.9.0.2(远程对等)。 我想转发/镜像eth0(集线器端)收到的所有stream量到VPN对等10.9.0.2。 为此,我创build了以下iptables规则。

sudo iptables -t mangle -A PREROUTING -i eth0 -j TEE --gateway 10.9.0.2 

当然,我把eth0设置为混杂模式。

 sudo ifconfig eth0 promisc 

而且我甚至激活了IP转发

 sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' 

当我嗅探eth0(集线器端),我看到所有stream量,但是当我在10.9.0.2(远程VPN对等端)上嗅探时,我只能看到在eth0上接收到的多播stream量。 我的问题是:为什么非多播或专用单播stream量不镜像/转发?

注意:如果我在Ubuntu服务器上侦听tun0,我只能看到多播stream量和专用单播stream量。 所以我得出这样的结论,问题是不是位于iptables规则,但之前…

感谢你并致以真诚的问候。

我终于find了解决办法。 @MrMajestyk给出的想法帮助了我。 这是我的解决scheme。

首先,需要使用ebtables修改接收到的数据包的目的MAC地址,以便IP堆栈的代码接收数据包。 如果我不在以太网层这样做,networking层就不会收到除了多播,广播和专用单播之外的帧。 而且如果networking层从来没有收到所有的数据包,就不可能用iptables来处理它们。 但是,对于这个ebtables规则的工作原理,有必要创build一个桥接接口上的传入(集线器端)接口。

 sudo ifconfig eth0 10.9.0.5 sudo brctl addbr br0 sudo brctl addif br0 eth0 sudo ifconfig br0 up 

然后我们可以创buildebtables规则。

 sudo ebtables -t broute -A BROUTING -i eth0 -j redirect --redirect-target DROP 

然后,我可以使用iptables来镜像我的VPN远程对端(10.9.0.2)收到的stream量。

 sudo iptables -t raw -A PREROUTING -i eth0 -j TEE --gateway 10.9.0.2 

请注意,我使用隧道接口(tun)而不是以太网桥(tap)。 之后,我可以在远程对等设备10.9.0.2上嗅探到,我可以看到所有的stream量(例如ARP除外)。

我甚至可以过滤我的stream量,但有必要在原始表格内执行此操作在-j TEE -gateway规则之前 预先排列链接 。 看看我的iptables raw,prerouting条目。

 -A PREROUTING -p vrrp -j DROP -A PREROUTING -p ospf -j DROP -A PREROUTING -d 255.255.255.255/32 -j DROP -A PREROUTING -p udp --sport 53 -j DROP -A PREROUTING -p tcp --sport 53 -j DROP -A PREROUTING -i eth0 -j TEE --gateway 10.9.0.2 

感谢您的帮助

我认为你的问题是,如果目标MAC实际上并不在你用作路由器的机器上,那么你正在做的这种转发不起作用。 广播通过devise工作。 你正在寻找的可能是更多的镜像交换机端口的路线。 在这里做一个线程。 为了后人的缘故,我将在这里重申它的要旨:

  SWITCH +---------------+ | | SOURCE <------------>|<-----+------->|<------------> RCV | | | +---------------+ | Mirrored port ("tap") | (output only) | | +------------+ +<---->| ROUTER |<-------------> MONITOR eth0 +------------+ 

以下是如何重写传入的MAC地址以匹配eth0。 即使网桥没有其他设备,eth0也必须绑定到网桥设备。 这可以让ebtables挂钩进去。

 ifconfig eth0 XXXX brctl addbr br0 brctl addif br0 eth0 ip link set br0 up (or ifconfig br0 up) ebtables -t broute -A BROUTING -i eth0 -j redirect --redirect-target DROP ip route add yyyy dev eth0 (have to do for all expected incoming addresses/subnets) 

再次 – 以上只是引用原来的post,以确保这可以在以后的刷新。

我不认为你需要设置iptables,只需将eth1的ip地址设置为eth0的网关,然后将DNS设置为“base”文件即可。