linux网桥可以拦截流量吗?

A G*_*A G 5 linux iptables bridge

我有一台 linux 机器作为客户端和服务器之间的桥梁;

brctl addbr0
brctl addif br0 eth1
brctl addif br0 eth2
ifconfig eth1 0.0.0.0
ifconfig eth2 0.0.0.0
ip link set br0 up
Run Code Online (Sandbox Code Playgroud)

我还有一个应用程序正在监听这台机器的 8080 端口。是否可以将发往端口 80 的流量传递给我的应用程序?我做了一些研究,看起来可以使用ebtablesand来完成iptables

这是我的其余设置:

//set the ebtables to pass this traffic up to ip for processing; DROP on the broute table should do this
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target DROP

//set iptables to forward this traffic to my app listening on port 8080
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --on-port 8080 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -p tcp -j MARK --set-mark 1/1

//once the flows are marked, have them delivered locally via loopback interface
ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1

//enable ip packet forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)

但是,我的应用程序中没有任何内容。我错过了什么吗?我的理解是,bro​​ute BROUTING 链上的目标 DROP 会将其推送到 iptables 进行处理。

其次,我还应该调查其他任何替代方案吗?

编辑:IPtables 在 nat PREROUTING 上得到它,但看起来它在那之后下降了;INPUT 链(在 mangle 或过滤器中)看不到数据包。

A G*_*A G 0

我决定保留桥接行为。我将使用 ebtables 来阻止我想要拦截的流量,并让我的应用程序使用原始套接字来拦截这些数据包。看起来有点拼凑,但似乎有效。