Windowsネットワークでの静的な名前解決の手段には「hosts」と「lmhosts」という2種類のファイルがある。hostsはTCP/IPの一般的な名前解決の手段の1つで、NBT系のサービスでも利用されている。lmhostsは、主にNetBIOS名とIPアドレスの対応付けに利用されている。
対象OS:Windows NT/Windows 2000/Windows XP/Windows Server 2003
Windowsネットワークで利用されるプロトコルには、大きく分けてNetBIOS系のプロトコルと、TCP/IP系のプロトコルがあり、その目的に応じて使い分けられている。もともとこれらのプロトコルはまったく別のものであり、Windows OSに附属するコマンドは主にNetBIOS系(SMBやMS-RPCなどを含む)で動作するように作られているものが多かったが(コマンドの操作対象として「\\サーバ名」という形式の指定をするものは、NetBIOS系のことが多い)、現在では両者は巧みに組み合わされ、ユーザーはその違いをほとんど意識することなく利用することができるようになっている。だが、細部ではいくらかの違いがあり、ネットワークの管理をする場合にはその違いを知っておく必要がある。本TIPSでは、静的な名前解決に使われる、hostsファイルとlmhostsファイルの違いについて解説しておく。
Windowsネットワーク環境では、コンピュータ名(ホスト名)と実際のコンピュータを対応付けるために、「名前解決」という機能が使われる。これは、例えばserver1.example.comというコンピュータ名を指定すると、これに対応するコンピュータのIPアドレスやNetBIOSのノード名を求め、通信相手のコンピュータを「特定」するための機能である。
実際の名前解決では、さまざなプロトコルや手法が組み合わされて実現されている。具体的には、NetBIOS名のブロードキャスト、DNSサービス、WINSサービス、NetBIOS名前キャッシュ、DNS名前キャッシュ、hostsファイル、lmhostsファイルなどがあり、あらかじめ決められた優先順位に基づいて、順番に各機能が利用されている(実際の優先順位はOSやネットワークの設定によって変わるので、ここでは触れない)。このうち、DNSやWINSは動的な名前解決機能であり、hostsファイルやlmhostsファイルは静的な名前解決機能に分類できる。初期のネットワークでは、静的な名前解決手段が使われていたが、現在の大規模化・高度化したネットワークでは、ネットワークの構成が絶えず変化するため、動的な名前解決手段が使われるのが普通である。だが、例外的なコンピュータやネットワークを定義したり(例:DNSに正式に登録されていないようなローカルなコンピュータを定義したり、リモートのLANへアクセスするなど)、一時的にしか使用しないものを実験的に登録してみるには、静的ファイルを使うのが簡単でよい。このために利用できるのが、hostsファイルやlmhostsファイルによる、コンピュータ名の定義である。
hostsファイルは、もともとはTCP/IP系のネットワークで利用されていた、IPアドレスとコンピュータ名の対応付けのための定義ファイルである。具体的には以下のような形式のテキストファイルである。Windows NT/Windows 2000/Windows XP/Windows Server 2003系のOSでは、デフォルトでは「%windir%\system32\drivers\etc」フォルダ中に格納することになっている。
※hostsファイルの例
# This file contains the mappings of IP addresses to host names.
127.0.0.1 localhost loghost
#
192.168.1.21 server1 server1.example.com
192.168.1.22 server2
192.168.1.23 server3
各行が1つのIPアドレスとその名前を定義している。左端にIPアドレスを書き、その右側は、ホスト名を記述するが、ホスト名を複数記述することもできる。また、#はコメントを表し、#より右側はすべて無視されることになっている。
lmhosts(LMHOSTS)ファイルの「lm」とは「LAN Manager(Windowsネットワークの前身となる製品)」の略であり、hostsファイルと同様の形式で、NetBIOS系のコンピュータ(正確にはNetBIOS over TCP/IPプロトコルを利用するコンピュータ。必ずIPアドレスが割り当てられている)を記述できるようにしたものである。やはりデフォルトでは「%windir%\system32\drivers\etc」フォルダ中に格納することになっている(サンプルとして、同フォルダにはlmhosts.samというファイルが用意されているので、参考にするとよい)。
※lmhostsファイルの例
192.168.1.31 fileserver1 #PRE #DOM:EXAMPLEDOM
192.168.1.32 fileserver2 #PRE #DOM:EXAMPLEDOM
192.168.1.33 fileserver3 #PRE
hostsファイルと比べると、#PREとか#DOM:<ドメイン名>といった特別なキーワードが追加されている点が異なる。これらは、NetBIOSキャッシュへのプリロードと、ドメイン・コントローラの指定である。
hostsとlmhostsは似ているが、その目的や出自が異なるため、lmhostsと比べるといくらかの違いがある。ここでは、hostsファイルでのみ利用可能な機能について解説しておく。
■コンピュータ名に対して別名を定義する
TCP/IPでは、通信は最終的にはIPアドレスでのみ行われるため、極端にいうと、どのようなコンピュータ名が付けられていてもよい。そのためサンプルのhostsファイルを見ると分かるように、localhostとかloghostといった、本来のコンピュータ名とは異なる名前を定義付けてもよい(NetBIOSでは、自身のコンピュータ名と異なる名前でアクセスしようとするとエラーとなる場合がある)。ちなみにlocalhostとは、TCP/IPネットワークにおいて自分自身を指す場合に一般的に使われる名前である。
■1つのIPアドレスに対して複数の名前を定義する
上の例から分かるように、1つのIPアドレスに対して、複数のコンピュータ名を定義することができる。ただし手元のWindows XPマシンでは最大9つまで定義することが可能であったが(各名前の間は空白かタブ記号で区切る)、古いTCP/IPの実装では3つまでしか認識しないものもあるので、注意していただきたい。
■FQDN名を定義する
例にあるserver1.example.comのように、hostsファイル中では、FQDN名を定義することもできる。一般的には、ドメイン名を含まないシンプルなコンピュータ名と、FQDN名の両方を記述しておくとよいだろう(部分一致ではなく、完全一致でのみ検索されるため)。
■16文字以上の長いコンピュータ名を定義する
NetBIOS名は最大15文字しか定義できないが、このhostsで定義する場合は、(DNSでの定義と同様に)16文字以上の長いコンピュータ名(もしくはFQDN名)を定義することができる。
lmhostsは、もともとはNBT(NetBIOS over TCP/IP)名を定義するために(hostsファイルをベースに)作られたものであり、NetBIOS名のブロードキャストによる名前解決を補佐するための機能を持っている。lmhostsでしか利用できない機能としては、次のようなものがある。
■NBT名を定義する
このファイルに記述された名前は、NetBIOS名前解決において利用される。NetBIOSを使ったネットワーク・サービスでのみ利用されるので、例えばリモートのネットワーク上にある(Windows OS+NBTベースの)ファイル・サーバへアクセスするためには、このlmhostsファイルを使って定義しておくとよい(動的な名前解決サービスを利用したければ、lmhostsの代わりにWINSサーバを利用する)。
■NetBIOSの名前タイプを指定する
NetBIOS名には、ドメイン名やユーザー名、コンピュータ名などといった、いくつかの属性が含まれている。この属性は、NetBIOS名の16byte目を使っているが、lmhostsではこの特別な属性も記述することができる。また、#DOMや#INCLUDEなどのキーワードを使って、特別な処理を行わせることもできる。
■NetBIOSキャッシュへのプリロードを行う
定義行の最後に「#PRE」を付けておくと、NetBIOSキャッシュに最初にロードされるため、NetBIOSの名前解決ブロードキャストなどが抑えられ、ネットワーク全体のトラフィックを抑えることができる。
■WINSサーバに静的エントリとして取り込むことができる
WINSサービスは、NetBIOS名前解決を動的/集中的に行うための機能であるが、WINSサーバではlmhostsファイルを取り込んで、静的な定義を素早く行うことができる。
■関連記事(Windows Server Insider)
■関連リンク
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.