TL;DR: un pcengines APU 1D sait router, via openvpn chiffré, 76Mbps ou 100kpps
Router 100Mbps dans un VPN, pas si simple ?
Comme d'autres FAI de la fédération, nous utilisons, chez FAImaison, des montages où un client VPN « reçoit » un bloc d'adresses IP au travers d'un VPN pour ensuite assigner ces adresses sur son réseau local.
Ce montage, qui permet de nettoyer et partager une connexion support est explicité sur le wiki de tetaneutral.net.
J'ai eu l'occasion de voir cette configuration fonctionner :
Dans les deux cas, la connexion support était un ADSL, inférieur à 18Mbps, et la connexion VPN n'était pas un facteur limitant.
Se pose aujourd'hui la question de router 100Mbps via un montage similaire chez FAImaison. Quelques posts de ci de là laissent entendre qu'il faudra un peu de puissance CPU (pour le VPN) et une carte réseau décente (pour le routage de nombreux petits paquets).
Ces contraintes écartent de fait les machines comme le raspberry pi, le banana pi, ou la LIME1.
Souhaitant tout de même une machine sobre en énergie, FAImaison a fait l'acquisition d'un APU.1D de chez pcengines (~180€).
Benchmarks
J'ai repris le protocole que Baptiste avait établi pour cadrer mes tests. Sans être parfait (quelques estimations dans les calculs), il permet de mesurer les débits atteignables (en Mbps et en PPS) avec un équipement logiciel et matériel raisonnable.
Afin de ne pas fausser les résultats, l'autre bout du tunnel VPN était monté par une machine dont le CPU outrepasse largement celui de l'APU. J'ai mis en ligne les configuratinos serveur et client.
Les résultats sont les suivants (cf résultats bruts) :
Techno | Version | Packet size (MSS) | Débit Mbps (out/in) | pps (out/in) | Charge cpu routeur (out/in) |
---|---|---|---|---|---|
Sans VPN | linux 3.16.0 | 1448 | 929 / 916 | 672k / 663k | 7% / 7% |
112 | 52 / 94 ¹ | 492k / 882k | 22% / 70% | ||
OpenVPN (sans chiffrement) | 2.3.4 | 1370 | 139 / 128 | 103k / 95k | 100% / 91% |
112 | 16.3 / 15.3 | 152k / 143k | 97.5% / 90% | ||
OpenVPN (BF-CBC) | 2.3.4 | 1354 | 76 / 76.3 | 59k / 59k | 100% / 100% |
112 | 11.4 / 11.5 | 107k / 107k | 100% / 100% |
¹ Résultat étrangement asymétrique, mais reproductible chez moi :-/
Conclusion : c'est… presque bon.
Au regard des mesures effectuées, le chiffrement semble être l'actuel facteur limitant. Celui-ci étant souhaité, l'APU ne permet de router « que » 76Mbps.
Parmi les pistes prometteuses qui me font voir d'un bon œil cette conclusion en demi-teinte :
- L'entrée dans la prochaine version d'OpenSSL du cipher ChaCha20-Poly1305, qui devrait accélérer le chiffrement par rapport aux ciphers actuels.
- L'agrégation deux liens OpenVPN pour contrebalancer le fait qu'OpenVPN ne sache utiliser qu'un cœur de CPU (idée comme ça…)
Parmi les pistes rejetées :
- L'utilisation de tinc à la place d'OpenVPN (ne semble pas apporter de perfs)
- L'utilisation d'AES-NI (accélération crypto matérielle), non supporté par le CPU de l'APU1
- L'utilisation d'un protocole de tunnels kernel-land, faute de chiffrement correct
D'autres idées ?
En l'état, je pense que ces 76Mbps feront l'affaire, en attendant l'arrivée de chacha dans openssl.
<3
À tous les copains issus de FAImaison, tetaneutral.net et d'autres assos de la FFDN qui ont apporté leur eau au moulin.