こんにちは、お昼のcloudpack空腹部 津村です。
お昼前で飢えてます。がるるるる。

クライアントVPNの救世主になるか?『クラスレス静的ルート』

拠点間VPNのイメージ図

従来、拠点間VPNでは一般的にLayer3の暗号化トンネリングプロトコルが使用され、CenterRouterとEdgeRouterがルーティングとインターネットへのリーチャビリティはよしなに処理してくれていました。
※ここではインターネットのトラフィックをどう扱うかは、一旦置いておきます。
※L2TP/IPSec、GRE/IPSecやEtherIPについても、一旦おいておきます。

クライアントVPNの場合のイメージ図

一方で、クライアントVPN(端末が直接VPNプロトコルを喋る)の場合、クライアントPCはCenterRouterへのリーチャビリティを常に確保しつづける必要があります。
この為、インターネットVPNでは、クライアントソフトウェア、もしくはOSのVPN実装がよしなに処理をしてくれています。

しかし、最近ではL2TPやSSTPといったL2VPNプロトコルが、NATの問題もクリアできる事から一般的に使用されるようになりました。
この場合、アドレスやルートの配布はVPNプロトコルの実装ではなく、サーバ・クライアント共にDHCPに頼ることとなります。

そこで、DHCPの仕様を拡張し、IPアドレスをアサインする際に静的ルートテーブルも同時に配布する仕組みが、『クラスレス静的ルート』(RFC3442)です。
RFC 3442 – The Classless Static Route Option for Dynamic Host Configuration Protocol (DHCP) version 4

SoftEtherVPNのクラスレス静的ルートの実装を確認する

RFC3442を実装した和製のソフトウェアとして、SoftEtherVPNがあります。
こちらの構築については、以下のエントリを参照してください。
OSSとAWSで出来る、セキュア接続なプライベート環境 | cloudpack.media

また、クライアントとしては、Windows Vista以降、MacOSX(10.9で確認)、iOS(iOS8. iOS7で確認)などが実装されています。
※Androidについては確認中

SoftEtherの仮想DHCPサーバにて実装されている為、仮想HUBの管理画面からSecureNATの設定を開いていきます。

SoftEtherのSecureNATの設定を開く

ポイントとしては、以下の2点です。

  1. 配布するゲートウェイ(ここでは192.168.30.1)を覚えておく。
  2. デフォルトゲートウェイを空欄にする

SoftEtherのSecureNATの設定(ゲートウェイを空欄に)

以下の画面でクラスレス静的ルートを設定します。
フォーマットは、「ネットワークアドレス/サブネットマスク/ゲートウェイ」で、カンマもしくはスペース区切りで複数登録可能です。

SoftEtherのSecureNATの設定(クラスレス静的ルートを設定)

最後に、各種プロトコルでリンクが確立され、DHCPでアドレスがアサインされると同時に、以下のように静的ルートが設定されます。

SoftEtherのSecureNATの設定の動作確認

応用編

この技術はクライアントVPNだけではなく、VDI環境やクラウド上のクライアントにも適用できます。
例えばVDIの場合でも、シンクライアント端末へのリーチャビリティを失う事はできない為、デフォルトルートを維持する必要があります。
同様に、例えばクラウド上のWindowsマシンでも同様の事が言えます。
また、同一セグメント内であれば複数のゲートウェイがあっても問題無い為、例えばクラウドとオンプレミスとクライアントVPN端末をつなぐ事も夢ではないのかもしれません。

おわりに

RFC3443は実験的な側面が強いせいか、まだあまり実装されたサーバがありません。
国産ではSoftEtherですが、その他ではdhcpdも対応しているようです。

また、いつも通りマイクロソフトさんが独自実装しているので、そろそろ何とかしてください…。(サーバに特定の実装をしないと動かない。)

dhcpdでルートを指定(jlug ml)
DHCPv4 Option Code 249 (0xF9) – Microsoft Classless Static Route Option(MSDN)

あ、今回AWS関係なかった…

元記事はこちらです。
クラスレス静的ルートの実装をSoftEtherで確認してみる