ヘッドレスVPNの確認:一度に一つのフローを、証拠とともに
ヘッドレスの箱には、応答を読めるリクエストが必要です。アドレスファミリー、コンテキスト、宛先ごとに試し、結果が何をカバーしなかったかを記録します。
ヘッドレスの箱には開くブラウザも、眺める鍵アイコンもありません。そのため確認は、応答を読めるリクエストでなければなりません。これは、たった一つの出口アドレスの結果で、十数のサービス、二つのアドレスファミリー、プロキシを動かす端末を認定しようとする場面に気づくまでは、些細なことに思えます。以下の手順は、ワークロードが実際に動くのと同じコンテキストで、一度に一つの限られた証拠を積み上げます。
テストが何を証明すべきかを決める
何かを実行する前に、期待を一行で書きます。どのフローが、どのインターフェースを通り、どの宛先へ向かい、反対側で何が見えるべきか。期待を明示しないテストは、誰にも解釈できない数値を生みます。
最も役立つのは、見えた送信元アドレスを報告する承認済みエンドポイントを名指しする形です。
そのエンドポイントだけが、あなたが用意すべき部分です。それ以外はすべてクライアント側の観測であり、クライアント側の観測は興味深い形で失敗します。
観測は正しいコンテキストで実行する
管理者のシェルはワークロードの環境ではありません。別のプロキシ変数、別の名前空間にある別のルーティングテーブル、別のユーザーの環境ファイルを抱えていることがあります。確認する対象と同じホスト、コンテナ、名前空間、サービスのコンテキストでテストを実行してください。そうでなければ、自分のシェルを測っているだけです。
通常のホストでは、同じユーザーと同じユニットを意味します。コンテナ環境では、ホストから試すのではなくコンテナのネットワーク名前空間に入ることを意味します。systemdサービスでは、同じ設定の一時ユニットを意味することがあります。
続くリクエストは、正しいコンテキストにいて初めて意味を持ちます。
アドレスファミリーを別々に確認する
各ファミリーを明示的に要求します。成功したIPv4リクエストはIPv6の経路をまったく通らないからです。--ipv4と--ipv6のセレクターは選択を強制し、二つの結果の違いはそれ自体が情報です。
curl --ipv4 https://probe.example/observed-source
curl --ipv6 https://probe.example/observed-source失敗したIPv6リクエストは、有効な遮断の証拠ではありません。エンドポイントにIPv6アドレスがない、DNSが使えるものを返さなかった、端末にIPv6経路がまったくない、といった可能性があります。結論を出す前に失敗を読み解いてください。トンネルを通った成功したIPv6リクエストだけが、IPv6経路がカバーされていることを証明します。
両方の応答を並べて記録します。片方だけでは事実の半分です。
出口確認が見落とす四つのことを加える
出口アドレスは一つの問いに答えます。さらに四つが、トンネルが設計どおりに振る舞うかを決めます。
| Check | What it proves | What it does not |
|---|---|---|
| Included and excluded destinations | The split behaves as designed for those flows | Coverage of any other destination |
| Resolver path | Where a fresh lookup actually travelled | Where a cached answer came from |
| Tunnel-down behaviour | The failure policy for a new request | What an already open connection does |
| Reconnect and restart | The requirement survives the lifecycle event | Behaviour under load or partial failure |
宛先ポリシーが最初です。設計に分割があるなら、含まれるべきフローと除外されるべきフローを試します。次にDNSで、設定値ではなく実際のリゾルバー経路を調べます。キャッシュされた応答や表示された設定は、新しい問い合わせがどこへ行ったかを何も語らないからです。
障害時の挙動には計画と保全された復旧経路が必要です。トンネルが利用できない間に新しいリクエストを観測し、古い開いた接続は障害ポリシーの証拠にならないことを忘れないでください。ライフサイクルは最後です。再接続やサービス再起動が要件に影響するなら、その後に観測を繰り返します。
評決ではなく証拠を記録する
各結果について、プロセスのコンテキスト、宛先、アドレスファミリー、時刻、観測された送信元を残します。その集合は、実行したフローについての限られた証拠であり、何をカバーしたかを語るからこそ擁護できます。
これはVPN事業者の記録の監査ではなく、端末上の将来のあらゆるアプリケーションに対する証明書でもありません。
限界を結果の隣に書きます。カバーしなかったことを明示するテストはレビューを生き残り、端末が検証済みだと主張するテストは生き残りません。使ったファミリーセレクターの隣にcurlのマニュアルを置き、結果とともに四行の表を保管してください。