ゾーン転送が失敗する原因とは?AXFR・IXFRトラブルの確認ポイントを解説

AXFR・IXFRトラブル

ゾーン転送が失敗する原因

DNSサーバを冗長化する際、プライマリDNS(マスターDNS)とセカンダリーDNS(スレーブDNS)を構成することは一般的です。

そして、その構成を支える重要な仕組みがゾーン転送です。

しかし実際の運用では、「セカンダリーDNSへ反映されない」「SOAシリアルが更新されない」といったトラブルが頻繁に発生します。

これらの多くはゾーン転送設定の問題です。

本記事ではAXFR・IXFRの仕組みから、ゾーン転送失敗時の確認ポイントまで実務目線で解説します。

ゾーン転送とは

ゾーン転送とは、プライマリDNSからセカンダリーDNSへゾーン情報をコピーする仕組みです。

DNSサーバの冗長化に欠かせません。


Primary DNS
↓
Zone Transfer
↓
Secondary DNS

この仕組みによって複数のDNSサーバが同じ情報を保持できます。

なぜ必要なのか

DNSサーバが1台だけの場合です。


DNS停止
↓
名前解決不可

セカンダリーDNSが存在すればサービス継続が可能です。

AXFRとは

AXFR(Full Zone Transfer)はゾーン全体を転送する方式です。


example.com
↓
全レコード転送

初回同期時に利用されます。

IXFRとは

IXFR(Incremental Zone Transfer)は差分転送です。


変更箇所のみ転送

ネットワーク負荷を削減できます。

ゾーン転送の流れ

一般的な処理です。


Primary DNS
↓
SOA確認
↓
シリアル比較
↓
転送開始
↓
同期完了

シリアル番号が重要な役割を持っています。

SOAシリアル番号とは

ゾーン更新番号です。


2026060901

変更時には増加させる必要があります。

最も多い原因① シリアル番号更新忘れ

実務で最も多いトラブルです。

ゾーンを変更します。


www IN A 192.168.60.20
↓
www IN A 192.168.60.50

しかしSOAシリアルを変更していません。

セカンダリーDNSは更新を認識できません。

確認方法

$ dig @ns1.example.com SOA example.com

$ dig @ns2.example.com SOA example.com

シリアル番号を比較します。

最も多い原因② allow-transfer未設定

BINDでは明示的に許可する必要があります。

allow-transfer {
    192.168.60.11;
};

設定が無い場合は転送拒否されます。

ログ例


transfer denied

典型的なエラーです。

最も多い原因③ IPアドレス誤り

allow-transferに誤ったIPを登録しています。

allow-transfer {
    192.168.60.12;
};

実際のセカンダリーDNSは別IPです。

最も多い原因④ ファイアウォール

TCP53が閉じている場合です。

DNS問い合わせはUDP53が有名ですが、ゾーン転送はTCP53を利用します。

確認方法

$ firewall-cmd --list-services

DNS通信が許可されているか確認します。

TCP53確認

$ ss -ltn | grep :53

TCP53待受を確認します。

最も多い原因⑤ セカンダリー設定ミス

slave設定を確認します。

zone "example.com" {
    type slave;

    masters {
        192.168.60.10;
    };

    file "slaves/example.com.zone";
};

masters指定が正しいか確認します。

最も多い原因⑥ notify未送信

BINDは通常NOTIFYを送信します。


Primary DNS
↓
NOTIFY
↓
Secondary DNS

これが失敗すると反映が遅れます。

手動通知

rndc notify example.com

即座に通知できます。

最も多い原因⑦ DNSサーバ停止

セカンダリーDNS自体が停止している場合です。

systemctl status named

双方確認します。

最も多い原因⑧ SELinux制限

Rocky Linuxでは発生することがあります。

確認します。

$ getenforce

監査ログも確認します。

$ ausearch -m avc

ゾーン転送テスト

手動で確認できます。

$ dig @192.168.60.10 example.com AXFR

正常ならゾーン全体が表示されます。

正常な結果


example.com. SOA ...
example.com. NS ...
www A ...
mail A ...

全レコードが表示されます。

拒否された場合


Transfer failed.

allow-transferや通信設定を確認します。

ログ確認方法

プライマリDNSです。

#  journalctl -u named

転送要求を確認できます。

転送成功ログ例


transfer of 'example.com/IN':
AXFR ended

正常に完了しています。

転送失敗ログ例


transfer of 'example.com/IN':
failed

原因調査が必要です。

実務でよくある障害事例

Webサーバ移行時です。


Primary DNS
↓
新IP

Secondary DNS
↓
旧IP

利用者によって接続先が変わります。

シリアル比較が重要

障害調査時は必ず確認します。


dig SOA

最初に見るべき項目です。

実務での確認手順


SOA確認
↓
シリアル比較
↓
allow-transfer確認
↓
TCP53確認
↓
AXFRテスト
↓
ログ確認

この順番で調査すると効率的です。

実務でよくある原因ランキング

  1. シリアル番号更新忘れ
  2. allow-transfer未設定
  3. ファイアウォール設定ミス
  4. masters設定ミス
  5. NOTIFY未送信
  6. DNSサーバ停止
  7. SELinux制限

実務で覚えておきたいポイント

  • ゾーン転送はDNS冗長化の基本
  • AXFRは全転送
  • IXFRは差分転送
  • SOAシリアルが最重要
  • ゾーン転送はTCP53を利用する
  • dig AXFRで確認できる

まとめ

ゾーン転送はプライマリDNSとセカンダリーDNSを同期する重要な仕組みです。

しかし、シリアル番号更新忘れやallow-transfer設定ミスなどにより同期が失敗することがあります。

障害調査ではSOAシリアル比較、AXFRテスト、ログ確認を行うことで原因を特定しやすくなります。

DNS運用では「セカンダリーDNSが本当に最新情報を持っているか」を定期的に確認することが重要です。