web-dev-qa-db-ja.com

VPNサーバーの作成方法

自分で軽量のVPNサーバーをJavaで作成することにしました。プログラミングの観点からは、VPNサーバーは、クライアントからのトラフィックを暗号化し、サーバー上でそれを復号化する単なるパススループロキシであるように見えます。誰かが私にこの種のサーバーを書くスケルトンを指摘できますか?

すぐに使えるものがたくさんあり、オープンソースのものさえあることは知っていますが、残念ながら、いくつかのWebプログラミング言語を知っていても、見たCコードの例は、理解できるような方法で文書化/構造化されていません。

私が必要とする部品は次のとおりです。

  • クライアントオブジェクトのスレッドファクトリ
  • クライアント用のソケットコネクタ
  • IPSec認証ヘッダー(AH)の作成方法
  • IPSecカプセル化セキュリティペイロード(ESP)の作成方法
  • Internet Security Association and Key Management Protocol(ISAKMP)のための何か
  • インターネットキー交換(IKE)
  • PKI証明書認証モジュール
  • 証明書リポジトリ(SQLLite)
  • オークリー鍵生成(IKEおよびISAKMP用)
  • パケットの一部のリプレイ防止

汎用モジュールを使用する(およびアダプターを作成する)予定の部分は、暗号アルゴリズムです(AESは、DES/3DES-Noobs)のようなウィンドウが表示されますが)

誰かがIPSec VPNサーバーに必要な部分に詳細を追加できる場合は、貢献してください。これは私が知ることができる古いLinuxハードウェアで実行する必要があるため、サーバーはSSLVPNホットネスではなくIPSecである必要があります。ターゲットプラットフォームは古い1.5 Ghzインテルボックスで、2 GBのDDR2 ram、100 GBハードドライブ、2ギガビットNicをミラーリングしました。

明るい面では、クライアント側のVPNには非常に多くの種類があるので、自分のニーズに合わせてVPNを作成する必要はないと確信しています。

28
Dave

まず、 OpenVPN ソースコードを見てみましょう。 Javaではありませんが、原則を理解するには十分です。

1
Andrew Savinykh