インターネットにつながらないクローズドなシステムで、毎日0時に謎のエラーが発生するようになりました。
RHELのsyslogには以下のようにエラーメッセージが出力されていました。
query failed (SERVFAIL) for xxx.xxx.xxx/IN/A at ../../../bin/named/query.c:7630
query failed (SERVFAIL) for xxx.xxx.xxx/IN/ANY at ../../../bin/named/query.c:7038
ログの重要度は「Information」で出ていたため、ログ監視では気づかなったのですが、syslogサイズが肥大化しており、ディスクの容量監視に引っかかりました。
ログからDNSのクエリログだとはわかったのですが、もう何年も運用しているシステムであり、何故今頃容量監視に引っかかったのか疑問でした。
過去のsyslogを追っていくと、ある時を境に出力されるようになっていることがわかりました。
BINDのバージョンを9.9から9.11に上げたタイミングであり、その作業が原因でした。
BIND9.11からは仕様変更によって「query failedメッセージがsyslogに出力されるようになったようです。
この点は、RedHatのナレッジに公開されてます。
Updating bind package triggers named to give SERVFAIL error at severity info.
https://access.redhat.com/solutions/5278061
ナレッジにも記載がありますが、メッセージ出力を止めたいのであれば、named.confに以下を追加すれば良いです。
category query-errors {
null;
};
上記定義を入れて、BINDを再起動すれば、メッセージ出力は止まりました。
ただ、ログメッセージの「xxx.xxx.xxx」の部分が名前解決対象のFQDNですが、かなりの数の通信がインターネットに出ていこうとしており、DNSサーバーでエラーとなって止められているというのが現状です。
別にDNSサーバーの負荷が上がっているわけでもないので、何の弊害もないなら良いじゃない。
と、したいところです。