DNSゾーン転送

目次

DNSゾーン転送とは

DNSゾーン転送とは、あるDNSサーバーから別のDNSサーバーへDNSゾーン(特定のドメイン名に関する情報の集合)のデータを複製する仕組みのことです。

一般的に、プライマリDNSサーバーで管理されているゾーン情報を、セカンダリDNSサーバーに対して転送することで実現されます。

このDNSゾーン転送を使うことで、複数のDNSサーバで名前解決のレコード情報を共有できるということになります。

このプロセスはDNS情報の同期とも呼ばれ、DNSサーバーの冗長性確保や負荷分散のために重要な役割を果たしています。

DNSゾーン転送
ゾーン転送は定期的に同期が行われるため、プライマリDNSサーバで行われた変更は、セカンダリDNSサーバへ一定期間の後、同期が行われます。

組織内のDNS構成において、ゾーン転送はサービス可用性を高める重要な手段となっています。

プライマリサーバーが何らかの理由でダウンした場合でも、セカンダリサーバーが同一のゾーン情報を持っていればDNSサービスを継続できるためです。

DNS冗長化
また、クライアントからのDNSクエリを複数のサーバーで分散処理することで、特定のサーバーへの負荷集中を防ぐこともできます。

DNSゾーン転送の仕組み

ゾーン転送は主にDNSプロトコルのAXFR(フルゾーン転送)IXFR(差分ゾーン転送)という2つのメカニズムによって行われます。

AXFRでは、ゾーン全体のデータが一度に転送されるのに対し、IXFRでは前回の転送以降に変更された部分のみが転送されるため、より効率的です。

フルゾーン転送と、差分ゾーン転送は基本的にDNSサーバのソフトウェアが自動的に判断して使用してくれるため、手動でモード変更するような管理は必要ありません。

セカンダリDNSサーバーは通常、定期的にプライマリサーバーに問い合わせてゾーン情報の変更を確認し(SOAレコードのシリアル番号を比較)、更新があれば自動的にゾーン転送を要求する仕組みになっています。

ゾーン転送では、「DNSレコードの種類と意味」で解説したSOAレコードを使用して行われます。

セカンダリDNSサーバーは、SOAレコードにて設定された更新間隔(リフレッシュ間隔)に基づいて、定期的にプライマリサーバーのSOA(Start of Authority)レコードを確認します。

SOAレコードにはシリアル番号が含まれており、これがセカンダリサーバーが保持しているシリアル番号より大きい場合、ゾーンデータが更新されたと判断します。

変更確認
セカンダリDNSがプライマリDNSが変更されたかどうかはこのシリアル番号で確認されるため、プライマリDNSで変更を行った際にはSOAレコードのシリアル番号の数字が増加される必要があります。

最近のDNSサービスのソフトウェアでは、レコード変更時にSOAレコードのシリアル番号を自動発番する機能が付いているものが多いです。

ただし、LinuxのBindサービスなどを使用して、レコード管理をテキストベースでのゾーンファイルで行っている場合は、SOAレコードが自動で更新されないため、レコード変更時に手動でSOAレコードのシリアル番号も増加させないとセカンダリに同期されないので注意が必要です。
SOAのシリアル番号の決定方法
SOAのシリアル番号は、「0 ~ 4294967295」までの値を取ることができます。

常に増加していくことが前提とされているので、途中で数字を戻すことはできません。

最も一般的なシリアル番号の決定方法は、「日付形式」です。

形式:YYYYMMDDnn
 YYYY:年(4桁)
 MM:月(2桁)
 DD:日(2桁)
 nn:同日の更新回数(2桁)

例えば、2023年6月15日の最初の更新であれば「2023061500」、同日2回目の更新であれば「2023061501」となります。

この方式は人間にとって理解しやすく、更新日時が一目でわかるという利点があります。

DNSゾーン転送とフォワーダーの違い

DNSゾーン転送とフォワーダーは名前の語感から、よく混同して離されることがありますが、全く異なるものです。

DNSゾーン転送は、あるDNSサーバー(プライマリ/マスター)から別のDNSサーバー(セカンダリ/スレーブ)へ、完全なゾーンデータを複製するためのメカニズムです。

主な目的は冗長性の確保と負荷分散です。

プライマリサーバーに問題が発生しても、セカンダリサーバーが同じデータを持っているため、DNSサービスの継続性が保たれます。

DNSフォワーダーは、DNSクエリを別のDNSサーバーに転送して解決を委任するメカニズムです。

フォワーダーの主な目的は、DNSクエリの解決経路を制御し、効率化することです。

内部ネットワークからのDNSクエリを集約して外部に転送したり、特定のドメインのクエリを特定のDNSサーバーに転送したりするために使用されます。

フォワーダーの詳細は、「DNSフォワーダー」を参照してください。

比較項目 DNSゾーン転送 DNSフォワーダー
基本的な目的 DNSサーバー間でゾーンデータを複製し、冗長性と可用性を確保する DNSクエリの解決経路を制御し、効率化する
転送データ ドメインに関する完全な情報(すべてのリソースレコード) 個々のDNSクエリとその応答のみ
通信の方向 プライマリからセカンダリへの一方向の情報転送 クライアント→フォワーダー→上流DNSサーバー→フォワーダー→クライアントの双方向通信
サーバーの役割 両方のサーバーがゾーンに対して権威を持つ フォワーダー自体は通常権威を持たず、仲介役として機能
使用プロトコル 主にTCP(ポート53)- 大量データ転送に適している 主にUDP(ポート53)、必要に応じてTCPにフォールバック
主な使用シナリオ 同一組織内の複数DNSサーバー間での情報同期 内部ネットワークと外部DNSサーバー間のクエリ制御、特定ドメインの解決経路指定
設定レベル ゾーンレベルでの設定 サーバーレベルまたはドメイン条件レベルでの設定
転送のトリガー シリアル番号の変更、プライマリからのNOTIFY、定期的な更新チェック クライアントからのDNSクエリ受信時
機能の位置づけ DNS管理/運用機能 DNS解決/クエリ処理機能
キャッシュとの関係 キャッシュとは無関係(権威データの複製) 多くの場合キャッシュと組み合わせて使用される
データの永続性 転送されたデータは通常ディスクに保存される 転送されたクエリ結果は一時的にキャッシュされることがある

まとめ

DNSによるゾーン転送を解説しました。
DNSサーバは、インターネット通信のおける基礎となるため、単一のサーバで動かすことはまずありません。

基本的に複数のサーバで冗長化して、サーバ障害時も名前解決が継続できるように作るのが定石です。

この冗長化において、DNSゾーン転送は主要技術となります。

インフラエンジニアとして、DNSサーバの冗長構成が組めるようにしっかりと仕組みを理解しておきましょう。