Categories

メモ

NetBIOS名

Windowsコンピューター間ではTCP/IPで通信を行う代わりにNetBios名(コンピューター名)を使用しての通信が可能である。IPアドレスはコンピュータが理解する為の情報なので、数字の並びでしかない。それを人間でもわかりやすい別名で通信を可能にしようというものである。Windowsのインストール時に設定(後に変更可能)するコンピューター名がそれである。

8-2、名前解決

Windowsコンピュータに対して、名前を使ってアクセスする際にも、コンピュータ内部ではIPアドレスをもとに処理がなされる。したがってコンピュータ名とIPアドレスを関係付ける機能が必要になる。それが名前解決と呼ばれる機能である。

○NetBIOS名前解決の方法

NetBIOS名前キャッシュ(ローカルコンピューターに一定時間保存されている過去のアクセスによって得た名前解決情報)
WINSサーバー
ブロードキャスト(同一セグメント上のコンピュータ全てに対して名前解決したいコンピュータ名を問い合わせて、該当するコンピュータ自身からIPアドレスの返答が返ってくるのを待つ)
LMHOSTSファイル(IPアドレスとNetBIOS名の組み合わせを記したテキストファイル)
○NBTSTATユーティリィティ

Nbtstat -c:NetBIOS名前キャッシュを表示する

Nbtstat -R:キャッシュを除去する

NetBIOSノードタイプ
名前解決をどの順番で利用するかはノードタイプにより異なる。

Pノード
名前解決にWINSのようなNetBIOSネームサーバーを使う。Pノードはブロードキャストを使わない。ネームサーバーが止まってしまったときは、ローカルのネットワークであっても通信できなくなってしまう。

Bノード
名前解決にブロードキャストを使う。ブロードキャストはネットワークの負荷を増大させることと通常ルーターはブロードキャストをフォワードしないので、ローカルネットワーク上のNetBIOS名だけしか変換できないという問題がある。

Hノード
最初にネームサーバーで名前解決を試み、次にブロードキャストを使う。

Mノード
最初にブロードキャストで名前解決を試み、次にネームサーバーを使う。

どのノードでも最初にNetBIOS名前キャッシュ、最後にLMHOSTファイルを参照する。WindowsのネットワークではBノードとHノードがよく使用される。デフォルトではWINSを使用するように設定されているコンピュータではHノードが、それ以外ではBノードが採用される。

DHCPを使用している場合にはどのノードタイプを使用するかをDHCPサーバー側から指定することができる。DHCPを使用していない場合でも、レジストリを変更することによりノードタイプを自由に設定することが可能である。

8-3、LMHOSTSファイル

Windows 9xでは[\Windows]、Windows NTでは[\systemroot(WINNT)\system32\drivers\etc]フォルダーにlmhost.samというサンプルのファイルがあるので、LMHOSTファイルを使用する場合には、上記のサンプルファイルをノートパッドなどで開いて、名前解決情報を入力する。

LMHOSTSファイルに名前解決情報を入力する際には一行に一つエントリーを入力する。最初にIPアドレス、次に対応するコンピューター名を入力する。IPアドレスとコンピューター名の間には少なくとも1つのスペースをあける。

保存する時に、「lmhost(拡張子なし)」にして、保存場所はサンプルファイルのある場所と同じ場所にする。

ブロードキャスト名前解決
ブロードキャスト名前解決
ルーティングとリモート アクセスを実行するサーバーのブロードキャスト名前解決を有効にすると、リモート アクセス クライアントは、コンピュータのフル ネームと NetBIOS 名、および構成された DNS または WINS サーバーを持たないリモート ネットワーク上のその他のリソースを解決できます。この機能を使用するためにリモート アクセス クライアントを構成する必要はありません。この機能は、リモート アクセス サーバー上で既定で有効になります。

ブロードキャスト名前解決を有効にすると、リモート アクセス サーバーは、NetBIOS over TCP/IP (NetBT) プロキシを使用して次の手順に従って名前を解決します。

1.IP アドレスに対する名前を解決しなければならないリモート アクセス クライアントは、NetBIOS Name Query パケットをすべてのインターフェイスを介してブロードキャストします。

2.リモート アクセス サーバーは、NetBIOS Name Query パケットを受信すると、IP アドレスに対して適切な名前のマッピングがキャッシュされているかどうかを確認します。

•適切なマッピングがある場合、リモート アクセス サーバーは、NetBIOS Name Query Response パケットをリモート アクセス クライアントに送信します。

•適切なマッピングがない場合、リモート アクセス サーバーは、NetBIOS Name Query パケットをすべての LAN インターフェイスにブロードキャストします。名前を解決されるリソースは、NetBIOS Name Query Response パケットをリモート アクセス クライアントに送信します。

リモート アクセス サーバーが、リソースからリモート アクセス クライアントへ NetBIOS Name Query Response パケットをルーティングすると、そのマッピングは、特定の期間、サーバーのキャッシュに残ります。既定の期間は 10 分です。

3.これ以降、リモート アクセス クライアントは、この IP アドレスを使用してリソースにパケットを送信します。

この結果、リモート アクセス クライアントは、同じ LAN 上にリソースがあるかのように、ネットワーク上のリソースの名前を解決できます。

既定では、ブロードキャスト名前解決を使用すると、リモート アクセス クライアントはリモート ネットワーク上の名前を解決できますが、LAN 上のリソースは、リモート アクセス クライアントの名前を解決することはできません。既定では、ブロードキャスト名前解決が有効になっているリモート アクセス サーバーは、インターネットに接続しているインターフェイスに対して NetBIOS Name Query パケットをブロードキャストしません。この動作を変更しない限り、リモート アクセス クライアントは、他のリモート アクセス クライアントの名前を解決できません。平均で 10 以下の接続を持つネットワークの場合、この動作を変更することもできます。

ブロードキャスト名前解決の例
リモート アクセス クライアント A に、小規模なビジネス ネットワーク用のリモート アクセス サーバーへの接続が確立されているとします。このリモート アクセス サーバーには、3 つの LAN インターフェイス (LAN1、LAN2、LAN3) と 1 つの外部インターフェイスがあります。小規模ビジネス ネットワーク上のリソースの 1 つは、ネットワーク プリンタ B で、LAN3 を介してアクセスされます。リモート アクセス クライアント A には、ネットワーク プリンタ B の NetBIOS 名はありますが、IP アドレス名はありません。リモート アクセス クライアント A は、ネットワーク プリンタ B の NetBIOS Name Query パケットをブロードキャストします。リモート アクセス サーバーは、NetBIOS Name Query パケットを LAN1、LAN2、および LAN3 にブロードキャストしますが、外部インターフェイスにはブロードキャストしません。ネットワーク プリンタ B は、リモート アクセス クライアント A 宛てに NetBIOS Name Query Response パケットを返します。リモート アクセス サーバーは、リモート アクセス クライアント A に対して、NetBIOS Name Query Response パケットをルーティングします。

 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ファイルとは
 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(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


LMHOSTSファイルのキーワード
LMHOSTSファイルの更新を即座に反映させる
LMHOSTS ファイルの概要と定義済みキーワード


 hostsファイルと比べると、#PREとか#DOM:<ドメイン名>といった特別なキーワードが追加されている点が異なる。これらは、NetBIOSキャッシュへのプリロードと、ドメイン・コントローラの指定である。詳細についてはWindows TIPS「LMHOSTSファイルのキーワードはすべて大文字で記述する」や「LMHOSTSファイルの更新を即座に反映させる方法」などを参照していただきたい。

hostsファイルでしかできないこと
 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ファイルでしかできないこと
 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ファイルを取り込んで、静的な定義を素早く行うことができる

NetBios名の名前解決をするのがWINSです。
つまり、NetBios名とIPアドレスの対応関係を動的に保持します。
通常はセグメント内を担当しますが、環境によっては他のセグメントのコンピュータと名前解決情報を交換する場合もあります。

ちなみにNetBios名というのはほぼコンピュータ名と言っていいと思います。
但し15文字を越えるコンピュータ名をつけるとモディファイされるされるらしいのですが、
その辺仕組みを知らず経験もありません。

用途はMSネットワークでNBTやCIFSを使ったような場合、NetBios名でコンピュータを指定し、このIPアドレスを知るのに使ったりします。

\\コンピュータ名

ってなヤツです。コンピュータ名はFQDNではないとします。
FQDNの場合は、DNSが名前解決に使われます。

>設置したときと設置していないときとの違いなど教えて頂けると助かります。

設置するととりあえずそのセグメント内の名前解決がスムーズになります。
マスタブラウザに頼る必要がなくなるからです。
また環境によっては他のセグメントの名前解決も可能になります。

でも以上はあくまでもNetBios名の場合であって、
MSネットワークでもホストのFQDN名などを使うことも可能で、これで十分代替可能です。

ex. \\コンピュータ名.sb.d.com

この場合は名前解決にはDNSが使われます。