Logicznie rzecz biorąc, VPN powinien być szybszy niż SSH do tunelowania, ponieważ:
- Działa na UDP, a nie TCP (więc nie TCP przez TCP)
- Ma kompresję
Jednak dzisiaj przetestowałem replikację Redis w obu metodach.
Przeprowadziłem test na maszynie wirtualnej AWS w Irlandii, łącząc się z maszyną AWS na wschodzie Stanów Zjednoczonych.
Ponieważ moim przypadkiem testowym jest replikacja Redis, dokładnie to przetestowałem - uruchomiłem pusty serwer Redis, a po zakończeniu ładowania slaveof
uruchomiłem drugi serwer i zmierzyłem czas między Connecting to MASTER
a MASTER <-> SLAVE sync: Finished with success
. W międzyczasie użyłem
while 1; do redis-cli -p 7777 info | grep master_sync_left_bytes;sleep 1; done
Aby uzyskać przybliżone oszacowanie prędkości.
SSH wygrał długim strzałem: ~ 11 MB / s w porównaniu do ~ 2 MB / s OpenVPN.
Czy to oznacza, że wszystko, co powtórzyłem, było złe, czy też rażąco źle skonfigurowałem moją konfigurację?
Aktualizacja
Przeprowadziłem kilka testów z tym samym zestawem danych i uzyskałem następujące wyniki:
- OpenVPN
- TCP:
kompresja: 15m
brak kompresji: 21m - UDP:
kompresja: 5 m
brak kompresji: 6 m
- TCP:
Domyślne wartości SSH : 1m50s
brak kompresji: 1m30s
kompresja: 2m30s
Aktualizacja 2
Oto wyniki iperf z testami dwukierunkowymi (oprócz SSH, gdzie nie jest dostępna ścieżka zwrotna)
| 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 |
Specyfikacja techniczna
Używam CentOS 6.3 (serwer), CentOS 6.5 (klient).
Wersja OpenVPN to 2.3.2 (tak samo jak w Ubuntu 14.10, więc nie ma wersji spleśniałej)
Moje tunelowanie SSH wygląda następująco:
ssh -f XXXX@XXXX -i XXXX -L 12345:127.0.0.1:12345 -N
Mój plik konfiguracyjny wygląda następująco:
serwer
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