使用 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,該伺服器不是網橋的一部分。 IE:

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。這種理解正確嗎?

如果有人對為什麼這不起作用有任何想法,我們將不勝感激。

多謝,

湯姆

相關內容