ノートPCのスリープをトンネルが乗り切るのか、アクセスポイント間の移動、あるいは一時間の通話を乗り切るのかを知りたいが、その調査中に読んだものすべてのログを誰かに渡したくはない。答えを出すのは三つだ。固定のプローブ、同じ四つの事実を予定どおりに標本化すること、そしてそれらを変えたイベントを書き残すこと。その十分間は、ページが読み込めないのを半日眺めるより価値がある。最終的に手元に残るログも、半分を伏せることなくチケットに添付できるほど短い。

安定とは何を意味するかを決める

「VPN が落ちた」は四つの別の障害が一語に収まったものだ。ピアがハンドシェイクを失うことも、経路がローカルゲートウェイに戻ることも、名前解決がトンネル経由で決して応答しないサーバーに向かうことも、あるいはそれらがすべて健全なまま一つのアプリだけが失敗することもある。何かを集める前に、どれが自分の症状に当たるかを決めよう。それぞれ別のプローブが要るからだ。次に続けられる間隔を選ぶ。三十秒ごとに一つの標本を十分間続ければ、テストを負担にせずローミングを捉えられる。

台所へ歩いたときに通話が固まるという不満なら、必要な性質はローミング後に新しい要求が完了するかどうかだ。それは一行で確認でき、ブラウジングは一切記録しない。

無害なプローブを一つ固定する

自分のアカウントと結びつかず、問い合わせてよい宛先を選ぶ。ドキュメントのホスト、社内の状態エンドポイント、あるいはトンネルのゲートウェイそのものだ。操作を再現可能にしよう。たとえば curl -s -o /dev/null -w "%{http_code} %{time_total}\n" https://example.com/ は試行ごとに一行を出力する。その出力形式を実行全体で固定する。同じやり方で二度集めたステータスコードと所要時間があって初めて、二回の実行は比較できる。

実際に頼っているサイトには手を出さない。銀行やウェブメールのページはトラッカーやリダイレクト、個人向けの内容を測定に引き込み、後でチケットに貼るものへセッション識別子を出力してしまう。調査全体で同じ宛先を使い、間隔の隣に書き留めておく。

四つの事実を標本化する

ピアの状態、経路、リゾルバ、そして新しい要求一つが四つの観測で、どれにも安価な情報源がある。WireGuard では wg show wg0 latest-handshakes がピアの時刻を与え、ip route get 1.1.1.1 がカーネルが使うインターフェースを示す。OpenVPN では同じ状態が --status /run/openvpn/status 10 の書くステータスファイルに、あるいは管理インターフェースの state の背後にある。Windows クライアントは Get-NetAdapter と Resolve-DnsName で PowerShell にとどまる。

すべての行に時刻が載るよう一つの端末でループさせる(for i in $(seq 1 20); do date -Is; wg show wg0 latest-handshakes; ip route get 1.1.1.1; sleep 30; done)。このループは六つのログ項目のうち三つを覆い、クライアントの版は先頭に一度だけ書き、イベントの時刻はイベントが起きたときに加える。

リゾルバは人が飛ばしがちな事実で、dig +short は答えだけを出力するためそれを隠す。サーバーを明示的に尋ねるには dig example.com | grep SERVER: を使い、dig が入っていない環境では nslookup example.com を使う。遊休トンネルの古いハンドシェイクも自動的な異常ではない。WireGuard は守るべき通信があるときだけ鍵を交換する。

漏えいではなくイベントを起こす

気になるイベントの前に、静かな五分間を基準線として取る。蓋を閉じるのでも、別のアクセスポイントへ歩くのでも、携帯のテザリングに切り替えるのでもよい。起こした時刻を書き留めれば、前後の標本を並べられる。

その時刻がなければログには空白が残り、クライアントとネットワークのどちらが閉じたのか誰にも言えない。イベントの位置が違う二回の実行は、イベントのない十回より価値がある。クライアント自身の切断と再接続の操作を使う。キルスイッチを切ったり、トンネルの外へ通信を押し出して何が起きるか見たりしてはいけない。管理されたノートPCでは規程違反になり、自分の機械ではまさに検証しようとした露出を作ってしまう。

終えられる大きさのログに保つ

標本ごとに六つの項目、すなわち時刻、クライアントの版、エンドポイント、接続ネットワーク、イベント、結果だ。URL、ペイロード、トークン、セッション識別子を含むものは入れない。ログはトンネルについての証拠であり、それ以外ではない。ループの隣に置いておけば、次の人が列の意味を尋ねずに再実行できる。

変更のあとは同じプローブと同じ間隔でテストを繰り返す。宛先とクライアントの版を同時に変えれば、結果はどちらのものにもならない。きれいな十分間の実行は、その条件とその宛先に対する証拠であり、来月のホテルのネットワークについての約束ではない。スクリプトとログの雛形は見つけられる場所に置いておく。WireGuard の文書化された制限は、切断をプロトコルのせいにする前に読む価値がある。

関連記事