Logiquement, VPN devrait être plus rapide que SSH pour le tunneling, car:
- Il fonctionne sur UDP et non sur TCP (donc pas de TCP sur TCP)
- Il a une compression
Cependant, aujourd'hui, j'ai testé la réplication Redis sur les deux méthodes.
J'ai exécuté le test sur une machine virtuelle AWS en Irlande, en me connectant à une machine virtuelle AWS US-East.
Étant donné que mon cas de test est la réplication Redis, c'est exactement ce que j'ai testé - j'ai exécuté un serveur Redis vierge, et une fois le chargement terminé, j'ai exécuté slaveof
l'autre serveur et mesuré le temps entre Connecting to MASTER
et MASTER <-> SLAVE sync: Finished with success
. Entre les deux, j'ai utilisé
while 1; do redis-cli -p 7777 info | grep master_sync_left_bytes;sleep 1; done
Pour obtenir une estimation brute de la vitesse.
SSH a gagné de loin: ~ 11 Mo / s par rapport à ~ 2 Mo / s d'OpenVPN.
Est-ce à dire que tout ce que j'ai réécrit était faux, ou ai-je grossièrement mal configuré ma configuration?
Mise à jour
J'ai fait plusieurs tests avec le même ensemble de données et obtenu ces résultats:
- OpenVPN
- TCP:
compression: 15m
pas de compression: 21m - UDP:
compression: 5m
pas de compression: 6m
- TCP:
- Paramètres SSH par
défaut: 1m50s
sans compression: 1m30s
compression: 2m30s
Update2
Voici les résultats iperf, avec des tests bidirectionnels (sauf SSH, où aucun chemin de retour n'est disponible)
| 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 |
Spécifications techniques
J'utilise CentOS 6.3 (serveur), CentOS 6.5 (client).
La version d'OpenVPN est 2.3.2 (identique à Ubuntu 14.10, donc pas de version moisie)
Mon tunneling SSH ressemble à:
ssh -f XXXX@XXXX -i XXXX -L 12345:127.0.0.1:12345 -N
Mon fichier de configuration ressemble à:
serveur
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
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