拠点間インターネットVPN(IPsec)を使って、NATをかました通信を行う事を考えています。その為の考え方や仕様について、簡単に整理してみました。初歩的なところからになり、かつ、技術的な詳細までには踏み込んでいませんが、以下に記載しておきます。
VPNの種類
まず、VPNとは、Virtual Private Network の略で、仮想的にプライベートネットワークを繋げる技術です。
VPNの種類を大きく分けると インターネットVPN と IP-VPN の2種類があります。
インターネットVPNの種類を大きく分けると、IPsec-VPN と SSL-VPN の2種類があります。
IPsec-VPN の種類を大きく分けると、拠点間VPNと、リモートアクセスVPN の2種類があります。
今回は太字部分の、拠点間インターネットVPN(IPsec)について、もう少し掘り下げて整理したいと考えています。
ちょっと補足(トンネリングと暗号化について)
ちなみに、VPNはトンネリングと暗号化で実現します。トンネリング部分と暗号化部分は、以下のプロトコルが使えます。
- トンネリング(一例)
- IPsec
- PPTP
- L2TP
- GER
- 暗号化(一例)
- IPsec
よって、IPsecを使うと、IPsecの実装だけで、トンネリングと暗号化を実現する事が出来ます。
IPsec でトンネリングと暗号化を行う場合のプロトコル体系
IPsec でトンネリングと暗号化を行う場合、以下のプロトコルを用います。
- トンネリング「IKE」
- Internet Key Exchange の略で、インターネット鍵交換プロトコルである。
- 鍵の生成と交換、鍵の定期自動更新を行う。
- UDP500ポートを利用。
- SA(Security Assosiation)と呼ばれるセッションを制御し、VPN装置間でコネクションを確立し、トンネルを実現する。コネクション自体は単方向のコネクションとなる為、VPN間で送受信を行う為には、SAは2本必要になる。
- IKEでは、計2フェーズの処理がある。
- フェーズ1は「ISAKMP SAの確立」である。フェーズ2の通信で必要になる共有秘密鍵の生成が行われる。モードは「メインモード」と「アグレッシブモード」がある。メインモードではVPN装置間で固定IPアドレスが必要になるが、アグレッシブモードよりもセキュリティの高いネゴシエーション方法となると言われている。
- フェーズ2は「IPsec SAの確立」である。IPsec通信で使用する秘密鍵を生成が行われる。フェーズ1で確立された「ISAKMP SA 」内で、IPsec SAを確立する
- 暗号化「ESP」
- Encapsulationed Security Payload の略で、IPsecでパケットを認証し、暗号化を行う為のプロトコルである。
- IKEのフェーズ2で作成したSA内で、暗号化したパケットの通信を行う。
- IPプロトコル50 を利用。
ちなみに、「AH(Authentication Header)」というIPsecでパケットを認証するプロトコルもある。ただし、AHでは暗号化は行わない。ESPで認証機能がある為、現時点でIPsec-VPNを実装する場合は、IKEとESPでの実装が多いようである。(現在ではAHはあまり使われていないようである。)
暗号化アルゴリズムと認証アルゴリズム
ESPで暗号化を行う場合、暗号化アルゴリズムと認証アルゴリズム(暗号化アルゴリズムを用いて、対象データのハッシュ値を求めるためのアルゴリズム)は以下がある。
- 暗号化アルゴリズム
- DES
- 3DES(DESより強固)
- AES(DES、3DESより強固、かつ処理が早い)
- 認証アルゴリズム
- MD5
- SHA-1(MD5より強固)
- HMAC(MD5、SHA-1より強固)
IPsecの通信モード
IPsecの通信モードには以下の2種類がある。
- トランスポートモード
- エンドツーエンドのVPN端末でVPN接続する場合に利用する。
- 元のIPヘッダをそのまま使い、パケットのカプセル化は行わない。
- トンネルモード
- VPNゲートウェイとなるVPN機器を介して、拠点間VPN接続を行う場合に利用する。よって、VPN接続を利用するPC側は、IPsecを意識する必要はない。
- プライベートIPアドレスのパケットにグローバルIPアドレスのヘッダを付与し、パケットのカプセル化を行う。
NATの利用について
本来、VPNとNATとの相性は良くない。
NATはアドレス変換時にヘッダ内の値を変更するが、VPN側で暗号化されたヘッダにアクセスできなくなり、データの整合性が取れなくなる現象が出る為らしい。
ただし、VPN側は IPsec ESPでのトンネルモードで、NAT側は静的NAT(IPマスカレードではなく)であれば、問題はないらしい。その場合も、IPsec NAT-T(UDP4500ポート)を使う必要がある。
「NAT-T」とは、NAT Traversal in the IKE の事である。
よって、NATを通過して IPsecが正常に機能する為には、総括すると、以下のプロトコルをファイアウォールで許可する必要がある。
- IKE(UDP 500ポート)
- ESP(IPプロトコル 50)
- IPsec NAT-T(UDP 4500ポート)
※ ESP の記載を一部修正しました。