Benchmark VPN » Historique » Version 10
Baptiste Jonglez, 01/06/2014 04:00
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 | 8 | Baptiste Jonglez | h3. Avec un seul laptop |
43 | 8 | Baptiste Jonglez | |
44 | 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. |
45 | 8 | Baptiste Jonglez | |
46 | 8 | Baptiste Jonglez | Solution : utiliser les *network namespaces* de linux. Technique décrite ici : http://blog.bofh.it/debian/id_446 |
47 | 8 | Baptiste Jonglez | |
48 | 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. |
49 | 9 | Baptiste Jonglez | |
50 | 9 | Baptiste Jonglez | <pre> |
51 | 9 | Baptiste Jonglez | ip netns add bench |
52 | 9 | Baptiste Jonglez | ip link set eth1 netns bench |
53 | 9 | Baptiste Jonglez | ip netns exec bench ip link set lo up |
54 | 9 | Baptiste Jonglez | ip netns exec bench ip link set eth1 up |
55 | 9 | Baptiste Jonglez | </pre> |
56 | 9 | Baptiste Jonglez | |
57 | 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 : |
58 | 9 | Baptiste Jonglez | |
59 | 9 | Baptiste Jonglez | <pre> |
60 | 9 | Baptiste Jonglez | ip netns exec bench /bin/bash |
61 | 9 | Baptiste Jonglez | </pre> |
62 | 9 | Baptiste Jonglez | |
63 | 1 | Baptiste Jonglez | h2. Related |
64 | 2 | Baptiste Jonglez | |
65 | 2 | Baptiste Jonglez | Rien de bien concret côté OpenWRT : |
66 | 1 | Baptiste Jonglez | |
67 | 2 | Baptiste Jonglez | * http://wiki.openwrt.org/doc/howto/performance |
68 | 1 | Baptiste Jonglez | * http://wiki.openwrt.org/doc/hardware/performance |
69 | 2 | Baptiste Jonglez | |
70 | 2 | Baptiste Jonglez | h2. Résultats |
71 | 2 | Baptiste Jonglez | |
72 | 10 | Baptiste Jonglez | h3. Template |
73 | 1 | Baptiste Jonglez | |
74 | 10 | Baptiste Jonglez | Example result (fictional): |
75 | 10 | Baptiste Jonglez | |
76 | 10 | Baptiste Jonglez | |_.Techno |_.Version |_.Packet size |_.In throughput |_. In measured pps |_.Out throughput |_.Out measured pps |_.Router CPU load | |
77 | 10 | Baptiste Jonglez | |/2. No VPN |/2. linux 3.3.8 | 1500 | 95 Mbps | 3K | 95 Mbps | 3K | 50% sirq | |
78 | 10 | Baptiste Jonglez | | 64 | 50 Mbps | 15K | 50 Mbps | 15K | 95% sirq | |
79 | 10 | Baptiste Jonglez | |/2. Openvpn |/2. 2.2 | 1500 | 40 Mbps | 1K | 35 Mbps | 1K | 10% sirq, 90% openvpn | |
80 | 10 | Baptiste Jonglez | | 64 | 5 Mbps | 5K | 10 Mbps | 5K | 50% sirq, 50% openvpn | |
81 | 10 | Baptiste Jonglez | |/2. PPP/L2TPv2 |/2. linux 3.3.8 |
82 | 10 | Baptiste Jonglez | xl2tp 1.3.1 | 1500 | 40 Mbps | 1K | 35 Mbps | 1K | 20% sirq, 80% kernel | |
83 | 10 | Baptiste Jonglez | | 64 | 5 Mbps | 5K | 10 Mbps | 5K | 50% sirq, 50% kernel | |
84 | 10 | Baptiste Jonglez | |
85 | 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. |
86 | 10 | Baptiste Jonglez | |
87 | 10 | Baptiste Jonglez | h3. TP-Link WR841N v8 |