Routing

如何將預設 IPV6 路由複製到第二個路由表以繞過 VPN?

  • September 3, 2022

我有一個 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,因此它不再是同一條路由並且沒有衝突。

自動化將更加困難。

引用自:https://serverfault.com/questions/1109761