VPN技術の比較

VPNを実現する方法はいろいろありますが、それなりに使われていそうなものを 挙げてみました。

IPSec
VPN技術のうち、たぶん最も普及しているのがIPSecでしょう。VPNルーターと いう形で、ハードウェア実装している製品も売られています。
IPSecの場合、TCP/IPに暗号プロトコルを追加する形になります。 TCP,UDP と 同じレベルでのサポートで、通常OSレベルでの実装となります。
IPv6環境はIPSec標準実装となっているので、IPv6環境ならIPSecで決まりといっ た感じです。しかし、IPv4環境では専用プロトコル(ESP,プロトコル番号 50番 / AH,51番)に対応していないNATやFirewallがあるため、NATの裏側から接 続する場合や、動的IPで接続したいといった場合は使いにくいかもしれま せ ん。
暗号方式はDES/3DES/AESが使われます。(規格上はBlowfishなども使えますが、 この3つ以外を実装しているものはほとんどありません)
PPTP
Microsoftが開発したもので、他のVPN技術がNetwork-Networkの接続をするの に対し、PPTPは主にHost-Networkの接続のためのものです。名前 (Point-to-Point Tunneling Protocol)が示すように、IPプロトコル上に暗号 化されたPPP通信を張る方式です。
このPPTPも、IPSec同様 に専用プロトコル(GRE,プロトコル番号47番)を使用す るため、対応していないNATなどが通信経路にあると通信できないこともあり ます。
Windows 98 / Windows 2000以降では標準実装になっているので、自宅の Windowsマシンから会社のPPTPサーバーに接続して使うといった場合は、サー バー側の用意だけで済むので使いやすいでしょう。
暗号方式は、RC4-40bitもしくはRC4-128bitです。
VTun
VTunは暗号化されたUDPパケットもしくはTCPを使って通信するもので、 TUN/TAPデバイスをサポートするUNIXシステム(具体的には、 Linux,*BSD,Solaris,MacOS X など)で動作します。
TCP/UDPを利用しているので、IPSecなどと比べてIPv4ネットワークで使いや すくなっています。TCPで通信を行えば、NATやプロキシを通しての通信を行 うこともできます。
暗号方式は、Blowfish-128bitを使い、認証にはCHAPを使います。おまけとし てlzo圧縮を行うこともできます。
特徴的な機能として、IPプロトコルのトンネルだけでなく、Ethernet Tunnel や、シリアル通信(tty)のエミュレーションも行うことができます。
OpenVPN
VTun同様に、TCPもしくはUDPを使うもので、TUN/TAPデバイスをサポートする UNIXシステムに加えて、Windows 2000/XPで動作します。(TUN/TAPデバイ スに ついては、VTunプロジェクトの成果を使っているようです)
UDPパケットやTCPを利用しているので、既存のIPv4ネットワークとの相性がよ く、さらに、VTunではサポートされない両端動的IPの場合でも通信できます。
暗号方式はOpenSSLがサポートする ものなら好きなものを使うことができます。デフォルトでは、Blowfishが使わ れます。また、認証方式として、RSA公開鍵による認証と事前共有鍵方式によ る認証を行うことができます。lzo圧縮とEthernet Tunnelingもできます。
CIPE
UDPパケットを使った暗号通信を行います。VTunやOpenVPNなどとは異なり、 Linuxのネットワークデバイスドライバとして実装されています。そのため、 移植性は良くなく、LinuxとWindows NT,Windows 2000のみのサポートとなりま す。
UDPを使っているVTunやOpenVPNと似たような特徴を持ち、動的IPサポートなど もあります。特徴的な機能として、SOCKSプロキシを通してのUDP通信を行うこ とができます。
暗号方式は、Blowfish-128bit、認証は事前共有鍵か、RSA公開鍵方式を使うこ とができます。
PPP over SSH
SSHのポートフォワードを使って、PPP通信を通すものです。標準的なSSHと PPPソフトウェアさえあれば通信できるため、お手軽です。ただし、TCPのトン ネルはあまり好ましくないため、ちゃんとしたVPN通信を行う場合は、IPSec やUDPベースのものを使う方が良いでしょう。
SSHで通信できれば良いので、NATやプロキシを介してのVPNを構築することが できます。
SoftEther
TCPもしくはHTTPプロトコル上にIPパケットを載せて通信します。そのため、 HTTPプロキシ経由でのVPN接続ができたりします。対応プラットフォームは、 現時点ではWindowsのみです。
IP over HTTPのアイディア自体は昔からあって、例えばRFC-3093として、 2001年エイプリルフールのジョークネタになっています。HTTPを使っているた めパケットが届いているかどうか定期的にポーリングする必要があり、大量の 無駄なトラフィックを生み出します。また、遅延をポーリング間隔以下にはで きないので、telnetやssh等のリモートシェル、IP電話、ゲームといった応答 性が要求されるアプリケーションを載せるのには向きません。あくまでジョー クネタで、実用に耐える物ではないでしょう。
HTTPを使わず、IP over TCPでの通信も可能ですが、下記のTCP over TCPにつ いてのような問題があるため、やはり薦められません。
ただ、インストールや設定の容易さは評価でき、VPNでどんなことができるの か試してみたい、という用途に限れば便利だと思います。

TCP over TCPについて

PPP over SSHでは、TCP通信(SSH)の上にさらにTCP通信(HTTPやPOP3)を通すこと になります。この方法は、問題なく通信できていれば良いのですが、パケットが 失われたり、タイムアウトした場合の再送信処理に問題があります。
TCP over TCPでは、キャリアー(SSH)のTCPと、アプリケーション層(HTTPとか POP3)のTCPが共に再送信を行うことになります。端的には、再送信パケットに よってさらなるキャリアー層の再送信が引き起こされるという悪循環に陥りま す。

詳しくは、 IPSec以外のVPNソリューションを選択する理由 Why TCP Over TCP Is A Bad Ideaにまとめられていますので、参照してください。

この問題のため、TCP over TCPは、特に品質の悪い回線では通信が不安定になり ます。まともにVPNを構築する場合は、PPP over SSHや、VTun / OpenVPNのTCPモー ドは避け、IPSecやUDPベースの物を用いた方が良いでしょう。

参考リンク

FreeS/WANによるIPSecの導入と運用
FreeS/Wanのインストールから設定についての記事。
Linux Advanced Routing & Traffic Control HOWTO
Chapter7. IPSEC: インターネット越しの安全なIPにUSAGIベースのIPSecの使い方 が書かれています。

ご意見、ご感想は、小本 真広 <webmaster@komoto.org>まで。メールする前にtop pageの注意書を読んでください。