BINDのゾーンファイルを変更したあと、named-checkzoneで構文チェックをすると、次のようなメッセージが表示されることがあります。
zone example.jp/IN: _sip._tls.example.jp/SRV
'server.example.com' (out of zone) has no addresses records (A or AAAA)
zone example.jp/IN: loaded serial 2026091001
OK
最後には、
OK
と表示されています。
しかし、その前に、
out of zone
has no addresses records (A or AAAA)
と出ているため、
「エラーなのか?」
「このままDNSを再読み込みして大丈夫なのか?」
と不安になることがあります。
この記事では、このメッセージが何を意味するのかを説明します。
結論:最後がOKならゾーンファイルの読み込み自体は成功
まず重要なのは最後の部分です。
zone example.jp/IN: loaded serial 2026091001
OK
これは、named-checkzoneがゾーンファイルを読み込み、基本的なチェックに成功したことを示します。
つまり、
out of zone has no addresses records
が表示されたからといって、必ずしも、
ゾーンファイルに致命的なエラー
↓
namedが読み込めない
という意味ではありません。
今回のように最後が、
OK
なら、少なくともゾーンファイル自体はロード可能と判断されています。
ただし、警告の内容が意図した設定なのかは別途確認した方がよいでしょう。
どんな設定で表示されるのか
例えばexample.jpのゾーンファイルに、次のSRVレコードがあったとします。
_sip._tls.example.jp. 3600 IN SRV 100 1 443 sipdir.online.lync.com.
SRVレコードは、
サービス
↓
どのサーバーへ接続するか
を指定するためのDNSレコードです。
例えば、
_sip._tls.example.jp
↓
sipdir.online.lync.com
という形で、SIPサービスの接続先を指定できます。
ここで重要なのが、
example.jp
のゾーンファイルから、
sipdir.online.lync.com
を参照している点です。
「out of zone」とは?
今回チェックしているゾーンは、
example.jp
です。
一方、SRVレコードの参照先は、
sipdir.online.lync.com
です。
当然、
example.jp
とは別のDNSゾーンです。
イメージすると、
今回チェック中
example.jp
│
├─ www.example.jp
├─ mail.example.jp
└─ _sip._tls.example.jp
│
│ SRV
▼
sipdir.online.lync.com
↑
│
別のゾーン
です。
このように、現在チェックしているゾーンの外部にある名前を参照しているため、
out of zone
と表示されます。
つまり、ここでのout of zoneは、
「参照先が現在チェックしているゾーンの外にある」
という意味です。
「has no addresses records (A or AAAA)」とは?
では続く、
has no addresses records (A or AAAA)
とは何でしょうか。
通常、SRVレコードのターゲットとして指定されたホスト名は、最終的にIPアドレスへ名前解決できる必要があります。
例えば、
_sip._tls.example.jp
↓
SRV
↓
sip.example.jp
↓
Aレコード
↓
192.0.2.10
という関係です。
同じゾーン内なら、named-checkzoneはゾーンファイルを見て、
sip.example.jp. IN A 192.0.2.10
が存在するか確認できます。
しかし今回のターゲットは、
sipdir.online.lync.com
です。
これはexample.jpゾーンの外です。
したがって、example.jpのゾーンファイルだけをチェックしても、
sipdir.online.lync.com
↓
A?
AAAA?
という情報を確認できません。
そのため、
(out of zone) has no addresses records (A or AAAA)
というメッセージが表示されることがあります。
外部ドメインをSRVで指定してはいけないの?
いいえ。
SRVレコードのターゲットが別ドメインであること自体は、直ちに異常というわけではありません。
例えばクラウドサービスを利用していると、
自社ドメイン
example.jp
↓ SRV
クラウド事業者
service.provider.example
のような構成はあり得ます。
自分が管理するDNSゾーンから外部サービスのホスト名を参照するわけです。
したがって、
out of zone
という文字だけを見て、
「設定を自社ドメイン内へ変更しなければならない」
と判断する必要はありません。
実際に名前解決できるか確認する
警告が出た場合は、SRVレコードのターゲットが実際に名前解決できるか確認するとよいでしょう。
Linuxなら例えば、
dig sipdir.online.lync.com A
または、
dig sipdir.online.lync.com AAAA
です。
hostが使える環境なら、
host sipdir.online.lync.com
でも確認できます。
Windowsなら、
nslookup sipdir.online.lync.com
などで確認できます。
ポイントは、
named-checkzone
↓
ゾーンファイルとして問題ないか
dig / nslookup
↓
実際に参照先を名前解決できるか
を分けて確認することです。
SRVレコード自体も確認する
ターゲットだけではなく、SRVレコードがDNSから正しく取得できるかも確認します。
Linuxなら、
dig SRV _sip._tls.example.jp
Windowsなら、
nslookup -type=SRV _sip._tls.example.jp
などです。
期待したターゲットが返ってくるか確認します。
例えば、
_sip._tls.example.jp.
3600 IN SRV 100 1 443 sipdir.online.lync.com.
のように返れば、SRVレコードが公開されています。
その後、
SRV
↓
sipdir.online.lync.com
↓
A / AAAA
↓
IPアドレス
まで名前解決できるか確認します。
末尾の「.」にも注意する
DNSゾーンファイルではFQDNの末尾のドットも重要です。
例えば、
sipdir.online.lync.com.
と、
sipdir.online.lync.com
では意味が変わる場合があります。
末尾に.がない名前は、ゾーンファイルの$ORIGINによって補完される可能性があります。
例えば$ORIGINが、
example.jp.
の場合、
sipdir.online.lync.com
と書いたつもりが意図しない名前として扱われる可能性があります。
外部のFQDNを指定するときは、
sipdir.online.lync.com.
のように末尾のドットまで含めているか確認しておくとよいでしょう。
named-checkzoneがOKなら何でも問題ないわけではない
ここは重要です。
named-checkzone
↓
OK
だからといって、
DNSサービスとして完全に正常
という意味ではありません。
named-checkzoneで確認できるのは主にゾーンファイルについてです。
例えば、
named-checkzone → OK
でも
・想定したレコードを書き間違えている
・参照先が実際には名前解決できない
・namedへ変更を反映していない
・別のDNSサーバーを問い合わせている
・ゾーン転送されていない
などは別問題です。
したがって変更後は、
ゾーンファイル編集
↓
named-checkzone
↓
OK
↓
設定反映
↓
dig / nslookup
↓
実際の応答を確認
まで実施するのがおすすめです。
DNS変更時に私なら確認する順番
例えばゾーンファイルを変更した場合、次の順番で確認します。
① named-checkzone
↓
② serialが更新されているか
↓
③ namedへ設定を反映
↓
④ digで対象レコード確認
↓
⑤ SRVならターゲットも名前解決
↓
⑥ セカンダリDNSがあるなら
ゾーン転送・serial確認
特に、
named-checkzone OK
だけ確認して作業終了にしないことが重要です。
今回のメッセージを整理すると
例えば、
zone example.jp/IN:
_sip._tls.example.jp/SRV
'sipdir.online.lync.com'
(out of zone) has no addresses records (A or AAAA)
zone example.jp/IN:
loaded serial 2026091001
OK
だった場合、
SRVターゲット
sipdir.online.lync.com
↓
example.jpの外部
↓
out of zone
↓
このゾーンファイル内では
A/AAAAを確認できない
一方
example.jpゾーン
↓
ロード成功
↓
OK
と考えると分かりやすいでしょう。
まとめ
named-checkzoneで、
(out of zone) has no addresses records (A or AAAA)
と表示されても、最後が、
loaded serial ...
OK
なら、ゾーンファイルのロード自体は成功しています。
out of zoneは、SRVなどで指定したターゲットが現在チェックしているDNSゾーンの外にあることを示しています。
ただし、
OKだから終了
ではなく、
named-checkzone
↓
OK
↓
SRVレコード確認
↓
ターゲットのA/AAAA確認
↓
実際の名前解決確認
まで行うと安心です。
特にDNSトラブルでは、
「設定ファイルとして正しい」ことと「実際に期待どおり名前解決できる」ことは別
と考えて切り分けることが重要です。


コメント