NBTを止めてLLMNRのみ有効にする
LLMNRについて
LLMNRはWindowsの新しい名前解決のための機能です。Windowsの名前解決といえば、今まではNBT (NetBIOS over TCP/IP)が広く使用されてきましたが、古い技術であり様々な問題を抱え込んでいる状態なので、それに代わる新しい技術としてLLMNRが登場しました。LLMNRについては以下の記事が詳しいです。
これより下は、筆者の実環境での運用も交えて、NBTを排してLLMNRで運用する際の手順です。
PC2台のみのLANにしてみる
まずはこちらの図をご覧ください。 PC2台がスイッチを通りして接続されている、極めてシンプルなLAN構成図です。PCは両方ともWindows 10で、それぞれIPアドレスとホスト名が割り振られています。スイッチはルータ機能が無いスイッチングハブとします。
この状態でPC2台はお互いに通信ができるでしょうか。PC1からPC2に向けてIPアドレスにてpingコマンドで確かめてみます。
> ping 192.168.1.16 192.168.1.16 に ping を送信しています 32 バイトのデータ: 192.168.1.16 からの応答: バイト数 =32 時間 <1ms TTL=128 192.168.1.16 からの応答: バイト数 =32 時間 <1ms TTL=128 192.168.1.16 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.16 からの応答: バイト数 =32 時間 <1ms TTL=128 192.168.1.16 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 1ms、平均 = 0ms
問題なく応答が返ってきます。
では、ホスト名を指定してのpingはどうでしょうか。
> ping PC2 PC2 [192.168.1.16]に ping を送信しています 32 バイトのデータ: 192.168.1.16 からの応答: バイト数 =32 時間 <1ms TTL=128 192.168.1.16 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.16 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.16 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.16 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 1ms、平均 = 0ms
同じようにpingは成功します。
TCP/IPネットワークの場合、IPアドレスからホスト名を解決するには通常はDNSサーバが使用されます。しかし、上記の構成のLANにはDNSサーバが存在しないにも関わらず、なぜか名前解決ができています。どのような仕組みなのでしょうか。
NBTとLLMNR
答えは、最近のWindowsはDNSサーバが存在しなくてもLAN内の名前解決を行うための仕組みが働いているからです。それがNBTとLLMNRです。
実は、NBTとLLMNRは同じことをする機能です。ともにリソース名をIPアドレスに変換、つまり名前解決という機能を受け持ち、機能的に重複しています。ちなみにリソース名はホスト名と同義と思ってください。ではなぜ重複するものが両方とも動いているのかというと、Windowsのこれまでの歴史的経緯が関係しています。下の図をご覧ください。 NBTは従来から存在する機能で、Windows XPの頃まで使用されていました。いわばレトロな技術です。対してLLMNRはWindows Vista以後のWindowsに搭載された新たな仕組み、いわばこれからの技術です。ただし互換性のため、Windows 10などの現行のWindowsにおいてもNBTはまだ残されていて、デフォルトでオンになっています。そのため機能が重複しつつも両方が動いているわけです。
Windows XPなどの古いPCが残ってる環境ならばNBTを動かしておいても良いですが、筆者の環境ではもはやそのような古いPCはないし、何より同じ機能を持つものが複数動いているのはリソースの無駄ではないか。そのように考え、NBTを無効にすることにしました。
NBTの無効化とLLMNRの単独使用
具体的には「設定」から操作します。かなり深い階層ですが、以下の手順です。
設定 -> ネットワークとインターネット -> アダプターのオプションを変更する -> 街頭するアダプターを選択 -> この接続の設定を変更する -> インターネット プロトコル バージョン 4(TCP/IPv4)を選択 -> プロパティ(R) -> 全般 -> 詳細設定(V) -> WINS -> NetBIOS設定 -> NetBIOS over TCP/IP を無効にする(S) 以上でNBTは無効になり、LLMNRのみが有効になった状態となります。
しかし、問題が・・
エクスプローラを開き、繋がっていれば見えるであろうPC2が「ネットワーク」に出てきません。 おかしいと思い、直接「¥¥PC2」(¥は半角)と入力してみると・・ ちゃんとアクセスできます。つまり、ネットワークのコンピュータ一覧では見えないけれども、それは見えないだけでLAN上には存在しているということです。
原因は何かということですが、Windowsネットワークの新旧の図をよくよく見ると、NBTは名前解決の他にブラウジングという機能も合わせて持っています。このブラウジングがコンピュータ一覧のリスト生成に深く関わっているらしく、対してLLMNRはこのブラウジング機能は持ち合わせていないため、「ネットワーク」に表示されない現象につながっています。
Windows 10をはじめとする新しいWindowsは、このブラウジング機能については「LLTD」という新しい仕組みが用意されています。こちらを何とかすることができればコンピュータ一覧が正常に表示されるようになると思われますが、この話題についてはまた別の機会にします。
まとめ
LLMNRとは以下のような特徴をもっています。