記事
インターネットの世界で名前解決を行う場合、DNSサーバーを使って名前解決を行うが、社内のローカル環境(LAN)といった、限られた範囲内だけで名前解決をするときは、hostsファイルを使って名前解決を行うことができます。社内にDNSサーバーを立てるといった、大げさなことを行う必要はありません。ただし、ノードが追加になった場合は、hostsファイルに新しいノードを都度追加して、全てのノードに配布しなくてはいないという煩わしさは発生します。
hostsファイルを全ノードで分散管理をすることなく、サーバーで一元管理できないだろうかという発想で生まれた仕組みがDNSです。中小企業の営業所など、規模の小さいLAN環境であれば、hostsファイルでこと足ります。
hostsファイルを使った名前解決の仕組みはレガシーであるが、最新のLinuxのバージョンにも、hostsファイルを使って名前解決ができる仕組みは残っています。hostsファイルは、/etcの中に存在します。cat /etc/hostsで中身を確認すると、デフォルトで127.0.0.1とlocalhostsを紐づける記述だけがあります。
つまり、この記述があることで、下記のコマンドのどちらを使っても、ループバックテストが行えるようになります。
ping 127.0.0.1
ping localhosts
hostsファイルとDNSの情報に矛盾があった場合、どちらの設定が優先されることになるだろうか。実は、hostsファイルとDNSの名前解決を行う優先順位をカスタマイズすることができるようになっています。優先順位を設定するファイルは、/etc/nsswitch.confです。
cat /etc/nsswitch.conf
hosts: files dns
このファイルを見ると、デフォルトで、①hostsファイル、②DNSの順番で参照するように設定されています。このファイルを触ることで、優先順位を逆にすることも可能です。(あまりしないとは思いますが。)因みに、WindowsでActiveDirectoryが登場する前に使われていたWINSの仕組みを使って、Linuxの名前解決を行うことはできません。WINSとはDNSのWindowsオンリー版のようなものです。
補足
Windows環境で名前解決を行うには、ActiveDirectoryでドメイン管理を行っている環境であれば、DNSで名前解決を行うことになります。ActiveDirectoryが登場したことで、従来のWINSによる名前解決の仕組みはレガシーになりました。Windows環境だけで構築されたローカル環境(LAN)であっても、インターネットと同じ仕組みで、ドメイン管理、名前解決をさせるようにマイクロソフトが方針転換をしました。
Linuxのhostsファイルに対応するWindowsの名前解決の仕組みに、lmhostsファイルというのがありました。厳密にいえば、hostsファイルはホスト名を解決させるための仕組みであるのに対し、lmhostsファイルはNetBIOS名を解決させるための仕組みです。Windowsでよくコンピューター名という言い方をするが、正式には、コンピューター名をホスト名と言い換えることはできません。コンピューター名とは、厳密にいえばNetBIOS名のことです。
lmhostsファイルのlmって何の意味だか分かりますでしょうか?Microsoftから公式な発表はないため明らかにはなってはいないが、LANマネージャーの意味だと推測されています。LANマネージャーはWindows3.1で搭載されていたLANを管理するための機能です。当時はコンピューターをLANで接続すること自体珍しく、プロトコルにTCP/IPを採用することもほぼほぼない時代でした。ベンダーが独自に開発したプロトコルを使って通信を行っていました。Windows95が登場し、そして、インターネットが普及すると、これらの代物は消えていくことになりました。