トンネルはオフィスのネットワークでは動いていたのに自宅で止まり、ログには最初の交換が完了したところで何も起きていないことが示されています。このパターンは資格情報ではなく認証交換を指します。証明書チェーンはそのメッセージを前のものよりはるかに大きくし、大きなデータグラムを好まない経路はそれを静かに破棄します。関係するフラグメンテーションの仕組みは二つあり、どちらを見ているかを知ることが修正方法を決めます。

二つのフラグメンテーション機構、一つの症状

IKEv2には独自のフラグメンテーション拡張があり、RFC 7383で定義され、保護されたIKEメッセージをより小さなIKEメッセージに分割します。両ピアはその機能を交渉し、メッセージはIP層ではなくIKE実装によって再組み立てされます。

通常のIPフラグメンテーションは別の仕組みで、障害の現れ方も異なります。ピア間のルーターが大きなデータグラムを断片化するか、それを破棄して、送信者に届かないかもしれないICMPメッセージを返します。断片を黙って捨てるネットワークもあれば、最初の断片だけを処理して残りを処理しない中間装置もあります。アプリケーションから見れば、三つのケースは同じに見えます。

NATトラバーサルは三つ目の変数を加えます。ESPがUDPで包まれ、外側のパケットは大きくなりながら、ポート4500の通常のUDPトラフィックのように見えるからです。UDPを問題なく通す経路でも、もう収まらないデータグラムでは失敗します。

失敗した交換を読む

エラーではなく遷移を探します。最初の交換が送信され応答された後、何も続かないログは、次のメッセージが決して完了しなかったことを示しています。ログレベルを一時的に上げ、両ピアで報告されるサイズを比較します。

確かめたいのは、応答側が要求をそもそも見たかどうかです。開始側が何かを送ったのに応答側にその記録がなければ、問題は配信です。応答側が要求を解析して拒否したなら、問題は証明書そのものであり、フラグメンテーションは注意をそらすものです。この区別は、タイムアウトのメッセージを何ページも読むより価値があります。

証明書ではなく経路を変える

同じクライアント、同じ証明書、同じ設定を別のネットワークから試します。モバイルホットスポットが通常は最も安価な第二の経路であり、オフィスの回線とは名目上だけでなく本当に異なります。

第二の経路でハンドシェイクが完了すれば、証明書チェーンは正常で、第一の経路が変数です。両方で同じように失敗するなら、ネットワークの試験をやめてメッセージ自体を見てください。その一回の比較で、可能な説明のおよそ半分が消えます。

何かを編集する前に交換を測定する

チェーンのサイズと経路のサイズを取得します。どちらの数値もハンドシェイクが送れるものを制約し、どちらも安価に測れます:

openssl crl2pkcs7 -nocrl -certfile chain.pem | openssl pkcs7 -print_certs -noout | grep -c subject
ls -l chain.pem
ping -M do -s 1400 198.51.100.7
ip -s link show eth0 | sed -n '1,6p'

最初の二つで証明書の数とファイルサイズが分かり、認証メッセージがどれほど大きくなるかの妥当な目安になります。pingの検査はそのサイズのデータグラムが経路を通るかを報告し、インターフェースのカウンターは手元で断片が破棄されたかを示します。Windowsでは、同等の検査はdo-not-fragmentフラグと明示的なペイロードサイズを付けたpingです。

成功するまで検査を下方向に繰り返します。通過する最大サイズがその経路の実用的な予算であり、公開されている既定値より役に立ちます。

実際に壊れている層を直す

経路が大きなデータグラムを落とすなら、両ピアでIKEフラグメンテーションを有効にし、拡張が単に提案されたのではなく交渉されたことを確認します。経路がIP層で断片をうまく扱えないなら、修正はそこか外側インターフェースのMTUに属し、証明書ストアではありません。

チェーンが不必要に長いなら、ピアが実際に必要とする中間証明書まで切り詰めます。クライアントがすでに信頼しているルートを外すのは妥当な整理ですが、中間証明書を外すのはそうではなく、メッセージを小さくするために検証を無効にすると、配信の問題をセキュリティの問題と引き換えにします。

どの仕組みを変えたのか、その後ハンドシェイクがどう見えたのかを書き留めます。次の発生は通常、同じ症状の別のネットワークで起こり、そのメモが二時間を十分に変えます。

関連記事