web-dev-qa-db-ja.com

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

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

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

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

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

OpenVPNの教祖、あなたの意見は何ですか?

40
Steffen Müller

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

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

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

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

今日利用可能なまともなPCハードウェアは、BlowfishまたはAES-128でギガビットリンクを簡単に飽和させるはずです。100ドルの組み込みデバイスでも 100 Mbpsに近いレートが可能 であるため、帯域幅の強度によるCPUボトルネックはありません懸念。

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

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

25
the-wabbit

私は実際にこれを行いましたが、DSLルーターの背後にある同様に数百のリモート接続だけで同様です。鍵の再発行の問題についてはあまりコメントできませんが、その過程で学んだいくつかの実践的なこと:

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

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

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

4)サーバー側でも、ファイアウォールを注意深く使用する必要があります。簡単に言うと、クライアントがVPN接続できるように構成されていますが、サーバーは、既知のIPアドレスからの受信以外のすべてのssh接続を厳密に禁止します。必要に応じてクライアントにSSHで接続できますが、SSHでクライアントに接続することはできません。

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

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

7)VPNサーバー接続を効果的に監視するには、いくつかの管理ツールやスクリプトが必要です。

残念ながらこれを行う方法についての資料はそれほど多くありませんが、注意深く構成すれば可能です。

26
Aitch

2018年の更新

2012年以降のすべての変更点がわからない。2018年の私の体験についてアップデートを提供したかっただけです。OPセットアップと非常によく似たopenvpnネットワークを導入しました。私たちのエンドポイントは、組み込みデバイスではなく、本格的なLinux PCです。各エンドポイントには、そのサイトの情報とアラームを表示するために使用されるモニターがあり、サーバーを使用すると、単一のポイントからすべてのエンドポイントにリモートアクセスできます。ネットワークは過度にアクティブではありませんが、同時に5〜10のリモートセッションが発生することがあります。

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

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

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

私のRAMの見積もりは、openvpnの使用全体をクライアントの数で割っているので、そのRAMの一部のみがクライアントによるものであるため、多すぎる可能性があります。

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

4
CraigZ

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

常にすべてのクライアントを接続しておくことはできないと思いました。

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

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

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

1
Davor Dundovic