OpenVPNのパフォーマンス:同時クライアントはいくつ可能ですか?


37

多くのOpenVPNクライアントがOpenVPNサーバーに接続するクライアント用のシステムを評価しています。「多く」は50000〜1000000を意味します。

なぜそうするのですか?クライアントは分散組み込みシステムであり、それぞれがシステム所有者のDSLルーターの背後にあります。サーバーはクライアントにコマンドを送信できる必要があります。私の最初の素朴なアプローチは、クライアントをopenvpnネットワーク経由でサーバーに接続させることです。これにより、安全な通信トンネルを双方向で使用できます。

これは、すべてのクライアントが常にサーバーに接続されていることを意味します。長年にわたってまとめている多くのクライアントがあります。

問題は、特定の数のクライアントに到達するとOpenVPNサーバーが爆発するかどうかです。TCP接続の最大数の制限を既に知っているため、(およびその他の理由で)VPNはUDPトランスポートを使用する必要があります。

OpenVPNの達人、あなたの意見は何ですか?


これに関する最終的な結論を私たちと共有してもらえますか?5,000人以上のユーザーでテストを実行できましたか?
フィリップ

こんにちはPhilipp、OpenVPNプランを廃止しました。これまで誰も触れたことのない地面に触れることは明らかだったからです。Node.js接続管理サーバーへのSSLベースの通常のTCPソケット接続を選択しました。
ステフェンミュラー

回答:


25

これほど大きなセットアップがこれまでに試行されたことはないと思うので、試行するときに制限を押している可能性があります。400クライアントのVPN展開に関する記事を見つけることができましたが、テキストから判断すると、著者はCPUごとに実行できるクライアントの数に関するおおよその見積もりに依存しており、彼のセットアップがどのように実行されるかについての理解が不足していました。

主に次の2つの点を考慮する必要があります。

  1. データ転送で使用する帯域幅には、VPNサーバー側で暗号化/復号化が必要になり、CPUリソースが消費されます

  2. OpenVPNクライアント接続は、データが転送されない場合でもサーバー上のメモリとCPUリソースの両方を消費します

現在入手可能なまともなPCハードウェアは、BlowfishまたはAES-128でギガビットリンクを簡単に飽和させるはずです。100ドルの組み込みデバイスでも100 Mbps近いレート可能です

デフォルトのキー再生成間隔が3600秒である場合、1,000,000クライアントの数は、サーバーが平均で毎秒278のキー交換を完了する必要があることを意味します。キー交換はかなりCPUを集中的に使用するタスクですが、必要に応じて専用ハードウェアにオフロードできます。利用可能な暗号化アクセラレータカードは、この数のTLSハンドシェイクを簡単に満たして超過します。また、メモリの制限もあまり気にする必要はありません。64ビットバイナリは、他の方法でヒットする可能性のある仮想メモリの制限を処理する必要があります。

しかし、OpenVPNの真の美しさは、非常に簡単にスケールアウトできることです-任意の数のOpenVPNサーバーをセットアップし、クライアントがそれらを使用していることを確認するだけです(たとえば、DNSラウンドロビンを介して)、選択した動的ルーティングプロトコルを構成します(通常、これは単純なためRIPです)、十分なハードウェアがあれば、インフラストラクチャは任意の数のクライアントをサポートできます。


簡潔な回答をありがとう。openvpnの使用に代わるものがありますか?主な目標は、ルータを通過する双方向通信を行うことです。
ステフェンミュラー

2
@SteffenMüller完全なスタックではなく、制御チャネルのみが必要な場合は、ボットネットに似たものを使用してください。実装が利用可能であり、SANSは便利な紙提供していますそれらを設定する方法について
- wabbit

興味深いリンクをありがとう。残念ながら、ボットは単純なポーリングを使用して、サーバーに情報があるかどうかを照会しています。これが方法かもしれませんが、双方向接続を確立して維持する方法を探しています。絶え間ないポーリングは、コマンド実行の遅延または無用なポーリング要求のための大量のデータを引き起こします。たぶん永続的なTCP接続が行く方法ですか?
ステフェンミュラー

1
@SteffenMüllerボットネットは、数千のクライアントをうまく処理できることが証明されています。SANSからヒントを得た特定の実装を採用する必要はありません-他にもたくさんあります。それ以外に、あなたの正確な要件を知らなければ、それを伝えるのは本当に難しいです。キープアライブを送信するTCP接続は、NATゲートウェイでの状態関係が期限切れにならないことを確認できます。ただし、他のすべて(認証、暗号化、エラー処理)をすべて自分で処理する必要があります。
-wabbit

2
ところで、キー再生成の間隔を短くできない理由はありません(セキュリティのトレードオフがあります。キーが侵害されると、最後のキー再生成まで平文が明らかになります)。また、ルーティングやその他の接続ルックアップが最初に失敗することを心配します。OpenVPNが<100の接続をアクティブにすることを意図している場合、どこかで接続のO(n)ルックアップが行われる可能性はありますか?
デロバート

26

同様にDSLルーターの背後にある「わずか」数百のリモート接続で、実際にこれを実行しました。キー再生成の問題についてはあまりコメントできませんが、途中で学んだいくつかの実用的なこと:

1)クライアントを展開するときは、クライアントconf、vpn1.example.com、vpn2.example.com、vpn3 .....で複数のVPNサーバーを指定していることを確認してください。自分自身のヘッドルーム。適切に構成されたクライアントは、動作するものが見つかるまでランダムに再試行し続けます。

2)カスタムAWS VPNサーバーイメージを使用し、オンデマンドで追加の容量をスピンアップできます。AmazonDNS(R53)はDNSの側面を処理します。インフラストラクチャから完全に切り離されています。

3)サーバー側で、ネットマスクを慎重に使用して、潜在的なクライアントの数を制限します。これにより、クライアントを代替サーバーに強制し、CPUの問題を軽減する必要があります。私たちのサーバーは300クライアント程度に制限されていると思います。この選択は、私たちの側ではいくぶんarbitrary意的でした-あなたが望むなら、「直感」。

4)サーバー側でも、ファイアウォールを慎重に使用する必要があります。簡単に言えば、クライアントがVPN接続できるように設定しましたが、サーバーは既知のIPアドレス以外からのすべてのssh接続を厳密に拒否します。時々必要な場合は、クライアントにSSHで接続できますが、クライアントはSSHで接続できません。

5)クライアント側でOpenVPNが再接続を行うことに依存しないでください。10回のうち9回は停止しますが、時々スタックします。クライアント側でopenVPNを定期的にリセット/再起動する別のプロセスを用意してください。

6)クライアント用に一意のキーを生成する方法が必要なため、それらを時々否認できます。これらをサーバービルド(PXEboot)プロセスで内部的に生成します。私たちには決して起こりませんでしたが、私たちはそれができることを知っています。

7)VPNサーバー接続を効果的に監視するための管理ツール、スクリプトが必要になります。

残念ながらこれを行う方法についてはあまり資料はありませんが、慎重に構成すれば可能です。


洞察力をありがとうございました。私は、再入力の問題はすでに300台のクライアントであなたを打つことに驚いています...
ステファン・ミュラー

明確にするために-彼らはしていませんが、私もそれを追跡していません。問題がある場合は、AWSイメージをより大きなインスタンスにバンプするだけです。サーバー上でこれほど多くの接続に近づ​​いたことはなく、おそらく最大で約100にすぎませんが、複数のサーバーを実行し、既知のリストから宛先をランダムに選択するopenvpnとほぼ一致しています。
-Aitch

これを行う方法について、さらに詳しく教えてください。「5)クライアント側でOpenVPNが再接続を行うことに依存しないでください。クライアント側でopenVPNを定期的にリセット/再起動してください。」
ダグ

申し訳ありませんが、4.5年前にその仕事を辞めました(!)
-Aitch

(現在、1台のVPNサーバーで約400台のデバイスで同様のセットアップを行っています)vpnに到達できない、タイムアウトする、または拒否された場合の対処方法を決定する必要があります。ランダムな再試行間隔は永遠にあなたを助けず、トラフィックのみを生成します。問題に応じて、クライアントでは、通常はできないファイアウォール/ DSLで何かをする必要があります。そのため、システムをスリープフェーズ「後で、データを転送」に送信するか、問題がVPNサーバー自体である場合。ログを介してそれを推定し、それに基づいて決定できます。キー再生成は(まだ)私たちにとって問題ではありません。
デニス・ノルティ

3

更新2018

2012年以降、何が変わったのかはわかりません。2018年の私の経験について更新したいだけです。OPセットアップと非常によく似たopenvpnネットワークを展開しました。当社のエンドポイントは、組み込みデバイスではなく、完全なlinux PCです。各エンドポイントには、そのサイトの情報とアラームを表示するために使用されるモニターがあり、当社のサーバーを使用すると、すべてのエンドポイントにリモートで接続することができます。ネットワークは過度にアクティブではありませんが、同時に5〜10のリモートセッションが存在する場合があります。

単一コアと2GBのRAMを備えた紺aイメージ上の約100クライアントでのopenvpnの現在のビルドを使用すると、平均で約0.7%のメモリを使用し、CPU使用率はほぼ常に約0%です。この小さなテストで見つけたものに基づいて、適切な仕様の単一サーバーは、それをサポートするRAMがあれば50000の同時処理を簡単に処理できると考えています。RAM使用量が線形にスケーリングされた場合、16 GBは専用のopenvpnマシンで十分な追加で50000ユーザーを処理できます。

かなり自信を持って言えるほどの規模ではありませんが、ネットワークを最初に展開したときにこれを見つけて、この規模でより多くのリソース使用を期待していたため、最近の更新を提供したかっただけです。今、私はこれを実行するCPUにはハードウェア暗号化があると信じており、どの時点でトラフィックが過負荷になるのかはわかりませんが、あまり通信しないエンドポイントの場合、これは問題になりません。

1000000では、1台のマシンに200GBのRAMが必要です(追加で線形にスケーリングした場合)これは可能ですが、その時点で、1台のポイントがないように64GBのRAMを搭載した5台のマシンが必要だと思います失敗の。これにより、重大な問題なしに、1台または2台のマシンのメンテナンス、再起動、および交換が可能になります。

私のRAMの見積もりは、openvpnの使用量全体をクライアントの数で割っているので、そのRAMの一部のみがクライアントに起因しているため、おそらく過剰に過ぎます。

最初に展開してから1年で74のエンドポイントを追加しました。私はその数を大幅に増やし続け、適切な規模に達した場合はさらに更新することを望んでいます。


これを行う方法に関する詳細を共有できますか?:「5)頼らないで、上記のスレッドにコメントさせてくれませんが、これに答えたいと思います:クライアント側でOpenVPNが再接続を行います。 10回のうち10回になりますが、時々スタックすることがあります。クライアント側でopenVPNを定期的にリセット/再起動する別のプロセスを用意してください。」-ダグ17年5月18日17
12-クレイグズ

文字数制限に達します。これを行うには、supervisordを使用します。それは自動的にすべての6-12hを再起動してください
CraigZ

1

私は同様の問題を調査していますが、クライアントの数は数百から数千になる可能性があります。

私はすべてのクライアントを常に接続したままにできないと考えました。

クライアントがポーリングされたかどうかを確認できるように、ランダムな時間間隔でOpenVPNデーモンを起動することを考えています。彼らが電子メールか何かをオンラインで送信し、一定時間キープアライブパケットを送信して、接続できるようにする場合です。

しばらくの間トラフィックがない場合、デーモンは停止します。

私が今直面している問題は、現在接続されているVPNクライアントのリストを取得することが不可能なように見えることです...


1
接続されているクライアントの現在のリストは、openvpnステータスログから取得できます。現在のサーバーに接続されているすべてのIPが表示されます。
Fa11enAngel 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.