DNSのゾーン転送とは、権威DNSサーバー同士でDNSゾーンの情報を同期する仕組みです。
主に、プライマリDNSサーバーが管理しているゾーンデータを、セカンダリDNSサーバーへ複製するために使われます。
DNSはインターネットの基盤なので、1台のサーバーだけで運用すると障害時に名前解決へ影響が出る可能性があります。
そのため、同じゾーン情報を複数の権威DNSサーバーで共有し、可用性や冗長性を高めるためにゾーン転送が使われます。
DNSでは、あるドメインに関する管理単位をゾーンと呼びます。
たとえば example.com のゾーンには、次のような情報が含まれます。
A レコードAAAA レコードMX レコードCNAME レコードTXT レコードNS レコードSOA レコードゾーン転送は、こうしたレコード群を権威DNSサーバー間で同期する仕組みです。
ゾーン転送の主な目的は、DNS運用の安定性を高めることです。
プライマリDNSサーバーに障害が発生しても、セカンダリDNSサーバーが応答できます。
異なるネットワークや拠点に複数の権威DNSサーバーを配置することで、単一障害点を減らせます。
問い合わせを複数の権威DNSサーバーへ分散できます。
ゾーン更新は主にプライマリ側で行い、その内容をセカンダリへ反映する形で管理できます。
一般的な構成は次の通りです。
通常、セカンダリが持つゾーン情報はプライマリから転送された複製であり、直接編集する運用は一般的ではありません。
ゾーン転送には主に2種類あります。
ゾーン全体をまとめて転送する方式です。
初回同期や、差分転送が使えない場合などに利用されます。
特徴
変更された差分だけを転送する方式です。
更新頻度が高いゾーンや、通信量を抑えたい場合に有効です。
特徴
ゾーン転送を理解するうえで重要なのが、SOA(Start of Authority)レコードです。
SOAには、そのゾーンに関する基本情報が入っています。
特に重要なのがシリアル番号です。
セカンダリDNSサーバーは、プライマリのSOAレコードにあるシリアル番号と、自分が保持しているシリアル番号を比較し、
プライマリのほうが新しければゾーン更新が必要だと判断します。
SOAには一般に次のような項目があります。
ゾーン転送に関する典型的なトラブルのひとつが、ゾーン内容を変更したのにSOAのシリアル番号を更新していないケースです。
たとえば、
www.example.com のIPアドレスを変更したという状態になると、サーバーごとに異なる応答が返ることがあります。
ゾーン転送は、単にセカンダリが定期的にSOAを確認して始まるだけではありません。
実運用では、プライマリからの通知によって転送が促されることも多いです。
大まかな流れは次のとおりです。
実際のDNS運用では、NOTIFY が重要です。
これは、プライマリDNSサーバーが
「このゾーンが更新された可能性があるので確認してほしい」
とセカンダリへ知らせる仕組みです。
NOTIFY自体がゾーンデータそのものを送るわけではありません。
通知を受けたセカンダリはSOAを確認し、必要であればAXFRやIXFRでゾーン転送を行います。
つまり、より正確には、
と理解するとよいです。
ゾーン転送は通常、TCP 53番ポートを使います。
一般的なDNS問い合わせではUDPがよく使われますが、DNSは通常問い合わせでも条件によってTCPを使うことがあります。
そのため、
と理解しておくと正確です。
ゾーン転送は便利な仕組みですが、設定を誤ると大きな情報漏えいにつながります。
もし誰にでもゾーン転送を許可してしまうと、第三者がそのゾーン内のレコード一覧を取得できる可能性があります。
たとえば次のような情報が見えることがあります。
たとえば、次のようなホスト名が外部から見えると、攻撃者にとって偵察材料になります。
admin.example.comdev.example.comstg.example.commail.example.comvpn.example.comこのため、ゾーン転送は必要な相手にだけ許可するのが原則です。
ゾーン転送を安全に使うためには、少なくとも次の点が重要です。
許可したセカンダリDNSサーバー以外にはゾーン転送を認めないようにします。
UDPだけでなく、TCPの53番がどこまで開いているかも確認が必要です。
転送要求の正当性確認や、メッセージの完全性確認に役立ちます。
外部公開ゾーンには、不要な内部向け情報を載せないようにします。
許可先IP、ACL、TSIG設定、ゾーン構成などを継続的に確認します。
TSIG(Transaction SIGnature)は、DNSメッセージに署名を付けて、通信相手が正しい相手かどうか、また内容が改ざんされていないかを確認する仕組みです。
ゾーン転送では特に重要な保護手段です。
ただし、TSIGは主に
のための仕組みであり、通信内容の秘匿そのものを目的としたものではありません。
そのため、必要に応じてファイアウォール、VPN、転送経路の制御などもあわせて考える必要があります。
これは混同されやすいですが、まったく別の仕組みです。
権威DNSサーバー間でゾーン情報を同期する仕組み
クライアントの代わりにDNSサーバーが名前解決を進める仕組み
つまり、
です。
自分が管理しているゾーンについて正式な回答を返すサーバー
他のDNSサーバーへ問い合わせを行い、その結果を保存して利用するサーバー
ゾーン転送は、基本的に権威DNSサーバー間で使われる仕組みであり、キャッシュDNSの同期機能ではありません。
最も典型的な問題です。
セカンダリのIPアドレスが許可されていないと転送できません。
UDPは通っていてもTCPが閉じているとゾーン転送は失敗します。
キー名、アルゴリズム、共有秘密鍵が一致していないと認証に失敗します。
参照先アドレスやゾーン名の誤りでも同期できません。
IXFRの前提条件がそろっていないと、AXFRへ切り替わることがあります。
一定期間更新できないと、セカンダリがそのゾーンを無効と判断することがあります。
代表的には dig コマンドで確認できます。
dig AXFR example.com @ns1.example.com
このコマンドは、指定したサーバーに対して example.com のフルゾーン転送を要求します。
結果として、
Transfer failedという見方ができます。
ただし、公開DNSサーバーではゾーン転送が拒否されるのが普通です。
また、確認は必ず自分に権限のある環境で行うのが前提です。
BINDなどのDNSサーバーソフトでは、概念的には次のような考え方で設定します。
実装やバージョンによって既定値や細かい挙動は異なるため、転送制御は明示的に設定するのが安全です。
最近はBINDなどを自前で運用せず、マネージドDNSサービスを使うことも多くなっています。
その場合、
こともあります。
ただし、外部DNSとの連携やセカンダリDNS機能を提供するサービスでは、やはりAXFR、IXFR、転送制御、認証の考え方は重要です。
ゾーン転送はインフラ寄りのテーマに見えますが、Web運用にも関係します。
「レコードを変更したのに一部環境で古い応答が返る」というとき、TTLだけでなくセカンダリ未同期が原因のことがあります。
古いLP、検証環境、旧システム用ホスト、管理用ホストなどが残っていると、設定不備があった場合に情報露出の材料になります。
MX、SPF、DKIM、DMARCなどの整合性に問題があると、メール配信や認証面へ影響が出ます。
外部ベンダーへDNS管理を委託している場合でも、ゾーン転送の制限が適切かどうかは確認ポイントになります。
DNSデータを権威サーバー間で同期する仕組み
DNS応答が正当なものかどうかを検証するための署名の仕組み
つまり、
であり、目的が異なります。
DNSSECを使っていても、ゾーン転送の許可設定が不適切なら情報漏えいリスクは別途存在します。
DNSのゾーン転送とは、権威DNSサーバー間でゾーン情報を同期するための仕組みです。
重要なポイントをまとめると、次の通りです。
以上、DNSのゾーン転送についてでした。
最後までお読みいただき、ありがとうございました。