it-swarm.com.de

OpenVPN-Leistung: Wie viele gleichzeitige Clients sind möglich?

Ich evaluiere ein System für einen Client, bei dem viele OpenVPN-Clients eine Verbindung zu einem OpenVPN-Server herstellen. "Viele" bedeutet 50000 - 1000000.

Warum mache ich das? Die Clients sind verteilte eingebettete Systeme, die sich jeweils hinter dem DSL-Router des Systembesitzers befinden. Der Server muss in der Lage sein, Befehle an die Clients zu senden. Mein erster naiver Ansatz besteht darin, die Clients über ein openvpn-Netzwerk mit dem Server zu verbinden. Auf diese Weise kann der sichere Kommunikationstunnel in beide Richtungen verwendet werden.

Dies bedeutet, dass alle Clients immer mit dem Server verbunden sind. Es gibt viele Kunden, die sich im Laufe der Jahre zusammenfassen.

Die Frage ist : explodiert der OpenVPN-Server, wenn eine bestimmte Anzahl von Clients erreicht wird? Mir ist bereits ein Maximum von TCP Verbindungsnummernlimit) bekannt, daher müsste das VPN (und aus anderen Gründen) den UDP-Transport verwenden.

OpenVPN-Gurus, wie ist Ihre Meinung?

40
Steffen Müller

Ich bezweifle, dass jemals zuvor ein so großes Setup versucht wurde, sodass Sie beim Versuch wahrscheinlich Grenzen überschreiten werden. Ich konnte einen Artikel über eine VPN-Bereitstellung für 400 Clients finden, aber nach dem Text zu urteilen, stützte sich der Autor nur auf grobe Schätzungen darüber, wie viele Clients pro CPU ausgeführt werden könnten, und hatte kein Verständnis dafür, wie sein Setup aussehen würde ausführen.

Sie müssten hauptsächlich diese beiden Punkte berücksichtigen:

  1. Die Bandbreite, die Ihre Datenübertragungen verwenden werden, muss auf der Seite des VPN-Servers verschlüsselt/entschlüsselt werden, was CPU-Ressourcen verbraucht

  2. OpenVPN-Clientverbindungen belegen sowohl Speicher- als auch CPU-Ressourcen auf dem Server, selbst wenn keine Daten übertragen werden

Jede anständige PC-Hardware, die heute verfügbar ist, sollte eine Gigabit-Verbindung mit Blowfish oder AES-128 problemlos überlasten. Selbst eingebettete Geräte im Wert von 100 US-Dollar sind mit Raten nahe 100 Mbit/s , sodass CPU-Engpässe aufgrund der Bandbreitenintensität keine auftreten sollten Besorgnis, Sorge.

Bei einem Standard-Neuschlüsselintervall von 3600 Sekunden würde eine Anzahl von 1.000.000 Clients bedeuten, dass der Server durchschnittlich 278 Schlüsselaustausche pro Sekunde durchführen muss. Während ein Schlüsselaustausch eine ziemlich CPU-intensive Aufgabe ist, können Sie ihn bei Bedarf auf dedizierte Hardware auslagern. Die verfügbaren kryptografischen Beschleunigerkarten erfüllen und überschreiten diese Anzahl von TLS-Handshakes problemlos. Und Speicherbeschränkungen sollten auch nicht zu viel stören - eine 64-Bit-Binärdatei sollte sich um alle Einschränkungen des virtuellen Speichers kümmern, die Sie sonst wahrscheinlich treffen würden.

Das Schöne an OpenVPN ist jedoch, dass Sie es ganz einfach skalieren können - richten Sie einfach eine beliebige Anzahl von OpenVPN-Servern ein und stellen Sie sicher, dass Ihre Clients sie verwenden (z. B. über DNS-Round-Robin). Konfigurieren Sie ein dynamisches Routing-Protokoll Ihrer Wahl (Dies ist normalerweise RIP aufgrund seiner Einfachheit) und Ihre Infrastruktur kann eine beliebige Anzahl von Clients unterstützen, solange Sie über genügend Hardware verfügen.

25
the-wabbit

Ich habe dies tatsächlich getan, wenn auch mit "nur" ein paar hundert Remoteverbindungen ähnlich hinter DSL-Routern. Ich kann nicht zu viel über die Probleme mit der Neuverschlüsselung sagen, aber ein paar praktische Dinge, die ich dabei gelernt habe:

1) Stellen Sie beim Bereitstellen von Clients sicher, dass Sie mehrere VPN-Server in den Clients conf, vpn1.example.com, vpn2.example.com, vpn3 ..... angeben. Auch wenn Sie jetzt nur einen oder zwei davon angeben, geben Sie an selbst Kopffreiheit. Richtig konfiguriert, werden die Clients sie nach dem Zufallsprinzip wiederholen, bis sie einen finden, der funktioniert.

2) Wir verwenden ein benutzerdefiniertes AWS VPN-Server-Image und können bei Bedarf zusätzliche Kapazität hochfahren. Amazon DNS (R53) übernimmt die DNS-Seite. Es ist vollständig vom Rest unserer Infrastruktur getrennt.

3) Verwenden Sie auf der Serverseite die Netzmaske sorgfältig, um die Anzahl potenzieller Clients zu begrenzen. Dies sollte Clients auf einen alternativen Server zwingen und die CPU-Probleme verringern. Ich denke, wir beschränken unsere Server auf ungefähr 300 Clients. Diese Wahl war unsererseits etwas willkürlich - "Bauchgefühl", wenn Sie möchten.

4) Auch auf der Serverseite sollten Sie Firewalls sorgfältig verwenden. In einfachen Worten, wir haben unsere so konfiguriert, dass die Clients eine VPN-Verbindung herstellen können, aber die Server verbieten strikt alle eingehenden SSH-Verbindungen mit Ausnahme einer bekannten IP-Adresse. Wir können SSH an die Kunden senden, wenn wir dies gelegentlich benötigen. Sie können SSH nicht an uns senden.

5) Verlassen Sie sich nicht darauf, dass OpenVPN die erneute Verbindung für Sie auf Client-Seite vornimmt. 9 mal von 10 wird es, aber manchmal bleibt es stecken. Führen Sie einen separaten Prozess durch, um openVPN auf Client-Seite regelmäßig zurückzusetzen/neu zu starten.

6) Sie benötigen eine Möglichkeit, eindeutige Schlüssel für die Clients zu generieren, damit Sie sie manchmal ablehnen können. Wir generieren diese intern mit unserem Server Build (PXEboot) -Prozess. Ist uns nie passiert, aber wir wissen, dass wir es schaffen können.

7) Sie benötigen einige Verwaltungstools und Skripte, um Ihre VPN-Serververbindungen effektiv zu überwachen.

Es gibt leider nicht viel Material darüber, aber es ist möglich, mit sorgfältiger Konfiguration.

26
Aitch

Update 2018

Ich bin mir nicht sicher, was sich seit 2012 geändert hat. Ich wollte nur ein Update zu meinen Erfahrungen im Jahr 2018 geben. Wir haben ein OpenVPN-Netzwerk bereitgestellt, das dem OP-Setup sehr ähnlich ist. Unsere Endpunkte sind vollwertige Linux-PCs anstelle von eingebetteten Geräten. Jeder Endpunkt verfügt über einen Monitor, auf dem Informationen und Alarme für diesen Standort angezeigt werden. Unser Server ermöglicht es uns, einen einzelnen Punkt an alle Endpunkte zu übertragen. Das Netzwerk ist nicht übermäßig aktiv, hat aber manchmal 5-10 Remote-Sitzungen gleichzeitig.

Bei Verwendung eines aktuellen OpenVPN-Builds auf ungefähr 100 Clients auf einem Azure-Image mit einem einzelnen Kern und 2 GB RAM verbrauchen wir durchschnittlich ungefähr 0,7% des Arbeitsspeichers, und die CPU-Auslastung beträgt fast immer ungefähr 0%. Basierend auf dem, was ich für diesen kleineren Test gefunden habe, schätze ich, dass ein einzelner Server mit anständigen Spezifikationen problemlos 50000 gleichzeitig verarbeiten kann, wenn er den RAM hat, der ihn unterstützt. Wenn die RAM-Nutzung linear skaliert würde, könnten 16 GB 50000 Benutzer mit genügend Extra auf einem dedizierten OpenVPN-Computer verarbeiten.

Wir sind nicht groß genug, um dies mit großer Sicherheit zu sagen, aber ich wollte nur ein aktuelles Update geben, da ich dies bei der ursprünglichen Bereitstellung unseres Netzwerks festgestellt habe und viel mehr Ressourcenverbrauch in dieser Größenordnung erwartet habe. Ich glaube, dass die CPU, auf der dies ausgeführt wird, über eine Hardwareverschlüsselung verfügt, und ich bin mir nicht sicher, an welchem ​​Punkt der Datenverkehr überlastet wäre, aber für Endpunkte, die nicht viel kommunizieren, sollte dies kein Problem sein.

Bei 1000000 würden Sie 200 GB RAM auf einer einzelnen Maschine benötigen (wenn linear mit Extra skaliert), während dies möglich ist. Ich würde an diesem Punkt denken, dass Sie 5 Maschinen mit jeweils 64 GB RAM haben möchten, damit Sie keinen einzelnen Punkt haben des Scheiterns. Dies sollte die Wartung, den Neustart und den Austausch von 1 oder sogar 2 Maschinen ohne wesentliche Probleme ermöglichen.

Meine RAM-Schätzungen sind wahrscheinlich übertrieben, da ich die gesamte OpenVPN-Nutzung durch die Anzahl der Clients teile, bei denen nur ein Teil dieses RAM auf Clients zurückzuführen ist.

Seit der ersten Bereitstellung haben wir in einem Jahr 74 Endpunkte hinzugefügt. Ich hoffe, diese Zahl weiter deutlich zu steigern und werde ein weiteres Update vornehmen, wenn wir eine anständige Größenordnung erreichen.

4
CraigZ

Ich untersuche ein ähnliches Problem, obwohl die Anzahl der Kunden Hunderte, vielleicht ein paar Tausend betragen würde.

Ich dachte mir, dass ich nicht immer alle Clients in Verbindung halten kann.

Ich denke darüber nach, den OpenVPN-Daemon auf Clients in zufälligen Zeitintervallen zu starten, damit sie überprüfen können, ob sie abgefragt wurden. Wenn sie es sind, sollen sie eine E-Mail oder etwas senden, das sie online sind, und Keep-Alive-Pakete für einen bestimmten Zeitraum senden, damit ich mich mit ihnen verbinden kann.

Wenn für einige Zeit kein Datenverkehr vorhanden ist, wird der Dämon gestoppt.

Das Problem, mit dem ich gerade konfrontiert bin, ist, dass es unmöglich scheint, eine Liste der derzeit verbundenen VPN-Clients zu erhalten ...

1
Davor Dundovic