IKE-SAは確立済み、CHILD-SAが無い:データはどこで止まるか
IKE-SAが確立していてもデータが流れているとは限りません。CHILDのエントリを読み、セレクタとカウンタを確認し、実際に失敗した層を特定してください。
クライアントは認証に成功したと言い、IKEの状態は健全に見え、パケットカウンタはゼロのままです。この組み合わせは矛盾ではありません。IKEv2は制御の関係とデータの関係を分けて保つので、前者が成功しても後者が立ち上がらないことがあります。親はネゴシエーションを担い、子はトラフィックを担うため、トンネルが落ちたと判断する前に二つの層を別々に読んでください。
二つのSAが担うもの
IKE-SAは制御の関係であり、ピアを認証し、保護を交渉・交換・削除するやり取りを運びます。アプリケーションのパケットを運ぶことは決してありません。したがって健全な親が証明するのは、両端がセキュリティポリシーで合意できるという一点だけです。
CHILD-SAはデータの関係で、親の下に作られ、一つの保護された集合のためのトラフィックセレクタと鍵素材を持ちます。方向を持つため、状態出力には内向きと外向きの関連が別々の識別子で並び、通常は方向ごとに別のカウンタも示されます。この対になることが、一方の方向だけが動いて他方が落ちる理由であり、トンネルは上がっているという言葉がトラフィックについて何も語らない理由です。一つの親が複数の子を持つこともあり、そのため一つの接続ラベルが必要な子を覆い隠します。
子のエントリを読み、接続ラベルを読まない
親の状態と子の一覧を同時に開き、セレクタが検証中のフローと一致する子を探します。その子のトラフィックセレクタ、合意されたアルゴリズム、寿命、両方向のカウンタを記録します。子が複数ある場合は、位置は鍵更新の後に変わるため、位置ではなくセレクタで照合してください。何かを変える前に識別子を書き留めます。
親が検証中の集合と異なるトラフィック集合を示しているなら、読んでいるのは別の子です。これはセレクタの問題で、壊れたトンネルではありません。
タイムスタンプも記録します。鍵更新は一方の層を置き換えつつ他方を確立したままにすることがあり、新しく見える子が監視していた子の後継である場合もあります。子が消えたと結論する前に識別子を比較してください。
子が存在しないとき
認証が成功してもデータの提案やセレクタが失敗すれば、親は子を一つも持たないままになります。よくある原因はアルゴリズムの不一致かトラフィックセレクタの不一致で、どちらのピアも拒否された提案を記録します。到達できる側だけが拒否を表示している場合があるため、両端を読んでください。親を再起動すると同じ失敗した交渉を繰り返し証拠に停止時間を加えるだけなので、不一致を直してください。
繰り返し確立し直す親は、子を持たずにいる親とは別の障害です。後者ではログが拒否された提案を名指しするので、ポリシーを編集する前にその提案を両端から集めてください。
子はあるがカウンタがゼロのままのとき
子のセレクタに一致する新しい要求を送ります。そのポリシーの外にある宛先への要求は、どれほど成功して見えてもカウンタを動かしません。
トラフィックの無い子は何もルーティングされていない子であることが多いため、フローをトンネルへ押し込むはずの経路を確認してください。一方向にしか動かないカウンタは、戻り経路でのセレクタかポリシーの不一致を示します。ローカル側に触れる前に、遠隔ピアの戻りセレクタを見てください。新しい要求は、両端の状態出力と突き合わせるタイムスタンプも与えてくれます。
報告で層を名指しする
障害は判定ではなく、失敗した層、確認したやり取りまたは子、そして手元の証拠という三つの項目として報告します。層は三つのうちの一つで、親が一度も確立しなかった、子の交渉が拒否された、子は存在するがトラフィックが届いていない、のいずれかです。証拠はセレクタとカウンタを添えた子の識別子、または両方のログから引用した拒否された提案です。これを読んだ人は、どのVPNのことかと尋ねる代わりに、重要なやり取りへ直接進めます。
IKEv2に関するstrongSwanのドキュメントは、こうした層が状態出力にどう現れるかを示しています。検証した子の出力を添付し、親の要約だけにしないでください。