是否可以在同一台机器上同时拥有 2 个不同的 VPN 连接?也许在不同的网络接口上?

Dan*_*k82 8 networking linux vpn routing openvpn

我正在我的新工作场所建立一个新集群,而且我仍在我上一个工作场所管理另一个集群。基本上我是“复制”第一个的配置来设置新的。

现在我在家,我想同时使用两个 VPN 连接而不是一个一个地同时访问两个集群。在我看来这是不可能的,但也许有人有想法?

一个 VPN 连接使用 OpenVPN,第二个使用 CISCO VPN 客户端。或者也许可以玩路线规则来获得它?我在网络方面不是很有经验。

我正在尝试route -n尝试重新定义不同子接口的规则。这是当没有 VPN 处于活动状态时我得到的结果:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.0.1        0.0.0.0         UG    0      0        0 eth0
10.1.0.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
Run Code Online (Sandbox Code Playgroud)

现在,如果我打开 cisco VPN (VPN1):

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         xxx.xxx.xxx.117 0.0.0.0         UG    0      0        0 cscotun0
10.1.0.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0
xxx.xxx.xxx.0   0.0.0.0         255.255.255.0   U     0      0        0 cscotun0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.yy.yy.22    10.1.0.1        255.255.255.255 UGH   0      0        0 eth0
Run Code Online (Sandbox Code Playgroud)

如果我在 openVPN (VPN2) 上切换:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.0.1      0.0.0.0         UG    0      0        0 eth0
10.1.0.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     192.168.2.17    255.255.255.0   UG    0      0        0 tun0
192.168.2.17    0.0.0.0         255.255.255.255 UH    0      0        0 tun0
zzz.zzz.zz.zz   10.1.0.1        255.255.255.255 UGH   0      0        0 eth0
Run Code Online (Sandbox Code Playgroud)

现在,如果我同时打开(先打开 vpn2,然后打开 vpn1):

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         xxx.xxx.xxx.117 0.0.0.0         UG    0      0        0 cscotun0
10.1.0.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0
xxx.xxx.xxx.0   0.0.0.0         255.255.255.0   U     0      0        0 cscotun0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.yy.yy.22    10.1.0.1        255.255.255.255 UGH   0      0        0 eth0
192.168.2.17    0.0.0.0         255.255.255.255 UH    0      0        0 tun0
Run Code Online (Sandbox Code Playgroud)

理想情况下,所有对 xxx.xxx.xxx.0 的请求都应该在只有 VPN1 处于活动状态 (cscotun0) 时进行,对 192.168.2.0 的所有请求都应该通过 192.168.2.17 (tun0),另一个通过 eth0 ...

我不习惯路由,希望得到任何帮助。

编辑:受到答案的启发,我正在尝试使用route命令来尝试正确设置我的配置。

更清楚地说,我编辑了上面的路由表以反映route -n命令的结果,这提供了更多信息。我还修改了我的家庭路由器,以便我在家中有10.1.0.0 nm 255.255.255.0IP 地址。

如果我理解得很好,当只有 VPN2 (tun0) 处于活动状态时,它使用我家的默认网关 (10.1.0.1) 并定义了一些新路由,如果我理解错误,请告诉我:

192.168.1.0   192.168.2.17 -> this says "everything for 192.162.1.0 network (vpn2 network), then pass through official gateway 192.168.2.17 "
192.168.2.17  0.0.0.0 -> this says "everything for host 192.168.2.17, goes to default gateway  (0.0.0.0) " , which is currently pointing to my home rooter"
zzz.zzz.zz.zz 10.1.0.1 -> this says "everything for zzz.zzz.zz.zz . pass through my home router (10.1.0.1)
Run Code Online (Sandbox Code Playgroud)

当我单独打开 VPN1 时,它会用自己的 (xxx.xxx.xxx.53) 覆盖默认网关,并且所有内容都重定向到此网关。这也是为什么我看不到我的家庭网络顺便说一句(如果我是对的)。

现在,我看到当我打开两个 VPN 时,默认网关被重定向到 VPN1 (xxx.xxx.xxx.53) 之一,我要问的是:如何设置规则,以便:

  • 198.162.1.0 的一切都经过 198.162.2.17
  • 198.162.2.17 的东西通过 10.1.0.1
  • xxx.xxx.xxx.0 的东西通过 xxx.xxx.xxx.117
  • 10.1.0.0 的东西传递给 10.1.0.1

我曾尝试与route add和一起玩,route del但我或多或少地尝试通过反复试验来做事,我最好理解我应该做什么,如果我想在这里应用的规则是正确的或基本上是愚蠢的...

编辑 2:按照 MariusMatutiae 的建议,当两个 VPN 都打开时,我在此处附加了 ifconfig 的结果:

cscotun0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:xxx.xxx.xxx.117  P-t-P:xxx.xxx.xxx.117  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1380  Metric:1
          RX packets:21 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:4007 (4.0 KB)  TX bytes:3789 (3.7 KB)

eth0      Link encap:Ethernet  HWaddr 00:21:cc:6b:3e:ae  
          inet addr:10.1.0.226  Bcast:10.1.0.255  Mask:255.255.255.0
          inet6 addr: fe80::221:ccff:fe6b:3eae/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28245 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29039 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14287030 (14.2 MB)  TX bytes:5521200 (5.5 MB)
          Interrupt:20 Memory:f3a00000-f3a20000 

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:16436  Metric:1
          RX packets:9928 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9928 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:4962141 (4.9 MB)  TX bytes:4962141 (4.9 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:192.168.2.18  P-t-P:192.168.2.17  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:719 errors:0 dropped:0 overruns:0 frame:0
          TX packets:764 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:103523 (103.5 KB)  TX bytes:56000 (56.0 KB)
Run Code Online (Sandbox Code Playgroud)

编辑 3:

什么不起作用的描述:在我打开两个 VPN 后,我无法访问 VPN tun0;如果我尝试pingxxx.xxx.xxx.0 之外的东西,我会得到ping: sendmsg: Operation not permitted.

理想情况下,我想访问两个 VPN(如果 VNP 网络的 DNS 不起作用,我可以使用直接 IP 管理它,这不是问题),理想情况下也可以访问我的本地局域网...

不幸的是,我不是一个足够的iptables专家,无法理解我应该怎么做。

提前致谢

Mar*_*iae 10

您当然可以同时使用多个 VPN。安排这个的主要问题是确保路由表是正确的,因为所有 VPN 都会尝试改变它,而不假设有更多的 VPN 做同样的事情。

您的方案非常简单,因为您基本上是使用 VPN 来访问远程 LAN,而不是重定向所有流量。最后一个配置需要更复杂的设置,但在您的情况下,我们可以减少工作量。

一个前提条件对于这个工作是所有子网是不同的:你家的,你的两个工作场所。

假设你已经安排好了,那么你必须确保你的OpenVPN客户端配置文件包含以下语句

    redirect-gateway def1
Run Code Online (Sandbox Code Playgroud)

并且该服务器配置文件并没有包含以下声明:

   push "redirect-gateway def1 bypass-dhcp"
Run Code Online (Sandbox Code Playgroud)

由于您只对使用两个 VPN 感兴趣,这已经解决了您的问题,因为,即使另一个 VPN 抓取默认路由,您的路由表中也会有一个默认路由,您就完成了。

但是,默认情况下,Cisco VPN 不会抓取默认路由。所以你应该没问题。要检查,请确保route -n的输出包含如下几行,

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.73.1    0.0.0.0         UG    0      0        0 eth0
Run Code Online (Sandbox Code Playgroud)

其中 192.168.73.1 是您的家庭默认路由器(根据需要更改,如果您的路由器不是 192.168.73.1)。

如果您想同时通过两个 VPN 重定向所有流量(是的,可以做到),这个问题会更有趣。

编辑:

如果您愿意,您当然也可以在不同的网络接口上使用 OpenVPN。例如,您可以根据您的以太网卡调出一个虚拟接口,如下所示,

   ip link add link eth0 mac0 address 56:61:4f:7c:77:db type macvlan
   ip link set mac0 up
   dhclient mac0
Run Code Online (Sandbox Code Playgroud)

现在检查虚拟接口的IP地址MAC0

   ip addr show
Run Code Online (Sandbox Code Playgroud)

然后,在您的openvpn客户端配置文件中,您可以引入以下语句

   local IP_address_of_mac0
Run Code Online (Sandbox Code Playgroud)

当您连接到 OpenVPN 服务器时,该连接将仅绑定到接口mac0。然后,要访问远程 LAN,您需要记住将所有应用程序绑定到同一接口mac0及其 IP 地址。例如,要以这种方式通过 ssh 访问电脑,您必须说:

  ssh -b IP_address_of_mac0 user@remote_LAN_pc
Run Code Online (Sandbox Code Playgroud)

等等。对于ping,您应该使用

   ping -i IP_address_of_mac0 remote_LAN_pc
Run Code Online (Sandbox Code Playgroud)