9/25/2017

[note] Windowsの名前解決失敗によるブロードキャスト連発を止める方法について

今月に入って、ふとローカルのサーバの通信を覗いて見たら、大量の無意味なアクセスが延々と、それこそ常時トライし続けるような感じでされていたんです。毎分数件以上のペースで。

別に攻撃とかいうわけではありません。というのも、送信元はこれまたローカルのPCで、かつポートが5355のみ、すなわちブロードキャストを繰り返しているだけなのは明らかだったからです。言い換えれば、名前解決に延々と失敗して、それでもトライし続けている、という状況だったのですね。

何故そんな状態になったのかは、当該ポート周りの通信は特にログを取っていなかった事もあって、よく分かりません。 少なくとも数ヶ月前に通信周りをチェックした時には起こっていなかった筈なのですが、何かUpdateに伴って挙動が変りでもしたのでしょうか。うーん。やはり分かりません。

考えても分からない原因はともかくとして、この種の多分に無駄な通信というのは、気づいてしまうと鬱陶しく感じるものです。例え、ブロードキャストの通信量がたかが知れていると分かっていても。ちなみに当該アクセスは、IPv4だけでなく、IPv6経由のものもありました。鬱陶しさもログの無駄も倍増です。というわけで、さっさと対処してしまう事にしました。以下はそのメモです。

まず対処に必要な範囲での原因の究明。このブロードキャストは、224.0.0.252宛にポート5355(UDP)で発せられていました。名前解決でこれらのポート等を用いているのは、Windows OS上、NetBIOSの中で当該処理を担当しているLLMNR(Link-Local Multicast Name Resolution)プロトコルです。で、名前解決の際にこういう繰り返し処理が起こる原因としては、名前解決をしたい相手方が応答しない場合や、応答しても名前がNetBIOSの規格に合わず、そのため解決に失敗する場合等が有り得るわけです。

この推測が大体外れていないだろう、と仮定すると、その対処方法は大きく2通りあります。1つは、相手方、すなわちサーバ等がLLMNRの名前解決に正常に応答するように修正する方法で、もう1つはそもそもLLMNRを止めてしまう方法です。

今回は以前の状態に戻すべく、まず前者を試してみたのですけれども、何故そのような状態になっているのか、その細かい原因がはっきりしていないこともあって、上手く行きませんでした。dnsの設定でもLLMNRはONになっているし、ネットワーク上は問題ない筈ですから、名前自体に問題があった、という事なのかもしれません。といって、その名前は以前から使用して来ていたもので、何故今になって問題になったのか、という点でこれもやはり今ひとつ納得行かないのですけれども。

なので、後者すなわち送信元のPC側でLLMNRを止めてしまう方法で対処する事に。具体的には、レジストリにregedit等を用いて以下のキー及びプロパティを追加します。

[レジストリ場所] HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient
[値の名前] EnableMulticast
[値の型] REG_DWORD (DWORD 32ビット)
[値] 0

なお、対象のPC(アクセス元)のOSはWindows10でしたが、場所の内、キーの部分、すなわちDNSClientはデフォルトでは存在していません。なので、手順としては、・・・\Windows NTの下にまず[DNSClient]の名前でキーを作成し、その上でその中に[EnableMulticast]のValueを追加する、という事になります。

追加設定を終えたら再起動。すると、延々と垂れ流しになっていたポート5355のアクセスがぱったりと止みました。めでたし。

しかし、この辺はその普及の度合いの割に中身の挙動、またその制御等の方法があまり周知されておらず、今回のように怪しい挙動をした時に、対処をしようにもどうすればいいのか調査の段階から手間がかかるのには困ったものです。Windows Server等のMicrosoft製品で固めたネットワークならほぼ問題にはならないんでしょうけど、Linux等の他システムと混在し、それらとの連携・調整が必要になる方が明らかに多数なのだから、もう少し何とかならないものかな、と思う次第です。ともあれ、愚痴りつつも今回はこれでおしまい。

なお、同じwindowsでも、7や8.1等、10以外のPCでは特に本件のような現象は起こっていません。何なんでしょうね?