通过 VPN 路由来自客户端的所有流量并更改本地子网

通过 VPN 路由来自客户端的所有流量并更改本地子网

我有一个简单的网状 VPN(使用 Tinc 实现),其中包含我的个人笔记本电脑和具有公共 IP 的 VPS。假设服务器的公共 IP 是1.2.3.4。笔记本电脑的私有地址是10.16.1.2,服务器的私有地址是10.16.0.2

我想路由全部通过 VPN 传输来自笔记本电脑的流量,并使其从 VPS 退出。我已经通过启用转发和伪装将服务器设置为网关,但我不知道如何在笔记本电脑上配置路由。

问题是笔记本电脑没有固定的本地子网。例如,有时它可能是192.168.0.0/24我家路由器的子网,也可能是172.16.0.0/12我大学的子网。

我希望我的笔记本电脑能够通过 VPN 网关路由所有流量,但同时,即使它有一个未知的变化子网,我也应该能够访问本地网络。

这是我成功完成的事情:

# ip route
default via 192.168.0.1 dev wlan0
0.0.0.0/1 via 10.16.0.2 dev vpn 
128.0.0.0/1 via 10.16.0.2 dev vpn 
10.16.0.0/16 dev vpn  proto kernel  scope link  src 10.16.1.2 
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.133

按照一些 OpenVPN 指南,我将整个互联网分成两个大的/1,这样它们就可以充当某种默认路由,而不会更改实际的默认路由(default via 192.168.0.1 dev wlan0)。问题是,即使是发往 VPS 的数据包也会1.2.3.4被路由捕获/1,导致流量被卡住。

如果可以写类似这样的内容:

ip route add 1.2.3.4/32 via default

这会很好,但我不认为这可能。

我甚至尝试了基于策略的路由并使用 iptables 标记数据包,但没有成功。

答案1

如果不知道您的实际 VPS IP 地址,我无法为您提供确切的命令,但基本上您需要将“互联网”分成更多部分,其中不包括您的 VPS。例如,如果您的 VPS 地址是 255.255.255.255(显然不是),那么您需要

  • 127.0.0.0/7 通过 10.16.0.2 dev vpn
  • 255.0.0.0/15 通过 10.16.0.2 dev vpn
  • 255.255.0.0/23 通过 10.16.0.2 dev vpn
  • 255.255.255.0/31 通过 10.16.0.2 dev vpn

请注意,这涵盖了您的第二个互联网块,但您的 VPS 地址除外。请注意,我故意选择了一个简单的地址,这样我就不会整天都在这里,但如果您愿意编写足够的路线,您可以为任何您想要的地址执行此操作,只要您的 VPS 地址不变,您只需执行一次即可。

相关内容