两个openvpn连接(不同的主机)在同一个客户端的路由

我试图在同一个客户端多个隧道,并成功连接到openvpn服务器后,我已经申请了一些路由创build没有成功的隧道。 我的第一个隧道有效,但第二个隧道没有。 我这样做是这样的:

无所事事之前的路线

default 192.168.1.1 0.0.0.0 UG 0 0 0 enp3s0 link-local * 255.255.0.0 U 1000 0 0 enp3s0 192.168.1.0 * 255.255.255.0 U 0 0 0 enp3s0 

第一条隧道

France.ovpn

 client dev tun proto udp remote france.privateinternetaccess.com lport 1190 resolv-retry infinite persist-key persist-tun cipher aes-128-cbc auth sha1 tls-client remote-cert-tls server auth-user-pass /etc/openvpn/piaauth.txt comp-lzo verb 1 reneg-sec 0 crl-verify /etc/openvpn/crl.rsa.2048.pem ca /etc/openvpn/ca.rsa.2048.crt disable-occ lport 1189 rport 1198 

|

 sudo /usr/sbin/openvpn --config /etc/openvpn/France.ovpn --dev tun0 --route-noexec sudo route add -net 10.88.10.1 gw 10.88.10.5 netmask 255.255.255.255 dev tun0 sudo route add -net 10.88.10.5 gw * netmask 255.255.255.255 dev tun0 sudo route add -net 128.0.0.0 gw 10.88.10.5 netmask 128.0.0.0 dev tun0 sudo route add -net 172.98.67.121 gw 192.168.1.1 netmask 255.255.255.255 enp3s0 

第一条隧道之后的路线

 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.1 0.0.0.0 UG 0 0 0 enp3s0 10.88.10.1 10.88.10.5 255.255.255.255 UGH 0 0 0 tun0 10.88.10.5 * 255.255.255.255 UH 0 0 0 tun0 128.0.0.0 10.88.10.5 128.0.0.0 UG 0 0 0 tun0 link-local * 255.255.0.0 U 1000 0 0 enp3s0 172.98.67.121 192.168.1.1 255.255.255.255 UGH 0 0 0 enp3s0 192.168.1.0 * 255.255.255.0 U 0 0 0 enp3s0 

所有的作品完美

现在我试试这个:

Norway.ovpn

 client dev tun proto udp remote no.privateinternetaccess.com resolv-retry infinite persist-key persist-tun cipher aes-128-cbc auth sha1 tls-client remote-cert-tls server auth-user-pass /etc/openvpn/piaauth.txt comp-lzo verb 1 reneg-sec 0 crl-verify /etc/openvpn/crl.rsa.2048.pem ca /etc/openvpn/ca.rsa.2048.crt disable-occ lport 1187 rport 1198 sudo /usr/sbin/openvpn --config /etc/openvpn/Norway.ovpn --route-noexec sudo route add -net 10.39.10.1 gw 10.39.10.5 netmask 255.255.255.255 dev tun1 sudo route add -net 10.39.10.5 gw * netmask 255.255.255.255 dev tun1 sudo route add -net 108.61.123.81 gw 192.168.1.1 netmask 255.255.255.255 enp3s0 

路线现在:

 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.1 0.0.0.0 UG 0 0 0 enp3s0 10.39.10.1 10.39.10.5 255.255.255.255 UGH 0 0 0 tun1 10.39.10.5 * 255.255.255.255 UH 0 0 0 tun1 10.8.10.1 10.8.10.5 255.255.255.255 UGH 0 0 0 tun0 10.8.10.5 * 255.255.255.255 UH 0 0 0 tun0 108.61.123.81.c 192.168.1.1 255.255.255.255 UGH 0 0 0 enp3s0 128.0.0.0 10.8.10.5 128.0.0.0 UG 0 0 0 tun0 link-local * 255.255.0.0 U 1000 0 0 enp3s0 172.98.67.121 192.168.1.1 255.255.255.255 UGH 0 0 0 enp3s0 192.168.1.0 * 255.255.255.0 U 0 0 0 enp3s0 

我认为这个问题是在尝试添加最后的路线之后出现的:

 sudo route add -net 128.0.0.0 gw 10.39.10.5 netmask 128.0.0.0 dev tun1 

因为我之前和tun0一起使用了128.0.0.0。 我试图改变它像252.0.0.0或224.0.0.0不同的东西,但它不起作用。 如果我尝试使用128.0.0.0 tun1工作,但tun0不。 我该怎么做才能使这两个隧道同时工作?

主路由表

每个路由表只能有一个默认路由。 如果要将路由添加到main路由表中,则需要决定将哪个网关用作默认路由。

当使用redirect-gateway def1 ,OpenVPN会向主路由表中添加2个(更具体的)路由(每个路由匹配一半的IP地址范围),覆盖默认路由而不删除它:

 0.0.0.0/1 via 10.8.0.1 dev tun0 # network 0.0.0.0 mask 128.0.0.0 default via 10.0.2.2 dev eth0 # network 0.0.0.0 mask 0.0.0.0 128.0.0.0/1 via 10.8.0.1 dev tun0 # network 128.0.0.0 mask 128.0.0.0 

这两个覆盖路线同样适用。 在main路由表中添加0.0.0.0/1128.0.0.0/1路由是不可能的。

基于策略的路由

我怀疑你想要做的是configuration某种拆分隧道。 假定使用tun0tun1设备,可以使用基于策略的路由如下所示来实现。

首先添加2个路由表:

 echo "100 tun0" >> /etc/iproute2/rt_tables echo "101 tun1" >> /etc/iproute2/rt_tables 

创build/etc/openvpn/route-up.sh脚本以在openvpn连接时自动添加路由:

 #!/bin/bash RULE_EXIST=$(ip rule list | grep "from ${ifconfig_local}" | wc -l) if [ $RULE_EXIST -ne 0 ]; then ip rule del from "${ifconfig_local}" lookup "${dev}" fi ip rule add from "${ifconfig_local}" lookup "${dev}" ip route add default via "${route_vpn_gateway}" dev "${dev}" table "${dev}" 

运行chmod +x /etc/openvpn/route-up.sh

将这些行添加到OpenVPN客户端configuration文件中:

 route-noexec route-up /etc/openvpn/route-up.sh script-security 2 

现在连接两个客户端并检查路由表:

 root@debian:/etc/openvpn# ip route show default via 10.0.2.2 dev eth0 10.0.2.0/24 dev eth0 scope link src 10.0.2.15 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 root@debian:/etc/openvpn# ip route show table tun0 default via 10.8.0.1 dev tun0 root@debian:/etc/openvpn# ip route show table tun1 default via 10.0.2.2 dev eth0 root@debian:/etc/openvpn# ip rule show 0: from all lookup local 32762: from 10.8.0.2 lookup tun0 32763: from 10.0.2.15 lookup tun1 32766: from all lookup main 32767: from all lookup default 

现在你需要决定怎么做。 例如,要启用简单的负载平衡,请添加以下路由:

 ip route del default ip route add default scope global nexthop via 10.8.0.1 dev tun0 weight 1 \ nexthop via 10.0.2.2 dev eth0 weight 1 

之后,主路由表如下所示:

 root@debian:/etc/openvpn# ip route show default nexthop via 10.8.0.1 dev tun0 weight 1 nexthop via 10.0.2.2 dev eth0 weight 1 10.0.2.0/24 dev eth0 scope link src 10.0.2.15 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 

使用基于策略的路由,你可以做很酷的事情。 更多的想法参见下面的参考。

OpenVPN脚本debugging

将其添加到route-up.sh脚本以帮助debugging,并查看可用的variables:

 log=/tmp/ovpn.log exec >>"$log" 2>&1 chmod 666 "$log" 2>/dev/null printenv 

然后在连接时运行tail -f /tmp/ovpn.log

参考

  • 使用iptables标记数据包进行基于端口的策略路由
  • Linux策略路由快速入门
  • Linux高级路由和stream量控制HOWTO
  • 使用Linux的IP层networkingpipe理指南