Windows VPNが接続できない? コードをイベントログと突き合わせる
Windows VPNのダイアログは失敗した段階を隠している。結果コードを読み、その試行のRasClientイベントを取得し、壊れた層だけを変更する。
金曜日には動いていた。月曜日、同じWindowsクライアントは接続試行が失敗したというダイアログを返し、その下の一文は、無関係な十数件の問題で既に見たことのあるものだ。そのダイアログは連鎖の終わりであって、始まりではない。Windowsは試行が実際に死んだ段階を隠しており、二つの小さな証拠 — 数値の結果コードと同じ分のRasClientイベント一つ — がそれを名指しする。これが私が使う順序である — 試行を固定し、コードを読み、イベントを取得し、それから正確に一つの層だけを変える。
ダイアログの文言は最後の段階であって、原因ではない
読んでいる一文は、試行がすでにほどけた後に選ばれる。「接続が確立される前に、リモート コンピューターによって接続が終了されました」は、サーバーが交渉の途中で切ったとき、ユーザー名が送られる前にIPsecが失敗したとき、ポリシーがトンネルを丸ごと拒否したときに現れる。三つの異なる所有者、一つの文だ。文言は症状の分類として扱い、コードが同意するまで何も導かせないこと。
まだ固定できるのは試行そのものである。接続名、プロファイルに保存されたトンネルの種類 — PPTP、L2TP/IPsec、SSTP、IKEv2 — 、秒までの時刻、そしてコードを書き留める。実際にどのプロトコルが動いたか確信が持てないなら、記憶を信じるのではなく%APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbkを開いてエントリを読むことであり、新しいプロトコルに再利用されたプロファイルは古い表示名を保ったままだ。
言葉を読む前に数字を読む
コードは三段階に分かれ、段階は正確な言い回しより重要である — 到達して拒否された認証交換、決して応答しなかったサーバー、リンクが上がった後に崩れた交渉である。691は最初の種類だ — 資格情報の検査が走って失敗したのであり、パスワードの誤り、ロックまたは期限切れのアカウント、サーバーが受け付けない認証プロトコルのいずれかである。812も拒否だが、資格情報は有効で、リモート アクセス サーバーのポリシーがあなたに反対して決めたのである。Microsoftは正典のダイヤルアップおよびVPN接続のエラー コード一覧を維持しており、メッセージ本文を検索する前にそこで自分の番号を読む価値がある。
809は逆の分類だ — 何も返ってこなかった。これは経路の問題である — SSTPではTCP 443がフィルタされ、PPTPではGREがブロックされ、IPsecパススルーではUDP 500と4500あるいはESPが落とされる。新しいパスワードでは直せず、新しい証明書でも直せない。720はリンクが上がりPPPが交渉を終えなかったことを意味し、プロトコルの不一致かアドレスを割り当てられなかったサーバーを指す。789、またはIKEv2では13801は、IPsec内部の身元である — ダイヤルする名前と一致しないサブジェクトの証明書、信頼されないチェーン、両端で異なる事前共有キーのいずれかだ。
同じ分のRasClientイベントを取得する
イベント ビューアーでは、ソースRasClientでフィルタしたWindows Logs > Applicationが最初に見る場所だ。エラー720についてのMicrosoftの記述は、そのログのイベント20227を指している。同じプロバイダーは別の結果に対して別の識別子を出すので、IDを診断とみなすのではなく、メッセージとそこに埋め込まれた結果コードを読むことであり、汎用のダイアログに720を運ぶ20227が加われば、すでにはるかに狭い話である。
PowerShellから、GUIをクリックせずに:
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
ProviderName = 'RasClient'
StartTime = (Get-Date).AddMinutes(-15)
} | Format-List TimeCreated, Id, Message
空の結果は情報になる。ふつうは、ダイヤルがRASが何かを記録するほど遠くまで行かなかったか、失敗したソフトウェアがそもそもネイティブ クライアントではないことを意味する — サードパーティのクライアントは独自の診断を持ち、Applicationログには何も書かないことが多い。イベント ログが壊れていると結論する前に、ベンダーのログを確認すること。
イベントの山ではなく、一本のタイムラインを組む
再試行のループはノイズを生む。五回の自動再接続はイベントの塊を残し、それを単一の原因を持つ一つの系列として読む誘惑がある。それは五つの別々の試行であり、サーバーに届いたのはその一部だけだ。二、三分の窓と一つの接続名を取り、何かを解釈する前に各イベントをそれぞれのコードとともに列挙する。
次に、試行がどこで止まったかを問う。ゲートウェイや認証バックエンドがそのタイムスタンプの記録を一切持っていないなら、クライアントはそこに届いておらず、到達性の問題を見ている。バックエンドが要求と拒否を示すなら、決定はそこで下されており、資格情報かポリシーの分類が当てはまる。時刻を比べる前に時計を比べること — クライアントは現地時刻を報告し、多くのゲートウェイはUTCで記録し、ずれは完全に相関する組を無関係に見せる。
再現可能な取得のために、コマンド ラインからダイヤルし、結果を出力させる:
rasdial "Office VPN"
rasdial "Office VPN" /disconnect
コンソールはGUIが親しみやすい文言の裏に隠す番号を表示し、二度実行すればコードが安定しているか断続的かが分かる。
各段階が何を変えろと言っているか
段階に名前を付けるのは、変更の集合を一つの層に縮めるときだけ役に立つ:
691— 認証: クライアントが提示するEAP方式とサーバーが受け付ける方式、アカウントの状態、パスワードの有効期限、ダイヤルインの許可。812— サーバー ポリシー: このユーザーとこの時間枠に一致するリモート アクセス ポリシーまたはNPS規則。809— 到達性: 経路上のファイアウォール規則、NATとプロトコルのパススルー、選んだトンネルの種類が必要とするポート。720— PPP交渉: 認証プロトコルの不一致、アドレスの割り当て、サーバー側のPPP設定。789/13801— IPsecの身元: ダイヤルする名前に対する証明書のサブジェクト、信頼チェーン、事前共有キー。
そのうち一つを変え、同じプロファイルを再試験し、新しいコードを書き留める。変更後に別のコードになるのは矛盾ではなく前進だ — 失敗を後の段階へ移したのであり、多段階のハンドシェイクを直すとはそういうものだ。やってはいけないのは、ファイアウォールと証明書とパスワードを一度に変え、最後に来たものに功を帰することである。
証拠を共有し、環境は共有しない
イベント メッセージは見た目より豊かだ。接続名、アカウント、しばしばゲートウェイの内部名やアドレス、ときに証明書の拇印を運ぶ。原本はあるべき場所に置き、他の誰かのために別途伏せ字にした複製を作ることであり、タイムラインを記憶から打ち直すと、それを有用にしている細部がちょうど失われる。
実際に手が動く引き継ぎには五つの項目が要る — コード、それが属する段階、クライアントとトンネルの種類、タイムゾーン付きのタイムスタンプ、そしてゲートウェイが要求をそもそも見たかどうか。それ以外は任意だ。この五つがあれば、次の人は調査を繰り返さずに、資格情報の議論と経路の議論を区別できる。
何かを閉じる前に、同じプロファイルで試行を再生し、コードが今どこに落ちるかを確認する。成功すればそれで終わり、別の失敗なら元の段階は直っており、次が手元にある。