私たちは12ノードで構成されたクラスタを作成し、100%のセキュリティを必要とする各コンピュータ間の多くの通信にOpenVPNを使用しようとしています(100%のセキュリティ/プライベート環境にアクセスできないため、OpenVPNを使用する必要があります)。
したがって、次の設定があります。
+------------------+
| |
| OpenVPN Server |
| |
+------------------+
^
|
+-----+------+----------------+----------+
| | . |
| | . |
v v . v
+------------------+ +------------------+ ..... +------------------+
| | | | . . | |
| OpenVPN Client | | OpenVPN Client | . . | OpenVPN Client |
| A | | B | . . | n |
+------------------+ +------------------+ ..... +------------------+
OpenVPNサーバーは12台のコンピュータの1つであり、クライアントが他のクライアントと通信するたびに動作が停止することを発見しました。ファイアウォール情報を見ると、クライアントが互いに通信していないことが明らかになります。代わりに、すべてのデータはサーバーに送信され、別のクライアントに転送されます。つまり、クライアントAからクライアントBへの転送がAからサーバーへ、そしてサーバーからBに進むのがわかります。
私が知りたいことは:
AはBにデータを送信するたびにBの公開鍵を取得しますか? OpenVPNクライアントコードがデータがBに送信されていることを知る必要があるためではないようです。したがって、私が正しく理解した場合、何が起こっているのかは次のとおりです。
- クライアントAはサーバーの公開鍵を使用してデータを暗号化します。
- クライアントAは暗号化されたBLOBをサーバーに送信します。
- サーバーは秘密鍵を使用してBLOBを復号化します。
- サーバーは、BLOBを渡す場所を決定します。
- サーバは、クライアントBの公開鍵を使用してデータを再暗号化する。
- サーバーは、新しく暗号化されたBLOBをクライアントに送信します。
- クライアントBは秘密鍵を使用してBLOBを復号化します。
つまり、実際には次のようになります。
+------------------+
| |
| OpenVPN Server |<-----------------------+
| | |
+------------------+ |
^ ^ ^ |
| | . |
| | . |
| | .................. |
| | . |
v v v v
+------------------+ +------------------+ ..... +------------------+
| | | | . . | |
| OpenVPN Client | | OpenVPN Client | . . | OpenVPN Client |
| A | | B | . . | n |
+------------------+ +------------------+ ..... +------------------+
そうですか?ドキュメントで似たようなものを見つけようとしましたが、OpenVPNをインストールする方法についてのみ見つけることができました。 (私たちはやったし、効果がありましたが、かなり遅いようです!予想よりはるかに遅かったです。)
答え1
あなたは正しいです。設定には、クライアントとサーバーの間に「サイト間」VPNセットがあります。クライアント間の通信はサーバー上で行う必要があります。
実際、デフォルトでは、クライアントはサーバーが許可しない限りお互いを見ることはできません。マンページから:
--client-to-client
Because the OpenVPN server mode handles multiple clients through
a single tun or tap interface, it is effectively a router. The
--client-to-client flag tells OpenVPN to internally route
client-to-client traffic rather than pushing all client-origi-
nating traffic to the TUN/TAP interface.
When this option is used, each client will "see" the other
clients which are currently connected. Otherwise, each client
will only see the server. Don't use this option if you want to
firewall tunnel traffic using custom, per-client rules.
答え2
はい、OpenVPNクライアント - サーバー構成は2番目の図のようになります。トンネルは OpenVPN サーバーと OpenVPN クライアントの間にあります。 OpenVPN サーバーは、あるトンネルのデータを復号化して別のトンネルで暗号化します。
(クライアント - サーバーアーキテクチャではなく)ピアツーピアアーキテクチャを使用するOpenVPNを使用して、最初のチャートを実装できます。ネットワーク内の各システムペアに対してVPNトンネルを設定する必要があります。つまり、ノードごとのn VPNトンネル、合計n²トンネル(非常に便利ではありません)です。
何が起こっているかについてのあなたの分析は、一部を除いてほとんど正確です。公開/秘密鍵は、トンネルの内部/外部パケットを暗号化/復号化するために(直接)使用されません。代わりに、トンネルを認証し、実際の暗号化/暗号解読(およびMAC)に使用される対称セッションキーをネゴシエートするために使用されます。