NATトラバーサルとIX2025

久しぶりに技術的な話題です。

今回は、IX2025を2台使った "NATトラバーサル" の試験。
※ NATトラバーサルの解説はこちら(WikiPedia、ITPro)。

試験の環境として、IPSec-VPNで接続されている状況を想定しています。
ゴールとしては、そのIPSec-VPN部分を通るIPパケットにポート番号(UDP 4500番)を付与することです。

なぜポート番号を付与しなくてはいけないのか・・・詳細を説明するのは面倒なので、"ヒントは NGN" としておきます。

試験の構成は下のとおり。
今回は私の家でもブロードバンドルータとして活躍している「IX2000シリーズ」 を使います。


       [Client側IX2025]
Client-LAN -> [FE1/0.0 -> Tun1.0 -> FE0/0.0] -> WAN ->
[FE0/0.0 -> Tun1.0 -> FE1/0.0] -> Server-LAN
[Server側IX2025]

* 上図で矢印が片方向ですが、実際の通信は双方向です。


ネットワークアドレスは、それぞれのLAN内でDHCPにて配布しています。
 Client LAN: 192.168.141.0/24
 Server LAN: 192.168.140.0/24
この構成でNATトラバーサルをかけるには一工夫が必要となります。

通常、NATとIPSecの処理の順番は
 NATをかける -> IPSecでパケットをカプセル化
となります。
この場合、NATの存在がIPSecネゴシエーションからは見えません。よって、通常のIPSecとして動作し、NATトラバーサル(UDPヘッダ付与)の処理がなされない。これが、このルータのデフォルト動作のようです。
IPSecネゴシエーションでNATが発見されたときのみNATトラバーサルが動作する(ルータの仕様)。

そこで、処理の順番を変更させるために次のコマンドを打ち込みます。

interface Tunnel1.0 ipsec source-address map001 FastEthernet1/0.0

このコマンドを投入することによって、パケットをカプセル化したあとのソースIPアドレスがClientLANのインターフェイス(Fe1/0.0)と同じになります。

こうすることで、
 IPSecでパケットをカプセル化 → NATをかける
という順序でパケットが処理され、無事に NATトラバーサル の機能が動くわけです。
※ 精確にいうとikeプロポーザルのPhase2で云々・・・です。

Client側から見たときのトンネルの始点、終点は以下のとおり。
 始点:Client側IX2025 192.168.141.254
     ※ NAT変換後は 192.168.121.65
 終点:Server側IX2025 192.168.126.61

Server側はFe0/0.0のアドレスをIPSecの終点アドレスとし、NATはかけていません。
通常のIPSecIPSec w/ NATトラバーサルのパケットの違いは次のとおり。

■ 通常のIPSec
IPヘッダ
ESPヘッダ
暗号データ
(IPv4)
(TCP)
(データ)
(ESPトレーラ)
ESP認証データ

IPSec w/ NATトラバーサル
IPヘッダ UDPヘッダ(ポート番号4500) Non-IKEマーカ
ESPヘッダ
暗号データ
(IPv4)
(TCP)
(データ)
(ESPトレーラ)
ESP認証データ

暗号データ の中身はUDPでもTCPでもどちらでもOKです。 IX2025の設定ファイル(Client側、Server側)も重要な部分だけ抜粋して公開しておきます。
「IX2025-Client.txt」をダウンロード
「IX2025-Server.txt」をダウンロード