使用 ebtables 将数据包从网桥中丢弃并通过 Tinc VPN 进行路由

使用 ebtables 将数据包从网桥中丢弃并通过 Tinc VPN 进行路由

我们在 Ubuntu 上设置了一个网桥,将我们的 LAN 连接到位于同一子网的网关。我们需要它来控制流量,目前无法更改子网,所以我们不能直接路由它。

网关由我们的 ISP 控制,ISP 为 192.168.0.0/16 内的其他各个 /24 子网提供 MPLS。

当前设置如下:

192.168.10.1(gw)<-> eth0 <-> br0(192.168.10.3)<-> eth1 <-> LAN(192.168.10.0/24)

br0       Link encap:Ethernet  HWaddr ..
          inet addr:192.168.10.3  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ...

eth0      Link encap:Ethernet  HWaddr ..
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr ..
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

一切运行良好并且没有引起任何问题。

我们还在同一台服务器 (192.168.10.3) 上为我们的数据中心基础设施配备了 Tinc VPN,但它不属于网桥的一部分。即:

tincvpn   Link encap:Ethernet  HWaddr ..
          inet addr:192.168.10.3  Bcast:192.168.255.255  Mask:255.255.0.0
          ...

我们希望覆盖从 LAN 到某些目的地(例如 192.168.5.0/24)通过网桥传输的数据包的路由,使它们通过 tinc 传输。即:LAN 上的 192.168.10.x 到 192.168.5.x 应该通过 tinc 传输,而不是通过网关。

我们希望此功能适用于 LAN 上的所有机器,而无需进行任何配置,但现在找到了一种解决方法,即向 LAN 上的每台 PC/服务器添加以下静态路由:

route add -net 192.168.5.0/24 via 192.168.10.3 dev eth0

为了使静态路由正常工作,我们还必须为 192.168.10.3 上的所有接口启用 proxy_arp。

我们尝试了以下配置,但没有效果:

ip rule add fwmark 20 lookup 20
ip route add 192.168.0.0/16 dev tincvpn table 20
ebtables -t broute -I BROUTING -i eth1 -p ipv4 --ip-dst 192.168.5.0/24 -j REDIRECT --redirect-target DROP
iptables -t mangle -I PREROUTING -i eth1 -d 192.168.5.0/24 -j MARK --set-mark 20

使用此设置,数据包到达 mangle 规则并被标记,但它们不会路由到 tincvpn 接口

我们的理解是,我们需要使用 ebtables 将数据包从网桥中删除,然后使用基于策略的路由使数据包通过 tinc。这种理解正确吗?

如果有人知道为什么这不起作用,我们将不胜感激。

多谢,

汤姆

相关内容