是否有可能在某些应用程序上停止使用 VPN?

是否有可能在某些应用程序上停止使用 VPN?

目前我使用 VPN(通过位掩码完成)仅访问互联网。但我想设置它以便两个应用程序直接访问互联网。有办法吗?

$ sudo ip6tables --list-rules
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N bitmask
-A OUTPUT -j bitmask
-A bitmask -d fe80::/64 -o wlp3s0 -j ACCEPT
-A bitmask -d ff05::c/128 -o wlp3s0 -p udp -m udp --dport 1900 -j RETURN
-A bitmask -d ff02::fb/128 -o wlp3s0 -p udp -m udp --dport 5353 -j RETURN
-A bitmask -p tcp -j REJECT --reject-with icmp6-port-unreachable
-A bitmask -p udp -j REJECT --reject-with icmp6-port-unreachable

$ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 303190  bytes 23045786 (23.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 303190  bytes 23045786 (23.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.41.0.18  netmask 255.255.248.0  destination 10.41.0.18
        inet6 fe80::7b5f:9d91:701e:c55  prefixlen 64  scopeid 0x20<link>
        inet6 2001:db8:123::1010  prefixlen 64  scopeid 0x0<global>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 2419226  bytes 2916699759 (2.9 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1562458  bytes 208828031 (208.8 MB)
        TX errors 0  dropped 107 overruns 0  carrier 0  collisions 0

wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.147  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::b43f:cba:ab11:d9a8  prefixlen 64  scopeid 0x20<link>
        ether 24:0a:64:da:d6:eb  txqueuelen 1000  (Ethernet)
        RX packets 6908650  bytes 3525833381 (3.5 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7751152  bytes 7915813822 (7.9 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ iwconfig 
tun0      no wireless extensions.

lo        no wireless extensions.

enp4s0    no wireless extensions.

wlp3s0    IEEE 802.11  ESSID:"ZTE_C5959A"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: FC:2D:5E:C5:95:9A   
          Bit Rate=52 Mb/s   Tx-Power=15 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=47/70  Signal level=-63 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:6  Invalid misc:62   Missed beacon:0

答案1

使用网络命名空间可以实现这一点。

网络命名空间允许单独的 IP、路由表、套接字列表、连接跟踪表防火墙和其他网络相关资源。

至少对于 Layer3 SSH、OpenVPN 和 Wireguard 等 VPN 解决方案而言是这样,因为它们使用虚拟接口来路由 VPN 流量。

在这个简化的例子中,计算机有两个接口 eth0 和 eth1,都具有 DHCP 互联网访问权限。

  1. 连接到 VPN。

  2. 在终端中:
    sudo ip netns add not-vpn # 创建新的网络命名空间
    sudo ip link set eth1 netns not-vpn# 将 eth1 放入新命名空间
    sudo ip netns exec not-vpn bash# 使用 shell 进入新命名空间
    dhclient eth1# 为移动的接口获取 DHCP IP
    curl icanhazip.com# curl 应用程序将返回你的非 VPN 公共 IP

  3. 在另一个终端中:
    curl icanhazip.com curl 应用程序将返回您的 VPN 公共 IP,
    假设您的 VPN 配置为默认通过它路由所有流量。

答案2

您可以为这两个应用程序添加一条路由,以便它们直接连接到您想要的 IP 地址(使用无线网卡作为接口,路由器作为网关),所有其他流量都通过 VPN(添加一个默认路由,将接口设置为显示的 VPN 接口,ifconfig并将网关设置为路由器,然后删除前一个

你可以简单地添加新的路线操作说明

PS:由于新的默认路由,关闭 VPN 后您将无法访问互联网,因此您的 VPN 应始终处于打开状态,或者您必须写入之前删除的默认路由

相关内容