HTTPプロキシ連鎖でのDNS障害:どのホップが名前を解決するのか
連鎖フォワードプロキシを診断するときは、ローカルプロキシへの到達、親の解決、ウェブサイトの解決を分けて考えます。
client → local forward proxy → HTTP parent → websiteすべてのDNSが「プロキシ」のものだと決めつけず、失敗している名前から始めます:
| 必要な名前 | そこに到達する必要があるホップ |
|---|---|
| ローカルプロキシのエンドポイント | クライアント |
| HTTP親のエンドポイント | ローカルのフォワードプロキシ |
| ウェブサイトのエンドポイント | 最終接続を開くときの親 |
エンドポイントがホスト名の場合、これらのホップは異なるリゾルバを使えます。HTTPSでは、フォワードプロキシがCONNECTの宛先ホストとポートを親に渡し、親が最終接続を確立します。元のクライアントが先にウェブサイトを解決する必要はありません。平文のHTTP転送も宛先情報を先へ運びます。
これは、各名前をちょうど1台のマシンだけが問い合わせるという約束ではありません。ACLの評価、キャッシュ、ポリシー、実装の詳細によって追加の照会が起こり得ます。
親が利用できないときはフォールバックポリシーを確認します。直接アクセスが許可されている場合、ローカルプロキシがウェブサイトに向かうホップになり、独自のリゾルバと送信元アドレスの判断を持ちます。親を設定しただけでは、すべてのリクエストがそれを使ったことにはなりません。
障害時は、hostsファイルを編集する前に、その名前と解決を試みているプロセスを特定します。クライアント側の編集だけでは下流の判断をすべて修復できません。最終的な公開送信元はウェブサイトへの接続を開くホップに属します;その送信元を観察することは、DNSがどこで起きたかを測ることとは同じではありません。