如何同时使用VPN和非VPN?

如何同时使用VPN和非VPN?

这可能是 VPN 配置的问题,但我想做的是让特定的用户帐户使用 VPN 连接,并让系统的其余部分使用非 VPN 连接。我遇到的问题是我似乎无法同时建立 VPN 和非 VPN 连接。

有关我的设置的一些信息。我全新安装了 Ubuntu Server 16.04,并使用 OpenVPN 建立 VPN 连接(到专用互联网访问 VPN 服务器)。

例如。如果我运行,ifconfig我会收到以下信息:

enp2s0    Link encap:Ethernet  HWaddr fc:aa:14:cd:89:1c
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::feaa:14ff:fecd:891c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:638452 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93481 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:901618753 (901.6 MB)  TX bytes:5702645 (5.7 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:176 errors:0 dropped:0 overruns:0 frame:0
          TX packets:176 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:12800 (12.8 KB)  TX bytes:12800 (12.8 KB)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:60:89:9c
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

现在,使用上述接口,我可以执行以下操作:

$ curl --interface enp2s0 icanhazip.com

它会成功返回我的IP地址。接下来,我使用以下设置连接到 VPN:

client
dev tun
proto udp
remote us-chicago.privateinternetaccess.com 1198
resolv-retry infinite
nobind
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
auth-user-pass pia.cred
# route-nopull
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.rsa.2048.pem
ca ca.rsa.2048.crt
disable-occ

它将建立连接并提供以下信息ifconfig

enp2s0    Link encap:Ethernet  HWaddr fc:aa:14:cd:89:1c
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::feaa:14ff:fecd:891c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:638594 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93598 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:901632961 (901.6 MB)  TX bytes:5727985 (5.7 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:176 errors:0 dropped:0 overruns:0 frame:0
          TX packets:176 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:12800 (12.8 KB)  TX bytes:12800 (12.8 KB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.53.10.6  P-t-P:10.53.10.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:375 (375.0 B)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:60:89:9c
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

现在执行以下命令即可成功穿越VPN:

$ curl --interface tun0 icanhazip.com

但执行以下命令会连接失败:

$ curl --interface enp2s0 icanhazip.com

我希望发生的是,我希望能够通过 tun0 通过 VPN 进行连接,通过 enp2s0 通过非 VPN 进行连接。从那里,我可以设置 iptables 路由来根据需要路由特定连接。

更新:有评论建议使用网络命名空间,所以经过搜索,我发现了一个有关在 OpenVPN 中使用网络命名空间的文章。我可以使用此命令建立连接

$ sudo openvpn --ifconfig-noexec --route-noexec --up netns-script --route-up netns-script --down netns-script --script-security 2 --config 'US Chicago.ovpn'

但是,当我尝试使用 VPN 建立连接时,它只会超时

$ sudo ip netns exec vpn curl icanhazip.com
curl: (6) Could not resolve host: icanhazip.com

答案1

这取决于 VPN 服务器的配置方式。在您的情况下,所有流量均已通过 VPN 路由。通过更改 enp2s0 的默认网关可能会给您答案。另外,通过命令检查 VPN 服务器的 P2P IP 链接ip neigh是否可达。

相关内容