Projet

Général

Profil

Benchmark VPN » Historique » Version 12

« Précédent - Version 12/17 (diff) - Suivant » - Version actuelle
Baptiste Jonglez, 08/06/2014 15:34
Results for wr841n


Benchmark VPN

But : étudier la performance de différentes solutions de VPN sur des petits routeurs OpenWRT.

Le but final étant de se servir des tunnels pour router des IP publiques : Partage_ADSL_OpenVPN

Pour les autres critères de choix (facilité de mise en place, sécurité, etc), voir VPN.

Méthodologie

Matériel : un routeur à benchmarker, et deux ordinateurs testeurs (voir plus bas pour se contenter d'un seul ordinateur testeur)

Le routeur monte un tunnel VPN avec un ordinateur branché sur le WAN. Sur le LAN, l'autre ordinateur se connecte normalement.

En un schéma :

Setup pour benchmark VPN

Une fois ce setup en place, on utilise iperf en TCP entre les deux laptops, en empruntant le tunnel (i.e. entre 192.168.42.1 et 172.23.38.2 sur le schéma)

On ne fait pas de iperf sur le routeur directement, car iperf bouffe lui-même pas mal de CPU. De plus, sur le routeur, on ne met ni firewall, ni NAT.

Tests à réaliser : iperf TCP entre les deux laptops, dans les deux sens, dans les cas suivants :

  • test gros paquets (1400 octets), puis petits paquets (cf. VoIP, 50 à 100 octets, la mesure standard étant 64 octets)
  • sans emprunter le VPN (baseline), puis à travers le VPN

Paramètres mesurés :

  • débit mesuré par iperf, et en déduire le nombre de paquets par secondes (attention à la taille des headers dans le calcul)
  • consommation CPU sur le routeur (difficilement automatisable / reproductible ?)

Autres tests possibles :

  • avec/sans firewall stateful
  • client connecté sur le wifi plutôt que sur un des ports LAN (mais les résultats risquent de beaucoup dépendre du matériel wifi)

À terme, on peut envisager une automatisation de ce processus, par exemple via un paquet OpenWRT pour le routeur et une configuration toute faite et/out script pour le testeur.

Notes sur iperf

  • C'est difficile de choisir la taille des paquets (l'option "-M" fait des choses...)
  • Le débit donné par iperf correspond au payload TCP. Avec des petits paquets, le débit affiché peut facilement être deux fois plus faible que le débit brut sur l'interface (overhead des headers TCP/IP/Ethernet)
  • Les chiffres obtenus sont donc à prendre avec des pincettes... C'est l'ordre de grandeur qui est important.

Avec un seul laptop

C'est possible de tester avec un seul laptop, si il a deux interfaces réseau (par exemple une carte réseau USB). Par contre, il faut bidouiller un peu : si on iperf vers une de ses propres adresses, ça va rester en local et ne pas passer par le routeur.

Solution : utiliser les network namespaces de linux. Technique décrite ici : http://blog.bofh.it/debian/id_446

La première interface est eth0, qui sera branchée sur le WAN (donc côté VPN), tandis que eth1 sera utilisée en simple client sur le LAN.

ip netns add bench
ip link set eth1 netns bench
ip netns exec bench ip link set lo up
ip netns exec bench ip link set eth1 up

Il suffit ensuite de faire toutes les manips sur eth1 avec ip netns exec bench devant, ou bien carrément lancer un shell dans le nouveau namespace :

ip netns exec bench /bin/bash

Related

Rien de bien concret côté OpenWRT :

Résultats

Template

Example result (fictional):

Techno Version Packet size In throughput In measured pps Out throughput Out measured pps Router CPU load
No VPN linux 3.3.8 1500 95 Mbps 3K 95 Mbps 3K 50% sirq
64 50 Mbps 15K 50 Mbps 15K 95% sirq
Openvpn 2.2 1500 40 Mbps 1K 35 Mbps 1K 10% sirq, 90% openvpn
64 5 Mbps 5K 10 Mbps 5K 50% sirq, 50% openvpn
PPP/L2TPv2 linux 3.3.8
xl2tp 1.3.1
1500 40 Mbps 1K 35 Mbps 1K 20% sirq, 80% kernel
64 5 Mbps 5K 10 Mbps 5K 50% sirq, 50% kernel

"in" and "out" throughput are defined with respect to the client. "in" is VPN server to LAN client, "out" is LAN client to VPN server.

TP-Link WR841N v8

See specs: http://wiki.openwrt.org/toh/tp-link/tl-wr841nd#hardware

Notes:

  • "payload size" is the size of the TCP payload when using iperf in TCP mode. If you specify "iperf -M X", then the size of the TCP payload is "X - 12" (don't ask me why...)
  • IN: from VPN server to LAN client
  • OUT: from LAN client to VPN server
  • The format for versions is <software> <version used by the router> (<version used by the VPN server, i.e. laptop>)
  • Except noted otherwise, everything uses the default config:
    • OpenVPN: no compression, 2048 RSA static key, p2p mode, UDP
    • Tinc: no compression, 2048 RSA key
Techno Version Payload size Direction Throughput pps CPU (usr) CPU (sys) CPU (sirq) Comment
No VPN linux 3.3.8 (3.14.5) 1448 IN 94.2 Mbps 8129
OUT 94.2 Mbps 8129
76 IN 17.4 Mbps 28590
OUT 23.4 Mbps 38463
GRE linux 3.3.8 (3.14.5) 1448 IN 92.7 Mbps 8003
OUT 92.8 Mbps 8014
76 IN 10.5 Mbps 17197
OUT 9.92 Mbps 16309
IPIP linux 3.3.8 (3.14.5) 1448 IN 93.0 Mbps 8024
OUT 93.0 Mbps 8026
76 IN 11.3 Mbps 18602
OUT 11.4 Mbps 18803
PPP/L2TPv2 linux 3.3.8 (3.14.5)
xl2tp 1.3.1 (1.3.6)
1448 IN 88.8 Mbps 7661
OUT 88.6 Mbps 7648
76 IN 9.59 Mbps 15780
OUT 8.36 Mbps 13745
Tinc
Default cipher
Default digest
tinc 1.0.21 (1.0.24)
OpenSSL 1.0.1g (1.0.1.g)
1448 IN 15.9 Mbps 1369
OUT 15.1 Mbps 1301
76 IN 1.26 Mbps 2069
OUT 1.30 Mbps 2140
OpenVPN
Default cipher
Default auth
openvpn 2.2.2 (2.3.4)
OpenSSL 1.0.1g (1.0.1.g)
1448 IN 17.9 Mbps 1548
OUT 15.6 Mbps 1345
76 IN 1.46 Mbps 2395
OUT 1.29 Mbps 2116
Tinc
No cipher
Default digest
tinc 1.0.21 (1.0.24)
OpenSSL 1.0.1g (1.0.1.g)
1448 IN 22.9 Mbps 1975
OUT 21.3 Mbps 1842
76 IN 1.53 Mbps 2511
OUT 1.57 Mbps 2574
OpenVPN
No cipher
Default auth
openvpn 2.2.2 (2.3.4)
OpenSSL 1.0.1g (1.0.1.g)
1448 IN 26.8 Mbps 2313
OUT 26.2 Mbps 2264
76 IN 1.92 Mbps 3153
OUT 1.90 Mbps 3130
Tinc
Default cipher
No digest
tinc 1.0.21 (1.0.24)
OpenSSL 1.0.1g (1.0.1.g)
1448 IN 23.9 Mbps 2062
OUT 21.9 Mbps 1890
76 IN 1.95 Mbps 3206
OUT 1.96 Mbps 3225
OpenVPN
Default cipher
No auth
openvpn 2.2.2 (2.3.4)
OpenSSL 1.0.1g (1.0.1.g)
1448 IN 22.0 Mbps 1899
OUT 18.9 Mbps 1632
76 IN 1.71 Mbps 2819
OUT 1.46 Mbps 2403
Tinc
No cipher
No digest
tinc 1.0.21 (1.0.24)
OpenSSL 1.0.1g (1.0.1.g)
1448 IN 42.2 Mbps 3639
OUT 36.7 Mbps 3167
76 IN 2.60 Mbps 4276
OUT 2.59 Mbps 4257
OpenVPN
No cipher
No auth
openvpn 2.2.2 (2.3.4)
OpenSSL 1.0.1g (1.0.1.g)
1448 IN 42.8 Mbps 3693
OUT 41.8 Mbps 3607
76 IN 2.68 Mbps 4411
OUT 2.66 Mbps 4380