WindowsでLMHOSTSファイルの更新を即座に反映させる方法Tech TIPS

LMHOSTSファイルを作成すると、WINSサーバなしでNetBIOS向けの名前解決が可能になる。ただLMHOSTSファイルの変更を反映させるには、通常ならコンピュータの再起動が必要になる。しかし、nbtstatコマンドを使用すると、再起動せずに変更結果を即座に反映できる。

» 2002年12月21日 05時00分 公開
[井上孝司]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows 95 / Windows 98 / Windows 98 SE / Windows Me / Windows NT / Windows 2000 Professional / Windows XP Professional / Windows XP Home Edition / Windows 2000 Server / Windows 2000 Advanced Server



解説

 通常、TCP/IPを使用する通信で名前解決を行うには、DNS(Domain Name System)、あるいはWINS(Windows Internet Name Service)といったサーバを設置して、名前解決を担当させる。DNSはActive Directoryドメインやインターネットで用いられている名前解決のシステムであり、WINSはWindows 9x/Me/NTといった、NetBIOS対応のオペレーティング・システムで用いられる名前解決のシステムである。

 しかし、小規模なネットワークでは、PCの台数などの関係で、常時稼働するWINSサーバを設置するのが困難な場合がある。実際には、NetBIOSでは、WINSサーバを使用できない場合にはブロードキャストによる名前解決を試みるようになっているので、単一のサブネットで構成されたLANなら支障はないともいえるが、ブロードキャストが多発するとネットワークの性能に影響するので、あまり好ましい方法とはいえない。

 また通常、ブロードキャスト・パケットはルータを越えられないので、ルータで分割された別のサブネットに対する名前解決をブロードキャスト方式で行うことはできない。

 こうした場合の対処方法として、個々のコンピュータに固定IPアドレスを割り当てた上で、LMHOSTSファイルを作成する方法がある。LMHOSTSファイルはテキスト・ファイルで、IPアドレスとコンピュータ名の対応が記述されている。

 LMHOSTSファイルの保存場所は、Windows 2000/XPでは%SystemRoot%\SYSTEM32\Drivers\etcフォルダ、Windows 9x/MeではWindowsのインストール・フォルダ(デフォルトではC:\Windows)となっている。ファイル名は「LMHOSTS」で、拡張子が付かない点に注意したい(同じフォルダに、LMHOSTS.SAMというサンプル・ファイルがあるので、これを参考にLMHOSTSファイルを作成するとよい)。

 以下に、実際に使用されているLMHOSTSファイルの内容例を示す。

192.168.0.1 HEKATE   #PRE #DOM:OLYMPUS
192.168.0.2 HESTIA   #PRE #DOM:OLYMPUS
192.168.0.3 ARTEMIS  #PRE #DOM:OLYMPUS
192.168.0.4 ATHENA   #PRE #DOM:OLYMPUS
192.168.0.5 ASTERIA  #PRE #DOM:OLYMPUS
192.168.0.6 HELIOS   #PRE #DOM:OLYMPUS
192.168.0.7 HERCULES #PRE #DOM:OLYMPUS
192.168.0.8 SELENE   #PRE #DOM:OLYMPUS

実際に、筆者宅で使用されているLMHOSTSファイルの例
左端から順に、IPアドレス、コンピュータ名、そのほかのオプション指定、といった順で項目が並び、それぞれの項目はスペースかタブで区切られる。

 これらのうち、必ず記述しなければならないのは、IPアドレスとコンピュータ名の指定だけだ。「#PRE」は、LMHOSTSファイルの内容をメモリ上にキャッシュすることで名前解決を迅速に行うためのもの(PREは、事前にロードしておくという意味のpreloadの略)、「#DOM」は、NTドメイン、あるいはActive DirectoryドメインのNetBIOS名を指定するものであり、これらは必要に応じて記述すればよい(例にあるとおり、ドメイン名は「#DOM:」に続けて、空白を入れずに指定する)。

 筆者の自宅のようにコンピュータの台数が少ない環境では、IPアドレスを重複しないように手作業で管理するのは容易なので、LMHOSTSファイルを用いた名前解決にも、それなりの有用性はある。もしコンピュータ名やIPアドレスの割り当てに変更があった場合でも、すべてのコンピュータにLMHOSTSファイルを再配布すれば済む。

 LMHOSTSファイルを使った名前解決は、ブロードキャストによる名前解決と異なり、ルータをまたいだ別のサブネットに存在するコンピュータに対しても名前解決を行える。この点が、ネットワーク構成によっては便利と感じられるかもしれない。一般的には、ルータとWANを介した別の拠点にしかWINSサーバが存在しない場合のように、手元のLANにWINSサーバがなく、かつLANが小規模で専用のWINSサーバを設置するのが困難な場合などに、LMHOSTSファイルが使用されることが多い。

 なお、Windows NT/2000/XPでは、TCP/IPのプロパティ設定として、LMHOSTSファイルの参照を明示的に指定できる(必ず参照したり、参照しないようにしたり指定できる)。TCP/IPのプロパティ設定画面で[詳細設定]をクリックすると表示されるダイアログのうち、[WINS]タブに、NBT(NetBIOS over TCP/IP)関連の設定と併せて、LMHOSTSファイルに関する設定項目が存在する。

 一方、Windows 9x/Meでは、LMHOSTSファイルを自動的に参照するので、明示的に参照を無効にすることはできない。

TCP/IPプロパティの[詳細設定]ダイアログにある[WINS]タブ(Windows XPの例) TCP/IPプロパティの[詳細設定]ダイアログにある[WINS]タブ(Windows XPの例)
ここでは、NBT(NetBIOS over TCP/IP)関連の設定に加えて、LMHOSTSファイルに関連する設定もできる。既定値では、LMHOSTSファイルの内容を参照して名前解決を行うようになっている。
  (1)このチェック・ボックスをオンにすると、LMHOSTSファイルを参照するようになる。
  (2)ここをクリックすると、既定の場所以外にあるLMHOSTSファイルの内容がインポートされ、同じ内容のLMHOSTSファイルがローカル・ディスク内に作成される。フロッピーディスクでLMHOSTSファイルを配布する際に使用すると便利。
  (3)NBTの有効/無効を指定するオプション・ボタン群。NBTを無効にしていても、LMHOSTSファイルやWINSサーバで名前解決が可能なら、NetBIOS名によるコンピュータの指定は可能である。

 なお、NBTクライアントが使用する名前解決手段の優先順位は、次のようになっている(上の方から順番に試行される)*1

  1. NetBIOS名前キャッシュの検索
  2. WINSサーバに対してクエリ
  3. NetBIOSブロードキャストでクエリ
  4. LMHOSTSファイルを参照
  5. hostsファイルを参照
  6. DNSサーバに対してクエリ

*1 これは、NetBIOSの名前解決順序を示す「ノード・タイプ」が「H(Hybrid)」の場合の優先順位。ノード・タイプには、このほかに、P(Peer)、M(Mixed)、B(Broadcast)がある。各タイプに応じて、2と3の順序が入れ替わったり、どちらかが省略されたりする。ノード・タイプについては、サポート技術情報の「Microsoft クライアントのデフォルトのノード タイプ」などを参照。Windows NT/2000/XPでは、デフォルトではHybridノード・タイプか(WINSサーバが指定されている場合)、Broadcastノード・タイプ(WNSサーバが指定されていない場合)が利用される。


 1度解決された名前はNetBIOS名前キャッシュに入れられ、一定時間キャッシュ中に保持される。そのため、次回からは高速に検索できることになる。またLMHOSTSファイルで「#PRE」指定を行ったエントリは、システムの起動時にあらかじめキャッシュにロードされるので、やはり高速に検索することができる(現在のNetBIOS名前キャッシュの状態は「nbtstat -c」コマンドで確認できる)。

 つまり、LMHOSTSファイルで「#PRE」指定を行う場合と行わない場合とで、名前解決手段の優先順位が異なる。「#PRE」指定がある場合はLMHOSTSファイルが最優先されるが、ない場合はWINSサーバ、それが利用できなければブロードキャストが使用される。

 このため、LMHOSTSファイルの内容によっては、せっかくLMHOSTSファイルで指定しても、その情報による名前解決が行われず、ブロードキャストによって処理されてしまうなどの可能性がある。また、LMHOSTSファイルの内容とWINSサーバの内容に矛盾が生じた場合、間違った名前解決が行われ、トラブルが発生する可能性もある。

 LMHOSTSファイルを使用する場合の問題は、LMHOSTSファイルの内容がWindowsの起動時に読み込まれた状態のままになるため、コンピュータの動作中にLMHOSTSファイルを更新しても、リアルタイムに変更が反映されない点にある。もちろん、コンピュータを再起動すれば設定は反映されるが、作業中のファイルがあった場合には、その場で再起動を要求するのは難しい、ということもあり得るだろう。

 そこで、nbtstatコマンドを使用する。

 本来、このコマンドはNBTの状態チェックに使われるツールだが、引数に「-R」と指定すると、その場でLMHOSTSファイルの再読み込みを実行してくれる。これにより、コンピュータの再起動なしに、最新状態のLMHOSTSファイルを反映させた名前解決が可能になる。

操作方法

 以下の手順により、コンピュータの再起動なしにLMHOSTSファイルの変更結果を反映させることができる。

  1. まず、IPアドレスとコンピュータ名の状態に合わせてLMHOSTSファイルを修正、あるいは作成し、それぞれのコンピュータの適切なフォルダにコピーする。コピー先のフォルダは、すでに説明したように、Windows NT/2000/XPとWindows 9x/Meで異なる点に注意されたい。
  2. 次に、コンピュータ名やIPアドレスの設定を、新しい状態に変更する。設定変更を後回しにしているのは、LMHOSTSファイルをLAN経由で配布する場合を考慮したためである。もし、先にコンピュータ名やIPアドレスを変更してしまうと、場合によっては通信不可能なコンピュータが出現し、LAN経由の配布ができなくなるからだ。
  3. 最後に、コマンドプロンプトを起動して「nbtstat -R」と入力すると、更新されたLMHOSTSファイルの内容が読み込まれ、名前解決に使われるようになる。このとき、「Successful purge and preload of the NBT Remote Cache Name Table.」というメッセージが表示される。

■関連リンク


「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。