再帰は利用できない:DNS ポリシーの問題で、トンネルの故障ではない
サーバーは VPN 送信元のためにインターネットを解決せずに自分のゾーンへ応答できる。ステータスを読み、送信元を確認し、分割 DNS を決める。
内部名は解決でき、同じサーバーが外部名には再帰に関する拒否を返す。この組み合わせは矛盾ではない。自分のゾーンを公開することと、インターネット全体を解決することは、サーバーが提供できる別々のサービスであり、後者なしで前者を行うことができる。拒否をポリシーの表明として扱い、そのポリシーが設計と合っているかを確認する。
拒否とタイムアウトは別の応答である
名前、クエリ種別、応答したサーバー、ステータス、返されたレコードを記録する。再帰の警告は、それと一緒に届いた権威応答を自動的に無効にはしない。解釈する前にステータスを書き留める。一時間後に記憶から再構成したステータスは別の事実である。
DNS ヘッダーは再帰の要求と、サーバーがそれを提供するかどうかの表示を運び、プロトコル仕様はこれらのフラグを応答データから分けている。だから応答が有用でありながら苦情を含むことがある。タイムアウト、否定応答、拒否は三つの異なる結果である。それぞれ別の層を指し、サーバーがポリシーを伝えているのは拒否だけである。
まずステータスコードを読み、その警告がこのクエリにとって重要かを決める。ゾーンを名指す権威応答は、再帰ビットが拒否されても使える。応答のない拒否はポリシーの結果であり、壊れたパケット経路ではない。
リゾルバーがあなたの送信元として記録したもの
クライアントはサーバーの許可された再帰範囲外のアドレスプールから来るかもしれず、変換によってゲートウェイのように見えることもある。クライアント自身のアダプターアドレスは、リゾルバーが何を受け取ったかの証拠にはならない。経路のこちら側から推測するのではなく、サーバー管理者に観測された送信元を尋ねる。二つのアドレスは変換するホップごとに異なりうる。
同じ名前をクライアントからと、サーバーがすでに信頼するホストから問い合わせる。二つの応答の差が送信元の条件であり、どちらか一方の応答より有用である。
dig +short host.corp.example
dig +short example.com
導入が VPN クライアントに再帰を望むなら、管理者はサーバー自身の制御を通じて適切な送信元範囲を許可する。一つのテストを通すために再帰をすべてのネットワークに開くことは、試験中の変更よりはるかに大きい。許可した範囲はルールの隣に書き留める。それは次のレビュー担当者が、ポリシーがどの送信元に仕えるべきだったかを尋ねるからであり、所有者のいない送信元範囲は一時的なテストを恒久化する道である。
分割 DNS は設計であり、障害ではない
一部の導入は業務ドメインだけをプライベートリゾルバーへ送り、それ以外は別の承認済みリゾルバーへ送る。これはクエリ経路の設計であり、プライベートサーバーがより緩いポリシーを必要とする証拠ではない。その設計では、プライベートリゾルバー経由で外部名が失敗することは意図された結果であり、障害ではない。拒否は設計が機能している姿であり、抑え込む症状ではない。
公開リゾルバーは閲覧を取り戻す一方で、内部名を壊したり、プライベートなクエリを送るべきでない場所へ送ったりする。リゾルバーのアドレスを変える前に、意図する挙動を書き留める。
二つのクエリでポリシーを検証する
意図した修正の後、実際のクライアントから許可されたプライベート名と外部名を問い合わせる。返ってくるものはポリシーが約束するものであるべきで、単に静かな診断ではない。各応答で応答したサーバーを記録し、その組みをポリシーと比較する。比較こそがテストであり、一度の成功した検索ではない。
resolvectl query host.corp.example
resolvectl query example.com
プライベート名が通り、公開名が拒否されるなら、ポリシーは言うとおりに動いている。プライベート名も失敗するなら、問題はゾーン、経路、送信元の許可にあり、再帰は注意をそらすものだ。どちらの結果も有用であり、それぞれが残る仮説の半分を排除する。
拒否を証拠として読む
拒否は応答である。サーバーがクエリを受け取り、要求された作業を断ったという意味であり、決して届かなかったパケットとは異なる。この区別が診断のすべてである。接続障害ではなく応答として記録する。
この区別はどこを見るべきかを教える:サーバーのログ、アクセスポリシー、記録した送信元である。ファイアウォールの変更はポリシーの拒否を直せず、ポリシーの変更は欠けた経路を直せない。どちらかに証拠が出るまで、二つの仮説を分けておく。
結果とポリシーの所有者をチケットに書き、次の人が警告ではなく判断から始められるようにする。許可された送信元範囲と、試した二つの名前を記す。その三つの事実があるチケットは再実行できるが、"再帰が壊れている"と言うチケットはできない。