我想连接到 VPN,但不通过它发送所有流量。
以下是我的网络的设置方式,其中 VPN 重定向所有流量。这是默认设置,VPN 配置未更改。
$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether bc:5f:f4:0e:04:bb brd ff:ff:ff:ff:ff:ff
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100
link/none
$ ip route list
0.0.0.0/1 via 10.35.0.98 dev tun0
default via 192.168.1.1 dev enp4s0
10.35.0.1 via 10.35.0.98 dev tun0
10.35.0.98 dev tun0 proto kernel scope link src 10.35.0.97
128.0.0.0/1 via 10.35.0.98 dev tun0
[VPN PUBLIC IP] via 192.168.1.1 dev enp4s0
192.168.1.0/24 dev enp4s0 proto kernel scope link src 192.168.1.8
当我将 VPN 配置为不重定向所有流量时,路由会发生变化。
$ ip route list
default via 192.168.1.1 dev enp4s0
10.35.0.1 via 10.35.0.98 dev tun0
10.35.0.98 dev tun0 proto kernel scope link src 10.35.0.97
192.168.1.0/24 dev enp4s0
当 VPN 配置为不重定向所有流量时,尝试使用 tun0 接口不起作用。这个curl命令只是挂起。
curl google.com --interface tun0
如何配置我的网络,以便当我尝试直接使用 tun0 接口时,我仍然可以通过 VPN 发送流量。
我研究过路由,但不知道如何为特定网络接口路由流量。我读到的所有内容都是关于路由源/目标地址的。
答案1
您不能只是“使用 tun0 接口”,这不是 IP 堆栈的工作方式。虽然您可以告诉某些应用程序“绑定”到特定接口,但应用程序仍然需要正确设置网络堆栈的其余部分,包括路由和网关,因此您不能使用它在出站之间“切换”随意连接。
因此,您可以根据源地址或目标地址对想要通过 VPN 路由的流量和不想使用 VPN 的流量进行分类。然后可以通过普通路由或者策略路由(如果按照源地址分类的话)来进行区分。
或者您有一些应用程序想要使用 VPN,而其余应用程序不应该使用 VPN。在这种情况下,创建一个网络命名空间,将 VPN 端点放入该命名空间中,并启动应在该命名空间中使用 VPN 的应用程序。
如果您有其他标准来区分 VPN 和非 VPN 使用,请编辑您的问题并具体说明。