MASUDAQ Blog

NO DEVELOPMENT NO LIFE.

Windows 2008 R2 DNS サーバーのエラー 其の二

前回、以下のようなイベントが出力されている問題について記載した。

イベント ソース: DNS イベント ID: 5504 DNS サーバーは、xx.xx.xx.xx からのパケットに無効なドメイン名を検出しました。パケットは拒否されます。イベント データに DNS パケットが含まれています。
前回は、このイベントが情報として出力されているので、大きな問題ではなく、精神衛生上の問題と考えていた。
しかしながら、評価環境の検証をすすめてゆくうちにこれが、想像を超えた大きな問題であることが発覚した。
このイベントが発生した時には、DNS での名前解決に失敗していることがわかったのだ。評価環境では、プライマリ DNS を Windows Server 2008 R2 で構築し、セカンダリ DNS をルータの DNS 機能を利用している。ここで、DNS クライアントは、プライマリ DNS での名前解決に失敗しても、セカンダリ DNS での名前解決で成功していたため、問題を見過ごしてしまっていた。非常に情けないことだ。
さらに構成として問題はあることは分かっていたが、Windows Server 2008 R で構築した DNS のフォワード先をルーターに設定していた。つまり、DNS クライアントからプライマリ DNS、セカンダリ DNS のそれぞれの動線を考えると、以下のようになる。

プライマリ DNS 参照時: DNS クライアント -> Windows Server 2008 R2 DNS -> ルーター DNS -> 上位 DNS
セカンダリ DNS 参照時: DNS クライアント -> ルーター DNS -> 上位 DNS

どちらの場合も、フォワードで、ルータ DNS を経由するため、Windows Server 2008 R2 DNS -> ルーター DNS 間でフォワードに失敗していれば、DNS クライアント -> ルーター DNS での名前解決も失敗するに違いないと考えてしまっていた。フォワードと、名前解決のプロトコルは、異なるものなのに、これらを混同してしまっていた。ポンコツ技術者の典型だ。

結局、この問題の解決方法だが、直結する KB を見つけることができなかった。

実証は行っていないが、以下のスレッドが解決に役立つだろうと考えている。

DNS event 5504 - server encountered an invalid domain name in a packet

このスレッドでは、やはり、DNAME レコードに起因する問題だとみてとれる。解決方法は、以下の KB 19840 にあるように、DisableAutoReverseZones キーが存在すれば、明示的に 0 に設定すべきとある。KB の対象は、NT 4 ではあるが。。。

Microsoft DNS サーバーのレジストリ パラメーター、パート 3/3

現時点の調査では、これが確からしいとは思うが、論理的に理解をしていないため、実証を行っていない。現在、DNS の DNAME レコードの仕様を解釈中だ。
調査の進展、実証の機会があれば、また、ログをアップしよう。

このエントリーをはてなブックマークに追加