VPN の NAT トラバーサル (UDP ホールパンチング) 機能

SoftEther が話題になった理由は、「社内のパソコンを VPN クライアントにして、社外の VPN サーバーに HTTPS プロトコルに乗せた VPN 通信が簡単に可能である」という特徴によるものでした。これは確かに画期的なことでした。


しかし、SoftEther によって、たとえば「自宅に立ち上げた VPN サーバー」に「社内の VPN クライアント」から接続することは簡単にできても、その逆は簡単にはできませんでした。つまり、「自宅の VPN クライアント」から「社内の VPN サーバー」に接続するためには、以下のような少し難しい設定が必要でした。


SoftEther 1.0 やこれまでの PacketiX VPN では、社員が社内 LAN などのプライベートネットワークに VPN サーバーを立ち上げたいと思った場合、インターネットとの間に NAT やファイアウォールがある場合 (ほとんどの場合) はインターネット側からのアクセスがあったときに TCP ポートを転送する設定 (ポートフォワーディング、ポート転送、DMZ などと呼ばれます) を行う必要があったと思います。PacketiX VPN だけではなく、他社の VPN (MicrosoftCisco のもの、OpenVPN などほぼすべて) を利用する場合もそのようになっていました。
しかし、ポート転送を行うためには NAT となっているルータの設定画面にログインして難しい設定を行う必要があります。初心者にとってルータの設定画面は大変危険です。VPN のためのポートを開放しようとする操作を誤って、他のポート (135 番など) も開放してしまうかも知れません。そうするとインターネット上からワームのパケットが飛んできて、危険極まりない状態になります。


そこで、PacketiX VPN 4.0 では、『NAT トラバーサル (UDP ホールパンチング) 機能』を実装しました。これにより、たとえ社内のプライベート LAN 上に VPN Server を立ち上げる場合であっても、NAT やファイアウォールの設定を一切変更 (穴開け) することなく、社外の VPN Client から社内の VPN Server にとても簡単にアクセスできます。実際に こちらからダウンロード してやってみてください。これまでルータの設定画面と格闘しなければならなかったのが、今回のバージョンで本当に全く何もしなくても VPN がつながることに驚かれると思います。


この NAT トラバーサル機能を図に説明すると、以下のようになります。



左が従来の手法、右が今回新たに実装された手法です。従来は VPNTCP (HTTPS) に乗っていましたので、ルータ側で少なくとも TCP ポートを 1 個開けてやる必要がありました。そして、そのポートをプライベート LAN 上の VPN Server が動作しているパソコンにフォワードする必要がありました。
いっぽう、新しい手法では「Reliable UDP」(内部名称) という UDP トンネルプロトコルが実装されています。このトンネルプロトコルUDP パケットで構成されますが、実際にはその中に TCP と類似したストリームが流れるようになっています。TCP と同様に確認応答やシーケンス番号などの仕組みもあり、パケットロスが発生した場合でもストリームがおかしくなることはありません。このストリームの中に SSL (TLS v1) を流してします。ユーザー認証や暗号化などに必要なセキュリティ通信の確立は SSL に任せてあります。つまり、この部分は SSL over UDP のようなものです。
トンネリングプロトコルTCP から UDP に変更すると、「UDP ホールパンチング」または「NAT トラバーサル」というテクニックを使って、外側からファイアウォールの内側との間で UDP チャネルを確立することができます。この手法は TCP でも本当はできるのですが、OS のプロトコルスタックをいじる必要があり、実装が困難でした。UDP であれば通常のソケット API を駆使することで実現ができました。Reliable UDPUDP ホールパンチングを用いていったん社内の目的となる VPN サーバーに到達させれば、それ以降は UDP セッションが NAT やファイアウォール上のメモリ上でエントリとして維持され、安定した VPN 通信が可能となります。


VPN が確立されるまでの間は SSL over UDP を用いますが、いったん VPN が構築された後は、VPNペイロードパケットを流す場合は確認応答は不要ですので省略しています。この場合は SSL で交換した鍵を用いて IPsec の ESP と同様に各パケットのデータグラムを暗号化、署名して伝送します。パケットの確認応答が不要な分、実は今回の新しい over UDP のほうが、単にファイアウォールを通過だけるだけでなく、従来の over TCP よりもスループットが出やすいという特徴があります。


この「UDP ホールパンチング」により、社員が会社内のパソコンに VPN Server をインストールすれば、単にそれだけで、後は自宅や出張先などから VPN 接続をすることができます。SoftEther 1.0, PacketiX VPN 2.0・3.0 で不可能であった「NAT やファイアウォールの設定を変更せずに、LAN 内に VPN サーバーを置いて公開する」ということが 4.0 でようやく実現したのです。