IPSecが繋がらないときのチェックリスト

IPSecは苦手です。そうはいっても逃げてばかりもいられないので、頑張ってトラブルシューティングして繋がるようにしていきます。

トラブルシューティングに入る前に、基本的な情報をチェックリストに整理すると解決が早いことが多いです。本稿のお題は、そのテンプレ！

#トラブルシューティング前チェックリスト

1. __IKEv1かIKEv2か？__
<input type=radio name=ikev> IKEv1 　 <input type=radio name=ikev> IKEv2 　 <input type=radio name=ikev> その他 <input type=text>

2. __IKEv1の場合、MainモードかAggressiveモードか？__
<input type=radio name=mode> Mainモード  　 <input type=radio name=mode> Aggressiveモード
 - IKEv2には、この二択はありません。
 - ここで「Quickモードです」と回答しないように！Quickモードはフェーズ2の話であって、ここには出てきません。

3. __クライアント・サーバ間の認証方式は？__
<input type=radio name=auth> 事前共有鍵 (PSK) 　 <input type=radio name=auth> X.509証明書 　 <input type=radio name=auth> その他 <input type=text>
 - PSKの中身は秘密なので、心の中で唱えて下さい。

4. __クライアントのIPアドレスは？__
<input type=radio name=cli_addr> 動的 　 <input type=radio name=cli_addr> 固定 <input type=text>

5. __サーバのIPアドレスは？__
<input type=radio name=svr_addr> 動的 　 <input type=radio name=svr_addr> 固定 <input type=text>

6. __XAUTHを使っているか？__
<input type=radio name=xauth> 使っていない 　 <input type=radio name=xauth> 使っている：ユーザID <input type=text>
 - ユーザIDに対応するパスワードは、心の中で唱えて下さい。

7. __ESPかAHか？__
<input type=radio name=ah_esp> ESP 　 <input type=radio name=ah_esp> AH
 - AHは、暗号化せずにメッセージ認証（偽造、改ざんを見破る）だけを行うモードです。AHを使うことは少なく、ほとんどの場合はESPです。

8. __カプセル化はトランスポートモードかトンネルモードか？__
<input type=radio name=encap> トランスポートモード 　 <input type=radio name=encap> トンネルモード
 - L2TPやGREを併用している場合は、トランスポートモードが普通です。

9. __NATトラバーサルか？__
<input type=radio name=nat> NATトラバーサルである 　 <input type=radio name=nat> NATトラバーサルではない
 - クライアントの属するLANがNATルータで外と繋がっている場合、サーバがNAT機能つきファイアーウォールの奥にある場合など、いろいろなパターンがありますが、とにかくクライアントとサーバの間にNATがあれば「NATトラバーサル」のほうを選択します。

10. __何かトンネルプロトコルを併用しているか？__
<input type=radio name=overload> L2TP 　 <input type=radio name=overload> GRE 　 <input type=radio name=overload> その他 <input type=text> 　 <input type=radio name=overload> 特にない

以上！

いやー、めんどくさいですね。このフォームを全部埋めないとトラブルシューティング作業に入れないのかと言うと、私の経験上、はい、まず入れません。むしろ、この区分では大まか過ぎるかも知れません。それがIPSecです。

#技術者を逆なでする数々の仕様
- PSKを使うケースが多いかと思いますが、家庭用Wi-FiルータのPSKみたいに全体で一つのキー値を共有する形なら比較的シンプルに管理できます。しかし、クライアントごとに個別のPSKを割り当てようとすると、複雑さが一気に増大します。
- WindowsのIPSecにはAggressiveモードがありません（参考：[How IPSec Works](https://technet.microsoft.com/en-us/library/cc759130(v=ws.10).aspx) / [Google翻訳](https://translate.google.com/translate?sl=en&tl=ja&u=https%3A%2F%2Ftechnet.microsoft.com%2Fen-us%2Flibrary%2Fcc759130(v%3Dws.10).aspx)）。
- WindowsでIPSec NATトラバーサルを使う場合、レジストリを手動で書き換える必要があります（参考：Windows Vista および Windows Server 2008 で NAT-T デバイスの背後に L2TP/IPsec サーバーを構成する方法（ [原文](https://support.microsoft.com/en-us/kb/926179) / [Microsoft翻訳](https://support.microsoft.com/ja-jp/kb/926179) ））。
- 上記以外にも、OSごとに一部の機能がなかったりバグが多かったりということはよくあります。[IPsec 認証方式の各 OS の対応状況](https://qiita.com/hoto17296/items/4c8f1cce60bb476e4e15)が参考になります。

本稿はここまで！これはあくまで事前準備で、ここから先がトラブルシューティングの本題なのですが、IPSecのトラブルシューティングは、非常に広範囲で複雑な話になっていくので、一本の記事では書ききれません。気が向いたら別記事を書きます。。。

#参考文献

Internet Key Exchange (IKE) Attributes
http://www.iana.org/assignments/ipsec-registry/ipsec-registry.xhtml

Internet Key Exchange Version 2 (IKEv2) Parameters
http://www.iana.org/assignments/ikev2-parameters/ikev2-parameters.xhtml

"Magic Numbers" for ISAKMP Protocol
http://www.iana.org/assignments/isakmp-registry/isakmp-registry.xhtml

Cryptographic Suites for IKEv1, IKEv2, and IPsec
http://www.iana.org/assignments/crypto-suites/crypto-suites.xhtml

S. Frankel, et. al (2011)
IP Security (IPsec) and Internet Key Exchange (IKE) Document Roadmap
https://tools.ietf.org/html/rfc6071 ([Google翻訳](https://rfcs.web.fc2.com/rfc6071.html))