OpenVPN

OpenVPNは、サーバ間に暗号化されたトンネルを作成するためのオープンソースのVirtual Private Network（VPN）ソフトウェアである。James Yonanが開発し、GNU General Public Licenseでリリースされている。

 概要 
OpenVPNは、事前に共有しておいた秘密鍵、公開鍵証明書、ユーザ名/パスワードを使ってPeer to Peerの相互の認証を行う。OpenSSLやSSLv3/TLSv1プロトコルを利用する。Solaris、Linux、OpenBSD、FreeBSD、NetBSD、macOS、Windowsなどで動作する。様々なセキュリティ機能や制御機能を持つ。他のVPNシステムとの接続には対応しない。クライアント側もサーバ側も1個のバイナリとオプションの設定ファイルから構成され、使用する認証方式によって、いくつかの鍵ファイルが必要となる。

 暗号 
OpenVPNはOpenSSLライブラリを使って、データチャンネルと制御チャンネルの両方の暗号化を行う。暗号化と認証処理はOpenSSLに任されており、OpenSSLパッケージに含まれる任意の暗号方式を使うことができる。HMACパケット認証機能を付加的に使用して、コネクション時のセキュリティを強化することもできる（開発者はこれをHMAC Firewallと称している）。さらに、暗号化をハードウェアによって行い、性能を強化することもできる。

 認証 
相互の認証は、いくつかの方法がある。OpenVPNが推奨している方法は、事前共有した秘密鍵、公開鍵証明書、ユーザ名/パスワードを使った認証である。事前共有した秘密鍵が最も簡単であり、公開鍵証明書が最も頑健で機能が豊富である。ユーザ名/パスワードを使った方法は新しい機能（バージョン 2.0）であり、クライアント側の認証を不要とすることもできる（サーバ側は必須）。ソースのtarballには、Perlスクリプトによるユーザ名/パスワード検証（PAM）とC言語によるPAMの例が含まれている。

 ネットワーク 
OpenVPNは全ての通信を1つのIPポートに多重化する。UDP（デフォルト、推奨）でもTCPでも利用可能である。ほとんどのプロキシサーバを経由しても大丈夫で、ネットワークアドレス変換経由でもファイアウォール経由でも通信可能である。サーバ側からクライアント側に特定のネットワーク設定を送信することもできる（IPアドレス、ルーティングコマンド、その他コネクションオプション）。OpenVPNは、TUN/TAPドライバ経由のネットワーキング方法を2種類提供する。ネットワーク層でのIPトンネルまたはデータリンク層でのイーサネットTAPのどちらかを使うことができ、後者では任意の種類のイーサネットのトラフィックをやりとりできる。また、オプションでLZOデータ圧縮ライブラリで転送データを圧縮することもできる。IANAは、ポート 1194を公式にOpenVPNに割り当てている。新しいバージョンではデフォルトでそのポートを使用するようになっている。バージョン 2.0では、1つのプロセスで複数のトンネルを同時に管理できる。従来は、トンネルごとにプロセスが必要だった。

 セキュリティ 
OpenVPNはいくつかのセキュリティ機能も内蔵している。完全にユーザ空間で動作するため、カーネルでのIPスタック操作が不要である。OpenVPNは、root特権の禁止機能、mlockallによる重要データのスワップアウト禁止機能、初期化後にchrootによってルートとされたディレクトリ以外にアクセスできなくする機能などがある。

OpenVPNは、PKCSベースの暗号トークンによるICカードサポートも行う。

VPN認証のために送受信するパケットに対して、オプションとして予めサーバとクライアントの間で別途共有した鍵を用いて計算したHMAC値を追加することができる。この機能を用いると、VPN認証用HMACの鍵を知らない第三者は正しいHMAC値が計算できず、そのようなパケットは受信すると破棄するためVPN認証処理が開始されなくなる。

 脚注 

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

 外部リンク 

 OpenVPN project 公式サイト

Category:セキュリティソフト
Category:オープンソースソフトウェア
Category:UNIXのソフトウェア
Category:コンピュータ・ネットワーク・セキュリティ
Category:VPN
Category:トンネリング
Category:Cでプログラムされた自由ソフトウェア