A forwarding DNS server is a DNS server that delegates queries it cannot answer to configured upstream servers while caching results for repeated local lookups, reducing outbound traffic and centralizing logging and filtering across branch offices and remote sites. This architecture concentrates external name resolution in a few shared upstream resolvers, allowing lightweight forwarders to operate at remote locations instead of full recursive resolvers, which speeds up repeat queries through local caching. However, forwarders introduce dependencies on upstream server availability and correctness, and misconfigurations such as unreachable forwarders, forwarding loops, or broken internal zone resolution can cause outages and slow lookups that require careful monitoring and maintenance to prevent.
DNSサーバーの転送の仕組み
フォワーディングDNSサーバーは、フォワーダーと呼ばれる1つ以上のアップストリームサーバーと連携するように設定されています。このサーバーは、ローカルデータやキャッシュから回答できるものには直接回答し、それ以外のリクエストはすべてそれらのアップストリームサーバーに転送します。
- クライアントクエリ:クライアントまたはスタブリゾルバーが、名前に対する再帰クエリをフォワーディングDNSサーバーに送信します。
- ローカルチェック:サーバーは、自身がホストしているゾーンとキャッシュを確認します。有効な応答がキャッシュされている場合、直ちに応答を返します。
- アップストリームへの転送:応答が得られない場合、サーバーは「再帰処理を要求」フラグが設定された設定済みのフォワーダーにクエリを送信し、アップストリームサーバーに完全な解決を依頼します。
- アップストリーム解決:アップストリームサーバーは、通常、ルートからDNS階層を辿ることで名前を解決するか、自身のキャッシュから応答を返します。
- キャッシュと応答:転送サーバーは応答を受信し、その有効期間(TTL)の間保存した後、クライアントに返します。
多くの実装では、条件付き転送がサポートされています。これは、特定のドメインに対するクエリを、パートナーネットワークのDNSサーバーなど、特定のサーバーに送信する機能です。フォワーダーが応答しない場合、独自の反復解決に切り替える実装もあれば、転送のみを行い、代わりにクエリを失敗させるように設定できる実装もあります。
DNSフォワーダーでよくある問題
設定されたすべてのフォワーダーに到達できない場合、ローカルサーバーが正常であっても、クライアントは外部名の解決に失敗します。別々のパス上に少なくとも2つのフォワーダーを指定することで、このリスクを軽減できます。
互いに転送するように設定された2台のサーバー、または循環するチェーンは、クエリがタイムアウトするまでバウンスし続けます。症状としては、検索速度の低下や、他の場所で解決される名前に対するSERVFAIL応答が挙げられます。
内部ドメインに対するクエリをパブリックなアップストリームサーバーに送信すると、NXDOMAINまたは誤った応答が返されます。これらのドメインに対して条件付き転送またはローカルでホストされたゾーンを使用することで、この問題を回避できます。
フォワーダーはアップストリームサーバーから返された内容をすべてキャッシュするため、不正な応答はTTLが切れるまで残ります。キャッシュをフラッシュするとローカル上のコピーは修正されますが、アップストリームのソース自体は修正されません。