VPN sollte für das Tunneln logischerweise schneller als SSH sein, weil:
- Es läuft auf UDP und nicht auf TCP (also kein TCP über TCP)
- Es hat Kompression
Heute habe ich jedoch die Redis-Replikation mit beiden Methoden getestet.
Ich habe den Test über eine AWS-VM in Irland durchgeführt und eine Verbindung zu einer AWS-VM in den USA hergestellt.
Da es sich bei meinem Testfall um die Redis-Replikation handelt, habe ich genau dies getestet: Ich habe einen leeren Redis-Server ausgeführt und nach dem Laden slaveof
den anderen Server ausgeführt und die Zeit zwischen Connecting to MASTER
und gemessen MASTER <-> SLAVE sync: Finished with success
. Dazwischen habe ich benutzt
while 1; do redis-cli -p 7777 info | grep master_sync_left_bytes;sleep 1; done
Um eine grobe Schätzung der Geschwindigkeit zu erhalten.
SSH hat bei weitem gewonnen: ~ 11MB / s im Vergleich zu OpenVPNs ~ 2MB / s.
Bedeutet das, dass alles, was ich neu erstellt habe, falsch war oder dass ich mein Setup grob falsch konfiguriert habe?
Aktualisieren
Ich habe mehrere Tests mit demselben Datensatz durchgeführt und die folgenden Ergebnisse erhalten:
- OpenVPN
- TCP:
Komprimierung: 15 m,
keine Komprimierung: 21 m - UDP:
Komprimierung: 5 m,
keine Komprimierung: 6 m
- TCP:
- SSH- Standardeinstellungen
: 1m50s,
keine Komprimierung: 1m30s,
Komprimierung: 2m30s
Update2
Hier sind die Iperf-Ergebnisse mit bidirektionalen Tests (außer SSH, wo kein Rückweg verfügbar ist).
| 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 |
Technische Daten
Ich verwende CentOS 6.3 (Server), CentOS 6.5 (Client).
OpenVPN-Version 2.3.2 (wie in Ubuntu 14.10, also keine Schimmel-Version)
Mein SSH-Tunneling sieht so aus:
ssh -f XXXX@XXXX -i XXXX -L 12345:127.0.0.1:12345 -N
Meine Konfigurationsdatei sieht aus wie:
Server
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
Klient
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