Benchmark VPN » Historique » Version 10
« Précédent -
Version 10/17
(diff) -
Suivant » -
Version actuelle
Baptiste Jonglez, 01/06/2014 04:00
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 :
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.
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.