最近、VPN接続環境で、「接続出来ない」や「接続出来るけど1台しか繋がらない」など、トラブルにあう事が多々ありました。
不具合の原因の中に、「NATトラバーサルが有効化されていない為で、有効化したら繋がった」というケースがあった事から・・
今更ながら、私自身の「NATトラバーサル」への理解が浅い事に気付きました。
勉強を兼ねて、仕組みについて、私なりに調べてた内容を公開します。
技術的な理解が拙い部分もあるかと思います。ご理解いただけると幸いです。
NATトラバーサルとは
NATトラバーサルについて記載する前に、「NAT」について書きたいと思います
NATとは
NAT(Network Address Translation:ネットワークアドレス変換)とは、IPアドレスを変換する技術で、具体的には「プライベートIPアドレス」を「グローバルIPアドレス」に変換します。
このNAT機能は、ブロードバンドルーターなどに搭載されていて、このNATの技術のお陰で、自宅LAN上のパソコンやスマホから、インターネット上のサーバー(例えばYouTube)などにアクセス出来るようになります。
ただし、NAT機能だけでは問題があります。
NATの問題
NAT機能の何が問題かというと・・。NATの変換は1対1です
プライベートIPアドレス1個に対して、グローバルIPアドレス1個が必要になります
これだと、全ての端末分のグローバルIPアドレスが必要になってしまいます
とてもではないですが、このIPv4グローバルアドレスが枯渇の中、実用は不可能
この問題点を解決し、現在使われているアドレス変換の仕組みは「NAPT」です
NAPTとは
「NAPT」(Network Address Port Translation)とは、NATの問題点を解消したネットワークアドレス変換技術!
別名 「PAT」(Port Address Translation)や 「IPマスカレード」と呼ばれています。
現場では、「IPマスカレード」が一番使われているように感じます!
NATの問題を解消したNAPTでは、プライベートIPアドレスとグローバルIPアドレスの1対1の変換に加え、ポート番号も変換して、プライベートIPアドレスとグローバルIPアドレスを多対1に変換することを実現しています。
その為、1つのグローバルアドレスで複数台(~何十何百)接続することが可能。
それにより、グローバルIPアドレスの節約となって、延命に大いに役立っています。
ここで、話の最初に戻り「NATトラバーサル」について。
NATトラバーサルが作られた経緯
では、本題に入ります。
なぜ、NATトラバーサルが必要になったか?ですが、
理由としは、NATを越えて動作させる事が難しいアプリケーション(代表的なものはIPsec)を、NAT環境でも使えるようにする為です。
なぜ「IPsec」はNATを超える事が難しいのか
VPN通信の暗号化に使用される「IPsec」は、なぜNAT越えが難しいか?ですが、
IPsecで利用される通信モードには「トンネルモード」と「トランスポートモード」がありますが、実利用されるのは「トンネルモード」がほとんどです。
IPsecの「トンネルモード」では、IPヘッダまでESPプロトコルで暗号化されてしまいます。
その為、NATトラバーサルの仕組みが必要となります。
NATトラバーサルの動作を確認
NATトラバーサルとは、NATトラバーサル用に新しくUDPヘッダ(UDP4500)を追加して、NAPT機器のポート番号の書き換えを可能にする機能です。
具体的に動作を確認してみたいと思いますので、以下のような環境を作ってみました。
- 遠隔拠点PCから、本社ルーターへVPN接続
- VPN接続方式は「L2TP over IPsec」
- 遠隔拠点のPCは、NATルーター配下
NATトラバーサルを無効
まずは、L2TPサーバーの役割を担う、FWX120のVPN設定で、NATトラバーサル設定を無効にして、動作確認します。
本来は、遠隔拠点WindowsPC側では、NATトラバーサルが無効にすれば良いのですが、これがうまくできない!!
若干、動作の狙いと変わってしまいますが、すみません。強引にNATトラバーサルをさせない為、以下のUDP4500番のフォワード設定を削除しました。
nat descriptor masquerade static 1 3 192.168.100.1 udp 4500
遠隔拠点のPCからVPN接続を行うと、接続が失敗します。
WireSharkをとってみてみると、暗号化通信を行う前の鍵交換プロトコルでうまくいっていないようです。
IKEフェーズ1が繰り返されているようです(おそらく)。
IKEフェーズ1がうまくいかない理由ですが、推測した限りでは・・
IKE(ISAKMP)では、送信元、送信先とも、UDP500番が使用され、UDP500番は固定して使用され、違う番号に変換する事はできません。
その為、送信元ポート変換を伴う、NAPTを超える事が出来ないと思われます!
NATトラバーサルを有効
次に、NATトラバーサルを有効にします。
すると、L2TP VPNは、すんなりと繋がりました。
キャプチャデータを見てみます。赤枠:鍵交換(IKE)、青枠:暗号化通信
先ほど、UDP500番が使用されていたIKE(ISAKMP)も、UDP4500番が使用され、カプセル化されている事がわかります。
UDP4500番であれば、ルーターでポート変換されてもOKです。
ルーター同士のVPNでない限り、グローバルIPアドレスを直接付与される事はなく、
その為、VPN接続を行う場合は、ほぼNATトラバーサルが必要と考えた方が良いと思います。
また、VPN接続と書いておりますが、NATトラバーサルが必要なのは、「IPsec」です。
セキュリティの仕組みの無いインターネットを介したVPNでは、必ず暗号化の仕組みが必須です。使用される暗号化方式は「IPsec」が用いられるますので、NATトラバーサルの仕組みは必須ですね!
コメント