最近、複数の防犯カメラを自宅ネットワークに追加したため、カメラをIPアドレスではなく、名前でアクセスできるよう、自宅内DNSサーバーを編集したところ、その後、名前解決が出来なくなってしまいました。
編集したホスト行だけ動かなくなったかというとそうではなく、全ての名前解決機能が動作しなくなってしまいました。
例えば、こんな具合。
> www.lifewithunix.jp
;; Got SERVFAIL reply from 116.58.172.107
** server can't find www.lifewithunix.jp: SERVFAIL
「can’t find xxxxxx: SERVFAIL」正引きも逆引きも、全部 SERVFAIL となってしまいます。
DNSレコードの編集なんて、年に数回は行う作業なので、なぜ突然こんなことが起きる?と、悩みました。
困った時は、ログファイルを見る!
namedb/log ディレクトリーにある、named.log ファイルの中を見てみると
29-Jun-2024 16:35:43.314 zoneload: zone test/IN: loading from master file /usr/local/etc/namedb/master/empty.db failed: file not found
という感じの行が大量に記録されています。(BINDのバージョンを更新した時からエラーになってたのか?)
namedb ディレクトリ以下を見てみると、あれれ、、、、、master ディレクトリーが無くなって、primary ディレクトリに名称が変わっている。。。。。いつからディレクトリ構成が変わったの?そりゃエラーが出るわ。
named.conf に記述されている「/master/」を「/primary/」に置き換えて、SOA レコードのシリアル番号を更新して、named を再起動。
しかし問題解決しない。
もう一度ログファイルをよくよく見てみると、
general: lifewithunix.zone:134: pc_tapo1.lifewithunix.jp: bad owner name (check-names)
編集したホスト名に「_」アンダーバーが含まれていることが問題でした。
DNSレコードの場合、「-」ハイフンはOKですが、「_」アンダーバーは不可なんでした。(技術文章の場合は、ハイフンは記号として扱われることがあり、アンダーバーの方が文字として扱われるのですが。)
再度、ゾーンと逆引きファイルに含まれていた アンダーバーをハイフンに変え、シリアル番号更新。そして、named を再起動。
これで解決しました。
編集したファイルにアンダーバーを含めてしまったことが原因でした。そこに BINDバージョンアップにともなう ディレクトリツリー構造が変わっていたことが絡んで、原因が大量のエラーログに埋もれてしまい、本当の原因にたどり着くまで時間が掛かってしまいました。