VPN ピアの監視に必要なのは四つの事実であり、そのどれもが宛先ではない。トンネルが上がっているか、最後にいつトラフィックを交換したか、どの鍵が関与しているか、どれだけ動いたか——これだけで可用性には足りる。それ以上は人についての記録であり、ステータスページを開く副作用ではなく、意図的な決定であるべきだ。答えるべき問いから始め、その問いに答える最小の出力を選ぶ。

道具より先に問いを決める

まず運用上の問いを書く——このピアは接続されているか、トラフィックを動かしているか。その問いにはライブ表示が必要で、ライブ表示には保持の問題がない。二つ目の問い、先週火曜日の 02:00 にピアが接続されていたか、には保存された系列と、したがって保持の判断が必要になる。この二つを分けることが設計のすべてであり、ライブ表示は安価だが、保存された系列はデータ保護の議論に変わる。

ヘルスチェックもステータス出力から切り離しておく。最近のハンドシェイクはトンネルが交渉したことを証明するが、その背後のプライベートアプリケーションが動いていることは証明するものではないので、カウンターから推測するのではなく承認されたチェックでアプリケーションを試す。チェックが失敗し、ハンドシェイクが最近なら、問題はトンネルの先にある。

それに答える三つの項目を読む

WireGuard の素のステータス出力には、インターフェース、公開鍵、エンドポイント、最新のハンドシェイク、転送カウンターが含まれる。存在の確認には公開鍵と最新のハンドシェイクが要り、必要ならバイトカウンターを足して動きを見る。エンドポイントは存在の確認には不要で、デバイスがどこから接続するかを特定してしまうため最初に捨てる項目だ。マニュアルのページは道具が出力する各項目を説明しており、一度読むには十分短い:

wg show
wg show wg0 latest-handshakes

その数値は真偽値ではなく、経過時間として読む。ハンドシェイクが新しいと言えるのは、プロトコル自身の鍵更新間隔との関係においてだけであり、動いていないカウンターは壊れたピアではなく待機中のピアを意味するかもしれない。経過時間と動きを一緒に読めるよう、両方を同じ画面に置く。

説明できる間隔を選ぶ

ステータスのサンプルはすべて記録なので、間隔は監視というラベルを貼った保持の判断である。十秒ごとのサンプルは細かい情報を与えるが保存行を増やし、一分ごとのサンプルは通常、六分の一のコストで可用性には十分だ。間隔は道具にできることではなく、約束した応答時間から選ぶ。そして数字をダッシュボードの横に書く。

OpenVPN では、ステータス機能が設定された間隔でファイルを書き出す。サーバー設定ではこうなる status /var/log/openvpn-status.log 60 で、末尾の数字は書き直しの間隔を秒で表し、ファイルは追記ではなく置き換えられる。この違いは重要だ——置き換えられたファイルには履歴がないが、追記する収集側は履歴を作ってしまう。

収集側もその間隔を守っていることを確認する。毎秒サンプルを取り、一分に一行だけ保存する道具でも、毎秒読んでいる。

ラベルを安定させ、対応付けを制限する

公開鍵は名前が付いていなくてもデバイスの関係を特定するので、鍵は不透明な識別子ではなく個人データとして扱う。ピアには再接続を越えて残る安定した内部識別子を付け、識別子から人への対応付けは制限された場所に置く。時系列を書き出すダッシュボードは、VPN が自前のファイルを持たなくても保存された記録である。ダッシュボードが唯一の保存先なら、保持ルールはそこに適用される。

エクスポート経路も見直すべきだ——コピーされた CSV はそれを作ったシステムより長く残る。集計された可用性はレポートには十分なことが多く、窓の中にハンドシェイクがあるピアの割合は、誰がいつ接続していたかを列挙せずに運用上の問いに答える。

何を集め、何を集めないかを文書化する

収集の説明を平易な言葉で書く——どの項目を、どのインターフェースから、どの間隔で、どこに保存し、どれだけ保持し、誰が読めるのか。インシデントの最中に誰も開かないポリシーリポジトリではなく、runbook の隣に置く。説明は監視が見えないものも述べるべきだ——閲覧データがないことが記録がないことを意味すると誰かが思い込むのを、まさにそれが防ぐ。

監視が変わるたびに保持の窓を見直す——新しい項目は保持されるものを静かに広げるからだ。そして説明どおりに削除し、削除が実際に行われたことを確認する。

関連記事