クライアントは接続済みと言い、ブラウザーは回り続け、どのサイトもタイムアウトで終わる。この組み合わせはよくあり、矛盾ではない。接続済みはトンネルが交渉したというだけで、それ以上ではない。名前解決、経路、サーバー自身の出口はそれぞれ違う形で失敗し、それぞれ担当が違う。層を順に見て、最初に失敗した層で止める。

まず接続元のネットワークから始める

クライアント自身の切断操作でトンネルを落とし、ポリシーが許せば無関係なHTTPSサイトを二つ試す。その間、機密作業は閉じておく。通常のアクセスも失敗するなら、VPNが第一容疑者ではない。

トンネルに触る前に、Wi-Fiリンク、ルーター、サインインを求めるポータル画面を見る。キルスイッチは設計上、切断中に通信を止めることがあるので、ネットワークが死んだと結論づけるのではなく、文書化された試験手順に従う。別の信頼できるネットワークは有用な比較になり、新しいVPN出口は期限切れのホテルのログインを完了しない。開いたネットワークが動きトンネルが動かないなら、ネットワークは無実で、次の層が自分の担当だ。

失敗が名前解決かどうかを決める

エラー文を書き留める。解決失敗、タイムアウト、証明書警告はそれぞれ別の場所を指す。早く捕まえるべきパターンは、一度も訪れたことのないホスト名が失敗する一方、セッションの開いたアプリは動き続けることだ。このパターンは新しい問い合わせの話で、トンネルがパケットを運んでいるかどうかではない。一回の問い合わせでリゾルバーが何を返すか分かり、実行は一秒で済む。二つ目の名前も試し、キャッシュされた応答や壊れたレコード一つで診断が決まらないようにする。

nslookup example.com

HTTPSのアドレスバーに任意のIPを入れてもDNS試験にはならない。証明書と仮想ホストは通常名前に依存するからだ。内部名は公開リゾルバーの代わりに組織のリゾルバーを必要とすることがあり、独自の安全なリゾルバーを持つブラウザーはOSの問い合わせと違う答えを返しうる。両者が食い違うとき、利用者が体験しているのはブラウザーのリゾルバーであり、その区別はチケットに書くべきものだ。

フルトンネルか、社内サブネットのみか

プロファイルには、社内のわずかなサブネットに届くためだけのものと、すべてを運ぶために作られ背後に動く出口を必要とするものがある。表示がすべてのアプリとすべてのアドレスファミリーを覆うと決めつける前に、文書化された目的を読む。社内ネットワーク用プロファイルは設計どおりに動いていても、それを使うはずのなかったブラウザーは失敗し続けることがある。経路表は変更せずに読み、IPv6も含める。動くIPv4経路はもう一方のファミリーについて何も語らない。

既定経路が残っていても、より具体的な経路が勝つことがある。だから表は仮定せず読む必要がある。競合する仮想アダプターが、別の場所で期待した通信を持っていることもあり、とくに二つ目のVPNクライアントを入れて忘れた後に起きる。実験として既定経路を削除しないこと。診断が二度目の障害になる。

動いているサイトの中で一つだけ失敗するのはそのサイトの問題であり、トンネルが通信を運んでいる証拠でもある。大きな転送だけで起きる停止は、到達性ではなくパケットサイズを示す。

サーバーが何も転送しないとき

二台の端末と二つの接続元ネットワークでどの宛先も失敗するなら、トンネルは上がっているが出口が転送していない。この組み合わせが、サーバー側の故障と一か所だけ誤設定された端末を分ける。事業者には表示のスクリーンショットではなく、転送、NAT、戻り経路の問いを送る。

この三つでサーバー側の原因の大半を覆い、答えるのは事業者の仕事だ。OpenVPNの接続トラブルシューティングページは同じ問いをサーバー側からたどるので、チケットと一緒に渡す。緑の表示のスクリーンショットはそのどれにも答えない。

サインイン後のクライアントログで、経路、DNS設定、仮想アダプターの適用失敗を探す。その段階のエラーはサーバーではなく端末を指す。ログに一度も出ないエラーも同じだけ情報になる。疑いが向こう側へ移るからだ。

一度に一つの層を確認する

何かを変えたら再接続し、失敗したアプリをそのまま繰り返す。一ページ読み込めたことは、プロファイルが対象とする資源への再現可能な経路より弱い証拠だ。二つのコマンドで解決と到達性を分けられ、二つ目はホスト依存だ。curlの行はどこでも実行し、次に目の前のホストに合う経路コマンドを実行する。

curl -sS -o /dev/null -w "%{http_code}" --max-time 5 https://example.com
route print -4          # Windows
ip -4 route show        # Linux
netstat -rn | head      # macOS

数値の要求が通り名前が通らないならDNSに残る。どちらも通らないなら、経路表をトンネルの期待する既定値と比べ、実際に試しているファミリーを確認する。経路が正しく要求が出口で死ぬなら、残る問いは事業者のもので、残した証拠がチケットだ。

関連記事