OpenVPN

OpenVPNは、インターネット上で安全な通信を実現するためのオープンソースのVirtual Private Network(VPN)ソフトウェアです。開発はJames Yonan氏によって行われ、GNU General Public Licenseの下で公開されています。

概要



OpenVPNは、事前に共有された秘密鍵、公開鍵証明書、またはユーザー名とパスワードを用いて、ピアツーピアでの相互認証を行います。暗号化にはOpenSSLライブラリを利用し、SSLv3/TLSv1プロトコルをサポートしています。SolarisLinux、OpenBSD、FreeBSD、NetBSD、macOS、Windowsなど、多様なプラットフォームで動作可能です。高度なセキュリティ機能や制御機能を備えている一方、他のVPNシステムとの接続には対応していません。クライアント側もサーバー側も、単一のバイナリと設定ファイルで構成され、使用する認証方式に応じて必要な鍵ファイルが異なります。

暗号



データチャンネルと制御チャンネルの両方で、OpenSSLライブラリを用いた暗号化を行います。OpenSSLに含まれる様々な暗号方式を利用でき、接続時のセキュリティを強化するためにHMACパケット認証機能(開発者はHMAC Firewallと呼称)を追加することも可能です。また、ハードウェアによる暗号化アクセラレーションもサポートしており、パフォーマンスを向上させることができます。

認証



OpenVPNは、相互認証のために複数の方法を提供しています。推奨されているのは、事前共有秘密鍵、公開鍵証明書、ユーザー名とパスワードによる認証です。事前共有秘密鍵が最も手軽ですが、公開鍵証明書はより高い安全性と豊富な機能を提供します。ユーザー名とパスワード認証は比較的新しい機能(バージョン2.0以降)で、クライアント側の認証を省略することも可能です(ただしサーバー側は必須)。ソースコードのtarballには、Perlスクリプトによるユーザー名/パスワード検証(PAM)とC言語によるPAMの実装例が含まれています。

ネットワーク



OpenVPNは、すべての通信を単一のIPポートに多重化します。UDP(デフォルト、推奨)とTCPの両方をサポートしており、ほとんどのプロキシサーバーやNAT、ファイアウォール環境下でも正常に通信可能です。サーバー側からクライアント側に、IPアドレス、ルーティングコマンド、その他の接続オプションなどのネットワーク設定を送信することもできます。OpenVPNは、TUN/TAPドライバを介した2種類のネットワーキング方法を提供します。ネットワーク層でのIPトンネルと、データリンク層でのイーサネットTAPのどちらかを選択できます。後者のイーサネットTAPを使用すれば、任意の種類のイーサネットトラフィックを転送できます。オプションで、LZOデータ圧縮ライブラリを用いて転送データの圧縮も可能です。IANAはポート1194をOpenVPNの公式ポートとして割り当てており、新しいバージョンではこのポートがデフォルトで使用されます。バージョン2.0以降では、単一のプロセスで複数のトンネルを同時に管理できるようになりました。

セキュリティ



OpenVPNは、ユーザー空間で完全に動作するため、カーネルでのIPスタック操作を必要としません。また、root権限の禁止、mlockallによる重要データのスワップアウト禁止、初期化後のchrootによるアクセス制限など、多くのセキュリティ機能を備えています。PKCSベースの暗号トークンによるICカードサポートも利用可能です。さらに、VPN認証パケットに対して、サーバーとクライアント間で共有されたHMAC値を付加することで、セキュリティを強化できます。これにより、HMAC鍵を知らない第三者による不正なVPN認証パケットの送信を防ぐことができます。

脚注



OpenVPNは、その柔軟性とセキュリティ機能により、多くの環境で利用されているVPNソリューションです。

関連項目



OpenSSH - ネットワーク層/データリンク層のトンネルベースのVPNを実装している。
stunnel - SSL上の任意のTCPコネクションの暗号化を行う。
UDPホールパンチング - ファイアウォールやNATを経由してUDP「コネクション」を確立する技法。

外部リンク



OpenVPN project 公式サイト(英語)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。