我們在 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。這種理解正確嗎?
如果有人對為什麼這不起作用有任何想法,我們將不勝感激。
多謝,
湯姆