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はかけていません。
通常のIPSec と IPSec 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」をダウンロード