使用 VPN 时的网络接口路由

使用 VPN 时的网络接口路由

我想连接到 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 使用,请编辑您的问题并具体说明。

相关内容