Routing
如何將預設 IPV6 路由複製到第二個路由表以繞過 VPN?
我有一個 VPN 網關樹莓派(執行樹莓派作業系統)保護我的傳出流量免受 VPN 洩漏。
我在我的 VPN 網關上執行一個 SOCKS5 代理(dante-server),這樣我就可以為特定的應用程序在 VPN 上打一個洞。
我按照這些說明創建了第二個繞過 VPN 的路由表:https ://serverfault.com/a/761780
我沒有使用 cgroups,而是根據所有者作為
socks
使用者來標記數據包。為了將沒有 VPN 的路由複製到novpn
路由表(但沒有 vpntun0
路由),我創建了一個 dhclient 退出掛鉤,如下所示。這一切都適用於 ipv4。但是對於 ipv6,在預設路由表中我看到:
fe80::/64 dev eth0 proto kernel metric 256 pref medium fe80::/64 dev eth1 proto kernel metric 256 pref medium fe80::/64 dev tun0 proto kernel metric 256 pref medium
當我嘗試將它們複製到
novpn
表格時,它不會讓我:user@raspberrypi:~ $ sudo ip -6 route add fe80::/64 dev eth0 proto kernel metric 256 pref medium table novpn user@raspberrypi:~ $ sudo ip -6 route add fe80::/64 dev eth1 proto kernel metric 256 pref medium table novpn RTNETLINK answers: File exists
為什麼系統能夠在我無法複製到
novpn
表的預設路由表中創建路由?
Linux核心可以作弊。
proto kernel
當它自動在同一個路由表中添加具有衝突值的路由()時,它並不關心自己。這些通常是自動前綴 LAN 路由,並且免於某些檢查。Userland 不能這樣做:在同一個路由表中添加第二個介面上的同一個路由會觸發File exists
。您可以更改指標,使其不再被視為同一路線,從而避免衝突。這對於鏈路本地 IPv6 地址無關緊要:在使用它們時必須指定一個介面,因此eth0介面不會真正具有優先權:必須進行選擇的情況永遠不會發生。
sudo ip -6 route add fe80::/64 dev eth0 proto kernel metric 256 pref medium table novpn sudo ip -6 route add fe80::/64 dev eth1 proto kernel metric 257 pref medium table novpn [...]
由於第二條路由具有不同的度量標準:257 而不是 256,因此它不再是同一條路由並且沒有衝突。
自動化將更加困難。