46 votes

Performance OpenVPN: combien de clients concurrents sont possibles?

Je suis en train d'évaluer un système pour un client où de nombreux clients OpenVPN se connectent à un serveur OpenVPN. "Beaucoup" signifie 50000 - 1000000.

Pourquoi est-ce que je fais ça? Les clients sont des systèmes intégrés distribués, chacun étant situé derrière le routeur dsl du propriétaire du système. Le serveur doit pouvoir envoyer des commandes aux clients. Ma première approche naïve est de faire en sorte que les clients se connectent au serveur via un réseau openvpn. De cette manière, le tunnel de communication sécurisé peut être utilisé dans les deux sens.

Cela signifie que tous les clients sont toujours connectés au serveur. Il y a de nombreux clients s'accumulant au fil des ans.

La question est: est-ce que le serveur OpenVPN explose quand il atteint un certain nombre de clients? Je suis déjà conscient d'une limite de nombre de connexions TCP maximum, donc (et pour d'autres raisons) le VPN devrait utiliser le transport UDP.

Gourous d'OpenVPN, quel est votre opinion?

28voto

the-wabbit Points 40039

Je doute qu'une configuration aussi importante n'ait jamais été tentée auparavant, donc vous risquez probablement de repousser les limites en essayant. J'ai pu trouver un article sur un déploiement VPN pour 400 clients mais d'après le texte, l'auteur s'est simplement basé sur des estimations approximatives sur le nombre de clients pouvant être exécutés par CPU et semblait manquer de certaines connaissances sur la façon dont sa configuration allait fonctionner.

Vous devriez principalement tenir compte de ces deux points :

  1. La bande passante utilisée par vos transferts de données nécessiterait un cryptage/décryptage du côté du serveur VPN, consommant des ressources CPU

  2. Les connexions client OpenVPN consomment à la fois de la mémoire et des ressources CPU sur le serveur, même lorsque aucune donnée n'est transférée

N'importe quel matériel PC décent disponible aujourd'hui devrait facilement saturer un lien Gigabit avec Blowfish ou AES-128, même les appareils embarqués à 100 $ sont capables d'atteindre des débits proches de 100 Mbps, donc les goulots d'étranglement CPU dus à l'intensité de la bande passante ne devraient pas être une préoccupation majeure.

Avec l'intervalle de renégociation par défaut de 3600 secondes, un nombre de 1 000 000 clients signifierait que le serveur devrait être capable de réaliser en moyenne 278 échanges de clés par seconde. Bien que l'échange de clés soit une tâche assez intensive pour le CPU, vous pourriez le décharger vers un matériel dédié si nécessaire - les cartes accélératrices cryptographiques disponibles dépassent facilement ce nombre d'opérations de poignées de main TLS. Et les restrictions de mémoire ne devraient pas poser trop de problèmes non plus - un binaire 64 bits devrait gérer toutes les restrictions de mémoire virtuelle auxquelles vous pourriez autrement être confronté.

Mais la vraie beauté d'OpenVPN est que vous pouvez facilement le mettre à l'échelle - il suffit de configurer un nombre arbitraire de serveurs OpenVPN et de vous assurer que vos clients les utilisent (par exemple, via un tour de robinet DNS), de configurer un protocole de routage dynamique de votre choix (typiquement ce serait RIP en raison de sa simplicité) et votre infrastructure serait capable de prendre en charge un nombre arbitraire de clients tant que vous avez suffisamment de matériel.

27voto

Nicolas Irisarri Points 619

J'ai en fait fait cela, même avec "seulement" quelques centaines de connexions à distance derrière des routeurs DSL. Je ne peux pas trop commenter les problèmes de rekeying, mais j'ai appris quelques choses pratiques en chemin :

1) Lors du déploiement des clients, assurez-vous de spécifier plusieurs serveurs VPN dans le fichier de configuration du client, vpn1.example.com, vpn2.example.com, vpn3... Même si vous n'en fournissez qu'un ou deux maintenant, vous vous donnez de la marge de manoeuvre. Configurés correctement, les clients continueront à les réessayer au hasard jusqu'à ce qu'ils en trouvent un qui fonctionne.

2) Nous utilisons une image de serveur VPN AWS personnalisée et pouvons augmenter la capacité supplémentaire à la demande, et Amazon DNS (R53) gère la partie DNS. Il est complètement détaché du reste de notre infrastructure.

3) À l'extrémité du(des) serveur(s), utilisez soigneusement le masque réseau pour limiter le nombre de clients potentiels. Cela devrait forcer les clients à utiliser un serveur alternatif, atténuant les problèmes de CPU. Je pense que nous limitons nos serveurs à environ 300 clients. Ce choix était quelque peu arbitraire de notre part - une intuition, si vous préférez.

4) Également à l'extrémité du serveur, utilisez soigneusement les pare-feu. En termes simples, nous avons configuré le nôtre de telle sorte que les clients puissent se connecter en VPN, mais que les serveurs interdisent strictement toutes les connexions entrantes SSH sauf d'une adresse IP connue. Nous pouvons nous connecter en SSH aux clients si nous en avons occasionnellement besoin, mais ils ne peuvent pas se connecter en SSH à nous.

5) Ne comptez pas sur OpenVPN pour reconnecter automatiquement le client. 9 fois sur 10, il le fera, mais parfois il reste bloqué. Ayez un processus séparé pour réinitialiser/redémarrer OpenVPN régulièrement au niveau du client.

6) Vous avez besoin d'un moyen de générer des clés uniques pour les clients pour pouvoir les désavouer parfois. Nous générons celles-ci en interne avec notre processus de construction de serveur (PXEboot). Cela ne nous est jamais arrivé, mais nous savons que nous pouvons le faire.

7) Vous aurez besoin d'outils de gestion, de scripts pour surveiller efficacement les connexions de votre serveur VPN.

Il n'y a malheureusement pas beaucoup de ressources sur la manière de faire cela, mais c'est possible avec une configuration soignée.

4voto

CraigZ Points 41

Mise à jour 2018

Je ne suis pas sûr de tout ce qui a changé depuis 2012. Je voulais juste donner une mise à jour de mon expérience en 2018. Nous avons déployé un réseau openvpn très similaire à la configuration OP. Nos points de terminaison sont des PC linux complets au lieu de périphériques intégrés. Chaque point de terminaison dispose d'un moniteur utilisé pour afficher des informations et des alarmes pour ce site, et notre serveur nous permet de nous connecter à distance à tous les points de terminaison à partir d'un point unique. Le réseau n'est pas très actif mais il arrive parfois qu'il y ait 5 à 10 sessions à distance simultanément.

Avec une version actuelle d'openvpn et environ 100 clients sur une image azure avec un seul cœur et 2 Go de RAM, nous utilisons en moyenne environ 0,7 % de mémoire et l'utilisation du processeur est presque toujours autour de 0 %. Basé sur ce que j'ai trouvé pour ce petit test, je suppose qu'un seul serveur avec des spécifications décentes pourrait facilement gérer 50000 connexions simultanées s'il avait la RAM nécessaire pour le supporter. Si l'utilisation de la RAM est linéaire, alors 16 Go pourrait gérer 50000 utilisateurs avec suffisamment de capacité supplémentaire sur une machine openvpn dédiée.

Nous ne sommes pas à une échelle suffisamment grande pour affirmer cela avec une grande confiance, mais je voulais juste donner une mise à jour récente puisque lorsque nous avons déployé notre réseau à l'origine, j'ai trouvé cela et je m'attendais à une consommation de ressources beaucoup plus élevée à cette échelle. Maintenant, je crois que le processeur qui exécute ceci possède un chiffrement matériel et je ne sais pas à quel moment cela serait saturé en termes de trafic, mais pour les points de terminaison qui ne communiquent pas beaucoup, cela ne devrait pas poser de problème.

Avec 1000000, vous auriez besoin de 200 Go de RAM sur une seule machine (si l'échelle est linéaire avec du supplément), bien que cela soit possible, je pense qu'à ce stade, vous voudriez avoir 5 machines chacune avec 64 Go de RAM pour éviter un point de défaillance unique. Cela devrait permettre la maintenance, les redémarrages et le remplacement de 1 ou même 2 machines sans problèmes significatifs. Mes estimations de RAM sont probablement très exagérées car je divise la totalité de l'utilisation d'openvpn par le nombre de clients alors qu'une partie seulement de cette RAM est due aux clients.

Nous avons ajouté 74 points de terminaison en un an depuis le déploiement initial. J'espère continuer à augmenter significativement ce nombre et je ferai une nouvelle mise à jour si nous atteignons une échelle décente.

1voto

Davor Dundovic Points 11

Je me penche sur un problème similaire, bien que le nombre de clients serait de l'ordre de centaines, voire de quelques milliers.

J'ai compris que je ne peux pas garder tous les clients connectés tout le temps.

Je pense à démarrer le démon OpenVPN sur les clients à des intervalles de temps aléatoires afin qu'ils puissent vérifier s'ils ont été interrogés. S'ils l'ont été, ils doivent envoyer un e-mail ou quelque chose pour indiquer qu'ils sont en ligne et envoyer des paquets de maintien de connexion pendant un certain temps pour que je puisse me connecter à eux.

S'il n'y a pas de trafic pendant un certain temps, le démon serait arrêté.

Le problème auquel je suis confronté en ce moment est qu'il semble impossible d'obtenir une liste des clients VPN connectés actuellement...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X