OpenVPNは、インターネット上で安全な通信を実現するためのオープンソースのVirtual Private Network(VPN)ソフトウェアです。開発はJames Yonan氏によって行われ、
GNU General Public Licenseの下で公開されています。
概要
OpenVPNは、事前に共有された秘密鍵、公開鍵証明書、またはユーザー名と
パスワードを用いて、ピアツーピアでの相互
認証を行います。
暗号化にはOpenSSLライブラリを利用し、SSLv3/TLSv1プロトコルをサポートしています。
Solaris、
Linux、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 公式サイト(英語)