背景:我想检查 VPN 提供商的各个服务器的速度,并编写了一个iperf3
为每个服务器运行的脚本。该脚本不会以任何方式修改网络设置。
问题:虽然简单的openvpn
命令会带来功能隧道,但添加脚本会破坏通信。
还请查看我的编辑在问题的末尾,这可能表明发生了什么。为此我还修改了问题的标题
情况 0:否openvpn
- 网络正常
路由表是
default via 10.0.3.1 dev eth0
10.0.3.0/24 dev eth0 proto kernel scope link src 10.0.3.46
情况 1:普通openvpn
- 联网正常
命令
# openvpn --config at3.nordvpn.com.tcp443.ovpn --auth-user-pass auth.txt
(...)
Sat Mar 5 19:06:17 2016 /sbin/ip link set dev tun0 up mtu 1500
Sat Mar 5 19:06:17 2016 /sbin/ip addr add dev tun0 local 10.7.7.210 peer 10.7.7.209
Sat Mar 5 19:06:17 2016 /sbin/ip route add 37.252.190.165/32 via 10.0.3.1
Sat Mar 5 19:06:17 2016 /sbin/ip route add 0.0.0.0/1 via 10.7.7.209
Sat Mar 5 19:06:17 2016 /sbin/ip route add 128.0.0.0/1 via 10.7.7.209
Sat Mar 5 19:06:17 2016 /sbin/ip route add 10.7.7.1/32 via 10.7.7.209
Sat Mar 5 19:06:17 2016 Initialization Sequence Completed
引入具有关联路线的隧道
0.0.0.0/1 via 10.7.7.209 dev tun0
default via 10.0.3.1 dev eth0
10.0.3.0/24 dev eth0 proto kernel scope link src 10.0.3.46
10.7.7.1 via 10.7.7.209 dev tun0
10.7.7.209 dev tun0 proto kernel scope link src 10.7.7.210
37.252.190.165 via 10.0.3.1 dev eth0
128.0.0.0/1 via 10.7.7.209 dev tun0
Traceroute 到www.google.com
就OK了
# traceroute 66.102.1.103
traceroute to 66.102.1.103 (66.102.1.103), 30 hops max, 60 byte packets
1 10.7.7.1 (10.7.7.1) 32.933 ms 65.328 ms 65.332 ms
2 37-252-190-129.rev.ipax.at (37.252.190.129) 65.341 ms 65.337 ms 65.335 ms
(...)
案例 2:openvpn
使用脚本 - 网络失败
OpenVPN 开始于
# openvpn --config at3.nordvpn.com.tcp443.ovpn --auth-user-pass auth.txt --script-security 2 --route-delay 5 --route-up "./testlink.sh at3.nordvpn.com.tcp443.ovpn"
(...)
Sat Mar 5 19:11:20 2016 /sbin/ip link set dev tun0 up mtu 1500
Sat Mar 5 19:11:20 2016 /sbin/ip addr add dev tun0 local 10.7.7.210 peer 10.7.7.209
Sat Mar 5 19:11:25 2016 /sbin/ip route add 37.252.190.165/32 via 10.0.3.1
Sat Mar 5 19:11:25 2016 /sbin/ip route add 0.0.0.0/1 via 10.7.7.209
Sat Mar 5 19:11:25 2016 /sbin/ip route add 128.0.0.0/1 via 10.7.7.209
Sat Mar 5 19:11:25 2016 /sbin/ip route add 10.7.7.1/32 via 10.7.7.209
+ server=at3.nordvpn.com.tcp443.ovpn
+ iperf3 -J -c ping.online.net
最后两行是我的脚本的开头。iperf3
由于无法到达iperf3
服务器而挂起。
路由表看起来不错(=它与之前的 plain 路由表相同openvpn
,我什至对输出进行了diff
确认):
0.0.0.0/1 via 10.7.7.209 dev tun0
default via 10.0.3.1 dev eth0
10.0.3.0/24 dev eth0 proto kernel scope link src 10.0.3.46
10.7.7.1 via 10.7.7.209 dev tun0
10.7.7.209 dev tun0 proto kernel scope link src 10.7.7.210
37.252.190.165 via 10.0.3.1 dev eth0
128.0.0.0/1 via 10.7.7.209 dev tun0
但同样的跟踪路由www.google.com
失败:
# traceroute 66.102.1.103
traceroute to 66.102.1.103 (66.102.1.103), 30 hops max, 60 byte packets
1 * * *
2 * * *
(...)
为什么?
编辑
我又做了一个测试:有一个简单的、非阻塞的脚本,它会回显“hello”并退出。
令我惊讶的是,在记录线路traceroute
后,现在可以工作了。Initialization Sequence Completed
看起来脚本启动和此日志条目之间正在执行进一步的初始化步骤。在这种情况下我如何运行阻塞脚本?(阻塞是指它执行一些依赖于网络启动的操作),或者换句话说 - 在初始化完成之后?
答案1
不要使用--route-up
,因为这是在隧道出现时添加路由。
您可以尝试使用--up
,它适用于在隧道完全建立后运行的脚本。如果这仍然挂起,您需要启动子流程&
样式