我正在使用 VPN,但我希望有一个用户可以不通过 VPN 而是使用我的真实 IP 地址访问网络。
问题是我通过快速谷歌找到的所有解决方案,例如这个http://blog.sebastien.raveau.name/2009/04/per-process-routing.html 需要有一些手动配置的路由,使用 iptables 标记流量,然后路由它。
但是,当我使用 wifi 时,如何为每个进程/用户进行路由?我无法有一些预先配置的路线,因为我可能会去某个地方并使用不同的网关连接到另一个 wifi 网络。我真的不想每次使用 gui 连接到另一个网络时都弄乱终端。编写一个脚本来解析网络管理器添加的路由并重新配置路由似乎也不是正确的方法。
那么,让一个用户独立于接口的路由网关设置通过指定接口(wlan0)并且所有其他用户进入其他接口(VPN 的 tun)的最佳方法是什么?
答案1
通过使用相反的想法来做到这一点 - 将除“直接”用户之外的所有用户路由到 VPN,而不是将直接用户路由到 wlan 接口。因为VPN网络ip是静态的
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush
iptables -t mangle -A OUTPUT -m owner ! --uid-owner direct2net -j MARK --set-mark 42
iptables -t mangle -A OUTPUT -d (vpn ip) -j MARK --set-mark 0
iptables -t nat -A POSTROUTING -m mark --mark 42 -j SNAT --to-source (local ip in vpn's network)
ip rule add fwmark 42 table 42
ip route add default via (vpn network gateway) dev tun0 table 42