Projet

Général

Profil

Benchmark VPN » Historique » Version 11

Baptiste Jonglez, 08/06/2014 08:59

1 2 Baptiste Jonglez
{{>toc}}
2 2 Baptiste Jonglez
3 1 Baptiste Jonglez
h1. Benchmark VPN
4 1 Baptiste Jonglez
5 1 Baptiste Jonglez
But : *étudier la performance de différentes solutions de VPN sur des petits routeurs OpenWRT.*
6 1 Baptiste Jonglez
7 1 Baptiste Jonglez
Le but final étant de se servir des tunnels pour router des IP publiques : [[Partage_ADSL_OpenVPN]]
8 1 Baptiste Jonglez
9 2 Baptiste Jonglez
Pour les autres critères de choix (facilité de mise en place, sécurité, etc), voir [[VPN]].
10 1 Baptiste Jonglez
11 2 Baptiste Jonglez
h2. Méthodologie
12 1 Baptiste Jonglez
13 7 Baptiste Jonglez
Matériel : un routeur à benchmarker, et deux ordinateurs testeurs (voir plus bas pour se contenter d'un seul ordinateur testeur)
14 7 Baptiste Jonglez
15 7 Baptiste Jonglez
Le routeur monte un tunnel VPN avec un ordinateur branché sur le WAN.  Sur le LAN, l'autre ordinateur se connecte normalement.
16 7 Baptiste Jonglez
17 7 Baptiste Jonglez
En un schéma :
18 7 Baptiste Jonglez
19 1 Baptiste Jonglez
!benchmark-setup.png!
20 1 Baptiste Jonglez
21 7 Baptiste Jonglez
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)
22 7 Baptiste Jonglez
23 7 Baptiste Jonglez
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.
24 7 Baptiste Jonglez
25 7 Baptiste Jonglez
Tests à réaliser : *iperf TCP entre les deux laptops, dans les deux sens*, dans les cas suivants :
26 7 Baptiste Jonglez
27 7 Baptiste Jonglez
* test gros paquets (1400 octets), puis petits paquets (cf. VoIP, 50 à 100 octets, la mesure standard étant 64 octets)
28 7 Baptiste Jonglez
* sans emprunter le VPN (baseline), puis à travers le VPN
29 7 Baptiste Jonglez
30 7 Baptiste Jonglez
Paramètres mesurés :
31 7 Baptiste Jonglez
32 7 Baptiste Jonglez
* débit mesuré par iperf, et en déduire le nombre de paquets par secondes (attention à la taille des headers dans le calcul)
33 7 Baptiste Jonglez
* consommation CPU sur le routeur (difficilement automatisable / reproductible ?)
34 7 Baptiste Jonglez
35 7 Baptiste Jonglez
Autres tests possibles :
36 7 Baptiste Jonglez
37 7 Baptiste Jonglez
* avec/sans firewall stateful
38 7 Baptiste Jonglez
* 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)
39 2 Baptiste Jonglez
40 1 Baptiste Jonglez
À 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.
41 2 Baptiste Jonglez
42 11 Baptiste Jonglez
h3. Notes sur iperf
43 11 Baptiste Jonglez
44 11 Baptiste Jonglez
* C'est difficile de choisir la taille des paquets (l'option "-M" fait des choses...)
45 11 Baptiste Jonglez
* 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)
46 11 Baptiste Jonglez
* Les chiffres obtenus sont donc à prendre avec des pincettes... C'est l'ordre de grandeur qui est important.
47 11 Baptiste Jonglez
48 8 Baptiste Jonglez
h3. Avec un seul laptop
49 8 Baptiste Jonglez
50 8 Baptiste Jonglez
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. 
51 8 Baptiste Jonglez
52 8 Baptiste Jonglez
Solution : utiliser les *network namespaces* de linux. Technique décrite ici : http://blog.bofh.it/debian/id_446
53 8 Baptiste Jonglez
54 9 Baptiste Jonglez
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.
55 9 Baptiste Jonglez
56 9 Baptiste Jonglez
<pre>
57 9 Baptiste Jonglez
ip netns add bench
58 9 Baptiste Jonglez
ip link set eth1 netns bench
59 9 Baptiste Jonglez
ip netns exec bench ip link set lo up
60 9 Baptiste Jonglez
ip netns exec bench ip link set eth1 up
61 9 Baptiste Jonglez
</pre>
62 9 Baptiste Jonglez
63 9 Baptiste Jonglez
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 :
64 9 Baptiste Jonglez
65 9 Baptiste Jonglez
<pre>
66 9 Baptiste Jonglez
ip netns exec bench /bin/bash
67 9 Baptiste Jonglez
</pre>
68 9 Baptiste Jonglez
69 1 Baptiste Jonglez
h2. Related
70 2 Baptiste Jonglez
71 2 Baptiste Jonglez
Rien de bien concret côté OpenWRT :
72 1 Baptiste Jonglez
73 2 Baptiste Jonglez
* http://wiki.openwrt.org/doc/howto/performance
74 1 Baptiste Jonglez
* http://wiki.openwrt.org/doc/hardware/performance
75 2 Baptiste Jonglez
76 2 Baptiste Jonglez
h2. Résultats
77 2 Baptiste Jonglez
78 10 Baptiste Jonglez
h3. Template
79 1 Baptiste Jonglez
80 10 Baptiste Jonglez
Example result (fictional):
81 10 Baptiste Jonglez
82 10 Baptiste Jonglez
|_.Techno    |_.Version |_.Packet size |_.In throughput |_. In measured pps |_.Out throughput |_.Out measured pps |_.Router CPU load |
83 10 Baptiste Jonglez
|/2. No VPN  |/2. linux 3.3.8 | 1500   | 95 Mbps        | 3K                | 95 Mbps         | 3K                | 50% sirq         |
84 10 Baptiste Jonglez
                        | 64           | 50 Mbps        | 15K               | 50 Mbps         | 15K               | 95% sirq         |
85 10 Baptiste Jonglez
|/2. Openvpn |/2. 2.2   | 1500         | 40 Mbps        | 1K                | 35 Mbps         | 1K                | 10% sirq, 90% openvpn |
86 10 Baptiste Jonglez
                        | 64           | 5 Mbps         | 5K                | 10 Mbps         | 5K                | 50% sirq, 50% openvpn |
87 10 Baptiste Jonglez
|/2. PPP/L2TPv2 |/2. linux 3.3.8    
88 10 Baptiste Jonglez
                     xl2tp 1.3.1    | 1500         | 40 Mbps        | 1K                | 35 Mbps         | 1K                | 20% sirq, 80% kernel |
89 10 Baptiste Jonglez
                                    | 64           | 5 Mbps         | 5K                | 10 Mbps         | 5K                | 50% sirq, 50% kernel |
90 10 Baptiste Jonglez
91 10 Baptiste Jonglez
"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.
92 10 Baptiste Jonglez
93 10 Baptiste Jonglez
h3. TP-Link WR841N v8