我们在 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。这种理解正确吗?
如果有人知道为什么这不起作用,我们将不胜感激。
多谢,
汤姆