从逻辑上讲,VPN的隧道传输速度应比SSH快,这是因为:
- 它在UDP而不是TCP上运行(因此在TCP上没有TCP)
- 它有压缩
但是,今天我测试了这两种方法的Redis复制。
我通过连接到美国东部AWS VM的爱尔兰AWS VM运行测试。
由于我的测试用例是Redis复制,因此这正是我所测试的-我运行了一个空白的Redis服务器,并在完成加载后,执行slaveof
了另一台服务器,并测量了Connecting to MASTER
和之间的时间 MASTER <-> SLAVE sync: Finished with success
。在这之间,我用
while 1; do redis-cli -p 7777 info | grep master_sync_left_bytes;sleep 1; done
以获得速度的粗略估计。
SSH赢得了一个遥遥领先:〜11MB / s,相比之下,OpenVPN为〜2MB / s。
这是否意味着我重新确定的所有内容都是错误的,还是我严重错误地配置了我的设置?
更新资料
我对同一数据集进行了几次测试,并得到了以下结果:
- 开放VPN
- TCP:
压缩:15m
无压缩:21m - UDP:
压缩:5m
无压缩:6m
- TCP:
- SSH
默认值:1m50s
无压缩:1m30s
压缩:2m30s
更新2
以下是双向测试的iperf结果(SSH除外,其中没有返回路径可用)
| method | result (Mb/s)|
|------------------+--------------|
| ssh | 91.1 / N.A |
| vpn blowfish udp | 43 / 11 |
| vpn blowfish tcp | 13 / 12 |
| vpn AES udp | 36 / 4 |
| vpn AES tcp | 12 / 5 |
技术规格
我正在运行CentOS 6.3(服务器),CentOS 6.5(客户端)。
OpenVPN版本为2.3.2(与Ubuntu 14.10中的相同,因此那里没有发霉的版本)
我的SSH隧道如下所示:
ssh -f XXXX@XXXX -i XXXX -L 12345:127.0.0.1:12345 -N
我的配置文件如下:
服务器
port 1194
proto udp
dev tun0
topology subnet
log /var/log/openvpn.log
ca XXXX
cert XXXX
key XXXX
dh XXXX
crl-verify XXXX
cipher AES-256-CBC
server XXXX 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
keepalive 10 120
comp-lzo
status /var/log/openvpn-status.log
verb 3
tun-mtu 1500
fragment 1300
persist-key
persist-tun
客户
client
remote XXXX 1194
proto udp
dev tun
log /var/log/openvpn.log
comp-lzo
cipher AES-256-CBC
ns-cert-type server
# the full paths to your server keys and certs
ca XXXX
cert XXXX
key XXXX
tun-mtu 1500 # Device MTU
fragment 1300 # Internal fragmentation
persist-key
persist-tun
nobind