我尝试在同一个客户端中创建多个隧道,在成功连接到 openvpn 服务器后,我为创建的隧道应用了一些路由,但没有成功。我的第一个隧道可以工作,但第二个隧道却不行。我这样做:
什么都不做之前的路线
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
第一条隧道
法国.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
一切完美
现在我尝试这样做:
挪威.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 不行。我应该怎么做才能使两个隧道同时工作?
答案1
主路由表
每个路由表只能有一个默认路由。如果要将路由添加到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
这 2 条覆盖路由也一样。无法将另一条路由添加0.0.0.0/1
到128.0.0.0/1
路由main
表。
基于策略的路由
我怀疑您想要配置某种分割隧道。可以使用基于策略的路由来实现,如下所示,假设tun0
和tun1
设备被使用。
首先再添加2张路由表:
echo "100 tun0" >> /etc/iproute2/rt_tables
echo "101 tun1" >> /etc/iproute2/rt_tables
创建一个/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 客户端配置文件:
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脚本调试
将其添加到route-up.sh
脚本中以帮助调试并查看可用的变量:
log=/tmp/ovpn.log
exec >>"$log" 2>&1
chmod 666 "$log" 2>/dev/null
printenv
然后在连接的同时运行tail -f /tmp/ovpn.log
。