Windowsでリモートネットワークの名前解決をhosts/lmhostsで行う:Tech TIPS
hostsとlmhostsファイルは、Windowsネットワークにおける静的な名前解決のための手段である。VPNやRAS、ルータを介してリモートのネットワークへ接続する場合は、リモートのコンピュータの名前を解決するための手段を用意する必要がある。hostsやlmhostsファイルを使って静的な名前解決を行うようにすれば、DNSやドメイン・サフィックスの設定にかかわらず、正しくアクセスできるようになる。
対象OS:Windows NT/Windows 2000/Windows XP/Windows Server 2003/Windows Vista/Windows Server 2008
解説
hostsやlmhostsファイルを使ったコンピュータ名とIPアドレスの対応表は静的な名前解決を行うための手段であり、DNSやWINSを補完する機能として利用することができる。これら2種類のファイルの機能や目的の違いについては、Tech TIPS「hostsとlmhostsの違い」で述べているので、参考にしていただきたい。
現在では、DNSやWINSなどの動的な名前解決を使うのが一般的であるが、ネットワークの構成によっては、hostsやlmhostsファイルを併用するのが望ましい場合もある。例えば、独自に構築した実験用のDNSドメイン(Active Directoryドメイン)があるが、組織内の正式なDNSサーバに登録されていないのでそれらのドメインの名前解決が行えないような場合である(TIPS「Active Directoryドメインを構築する(基本編)」参照)。
また、ローカルのネットワーク以外に、VPNやリモート・アクセス(RAS)、PPPoEなどのマルチセッション接続などを同時に利用する場合もあるだろう。
ローカル接続とVPN接続の同時利用の例
ローカルのLAN接続(インターネットへの接続に利用)に加えて、VPN接続を利用する場合の例。システムには物理的なネットワーク・インターフェイスのほかに、もう1つ仮想的なインターフェイスが作成され、それぞれで異なるIPアドレスやDNS/WINSサーバ設定などが行われる。RASによるリモート接続やPPPoEによるマルチセッション接続も、この例と原理的には同じである。
(1)物理的なLANインターフェイスに対するIPアドレスの割り当ては、ローカルのDHCPサーバによって行われる。
(2)仮想的なLANインターフェイスに対するIPアドレスの割り当ては、リモートのDHCPサーバによって行われるのが一般的。
この例では、デフォルトのLANインターフェイスを経由したネットワーク接続のほかに、もう1つ仮想的なVPNインターフェイスが作成され、それを使ってVPNサーバへ接続している。この場合、IPアドレスなどの情報は、それぞれのインターフェイスごとに(DHCPなどで)割り当てられる。
このように、2つのネットワークへ同時に接続する場合、それら2つのネットワークでは、異なる名前空間(コンピュータ名とIPアドレスの対応付け)が利用されていることが多い。DNSの名前階層やDNSサーバなどをうまく設計・配置しておけば、2つの名前空間をシームレスに接続し、名前解決することも可能であるが、それぞれで異なるDNSサーバやWINSサーバなどが利用されていると、一方のDNSサーバでは名前解決できるが、もう一方のDNSサーバでは名前解決できないということがある。
2つのネットワーク・インターフェイスで同時にDHCPなどを利用する場合、一般的には、それぞれ異なるDNSサーバやWINSサーバのIPアドレスが設定される。つまり各インターフェイスごとに異なるDNSサーバ・アドレスが指定されるのである。この結果、ある名前を解決するためには、複数のDNSサーバが利用できることになる。
1台のコンピュータに対して複数のDNSサーバが設定されていると、Windows OSではあらかじめ決められた優先順位に従って各DNSサーバへの問い合わせを行う。具体的な挙動についてはTech TIPS「優先DNSサーバと代替DNSサーバの動作について」などを参照していただきたいが、注意すべき点は「あるDNSサーバから否定応答が得られると、同じインターフェイスに属する、そのほかのDNSサーバに対してはもう問い合わせはしない」というところである。
この挙動から分かるとおり、別セグメントやVPN、リモート・アクセス先のネットワーク上にのみ存在する名前をDNSサーバで解決するためには、いずれかのインターフェイス(アダプタ)の優先DNSサーバに登録されていて、さらにDNS問い合わせ時のドメインのサフィックスが一致している必要がある(もしくは常にFQDN名で問い合わせるようにする)。さもないと名前解決ができず、接続に失敗する可能性がある。
●hostsやlmhostsによる静的な名前の定義
以上のようなケースでも正しく名前解決を行うための一番簡単な方法は、hostsやlmhostsファイルによる静的な名前解決を併用することである。別セグメントのネットワーク、VPN、リモート・アクセス、PPPoEの第2セッションなどによって、デフォルトとは異なる第2のネットワークへ接続する場合は、それらの上でのみ定義されているコンピュータとIPアドレスの対応をhostsやlmhostsファイルに記述しておき、そのファイルをローカルの各コンピュータのシステム・フォルダ(デフォルトでは%windir%\system32\drivers\etcフォルダ)へコピーしておく。
●lmhostsファイルの書式
hostsやlmhostsファイルにはIPアドレスとコンピュータ名を記述するが、hostsファイルに固有の機能として、FQDN名を記述することもできる(lmhostsファイルには、ドメイン名サフィックスを持たない、単一ラベルのコンピュータ名しか記述できない)。例えば、次のように利用する。
※hostsフィルの例
# sample hosts file ……先頭が#の行はコメント
127.0.0.1 localhost loghost
# local computers ……(1)ローカル・コンピュータ
192.168.1.21 server1 server1.sys.example.com
192.168.1.22 server2
192.168.1.101 pc01 pc01.example.sys.com
192.168.1.102 pc02 pc02.example.sys.com
192.168.2.41 xxserver21 xxserver21.sys2.example.com
# remote network computers ……(2)リモート・ネットワーク
172.16.1.31 vpn-net1-pc1 vpn-net1-pc1.vpn1.example.com
172.16.1.32 vpn-net1-pc2 vpn-net1-pc2.vpn1.example.com
# experimental computers ……(3)テスト・サーバ
10.20.30.11 www www.example.com
10.20.30.12 mailgw mailgw.example.com testmailserver.example.jp
hostsファイルの書式は簡単である。行の先頭にIPアドレスを1つ記述し(行頭が数字から始まること)、1つ以上のスペースかTab文字をはさんで名前文字列を記述する。名前はドメイン名サフィックスを持たない単一ラベルのコンピュータ名か、ドメイン名サフィックスを持つFQDN名を使用する。1つのIPアドレスに対して複数の名前が定義できるが、Windows OSでは最大9つまで認識される。
なお先頭が#の行はコメント行であり、無視される。
●hostsファイルの用途
上の例では、代表的な3つの用途でhostsファイルを利用している。それぞれについて見ておこう。
■用途1―ローカル・コンピュータの定義
これは、ローカルのネットワーク・セグメント上に存在するコンピュータや、ローカルのDNSサーバで参照しているコンピュータを定義している例である。実際のところ、このような用途ではいちいちhostsファイルでレコードを定義しておく必要はない。正しく構築/管理されているネットワークならば、NetBIOSのブロードキャストやDNSサーバに対する問い合わせで名前解決できるだろうからだ(DNSサーバは管理者によって正しく設定されているものとする)。それでもhostsファイル中にこのようなレコードを定義するのは、何らかの理由でDNSサーバがダウンしてしまっても、正しくサーバへ到達できるようにするためである。ローカルのイーサネット・セグメントではなく、ルータを介した別のセグメント上のサーバを利用しているようならば、そのサーバのレコードを単一ラベル名とFQDN名の両方を記述しておくとよいだろう。
なおDHCPを使っているネットワーク環境では、IPアドレスが変わる可能性があるので、そのような可能性のあるコンピュータ(クライアントPCなど)はhostsファイルには記述しない方がよい。常に固定的にIPアドレスが割り当てられているサーバだけにとどめておくのがよい。
■用途2―リモート・ネットワーク上のコンピュータの定義
VPNやリモート・アクセス、実験的に構築した(独立した)DNSドメイン上のコンピュータなどは、通常のDNSサーバ(ローカルのネットワーク・インターフェイスに登録されているDNSサーバ)では名前解決できないことがある。このようなネットワーク上のコンピュータは、hostsファイルを使って定義しておくとよいだろう。DNSサーバの管理者に頼んでいちいちレコードを追加してもらわなくても、ローカル・コンピュータ上のhostsファイルの変更だけで名前解決を行えるようになる。
■用途3―テスト用のサーバの定義
Webサーバやメール・サーバ、アプリケーション・サーバなどを使ったシステムを構築する場合、開発/テスト期間中は、本番用のサーバ(最終的にサービスを提供する、公式なサーバ)を使わず、テスト・サーバ(リハーサル・サーバとかステージング・サーバなどとも呼ばれる)を使って作業を進めることが多い。プログラム中には「http://www.example.com/」といった正式なコンピュータ名などを埋め込んで開発するが、実際のアクセスはテスト・サーバに対して行うというのはよくある開発形態である。このような場合は、テスト・サーバのIPアドレスに対して、hostsファイルでwww.example.comというFQDN名を定義しておく。これにより、アクセスが自動的にテスト・サーバに振り向けられる。そしてテスト完了時にはこのレコードを削除すれば、今度はDNSサーバを使って名前解決が行われ、本来のサーバへアクセスが行われるようになる。
■関連記事(Windows Server Insider)
- LMHOSTSファイルのキーワードはすべて大文字で記述する(TIPS)
- LMHOSTSファイルの更新を即座に反映させる方法(TIPS)
- LMHOSTSのエントリ・キャッシュ・サイズを拡張する(TIPS)
- デフォルト・ゲートウェイは1つのみ有効(TIPS)
- ネットワークのバインド順序を制御する方法(TIPS)
■更新履歴
【2008/03/14】lmhostファイルの書式と用途について加筆・修正しました。
【2004/07/03】初版公開。
■この記事と関連性の高い別の記事
- 優先DNSサーバと代替DNSサーバの動作について(TIPS)
- nslookupの基本的な使い方(イントラネット編)(TIPS)
- Windowsの名前解決のトラブルシューティング(DNSリゾルバーキャッシュ編)(TIPS)
- DNSサービスのルート・ヒントを変更する(TIPS)
- DNSサーバでゾーンごとに異なるフォワーダを使う(TIPS)
- Windowsにおけるhostsとlmhostsの違い(TIPS)
- WindowsでDNSサーバのキャッシュの内容を調査する(TIPS)
- Windowsでホスト名からIPアドレスを見つける方法(TIPS)
- DNSの動的更新を無効にする(TIPS)
- Google Public DNSでWindowsのWeb表示を高速化する(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.