hostと名前解決 (4)

 UNIXの歴史上、ホスト名(ドメイン)をIPアドレスに変換するという技術は当初hostsファイルで行われていたそうです。各ホストがどのIPアドレスであるのかをテキストデータとしてリスト登録しそれを参照してネットワーク接続を確立していました。しかしもしホスト名とドメインという1セットの関係が変わるとすべてのコンピューターのhostsファイルを書き換えなくてはいけません。メールで全員に知らせて書き換えてもらうしかありませんし、もし書き換えるのを忘れてしまったら接続が不能になってしまいます。bindなどのDNSサーバーが担う役目はそのネットワーク網のアドレスの変化に対応するデータベースを提供することです。そのため、DNSサーバーは固定IPアドレスではなくてはなりません。つまりDNSサーバーは各所のアドレス情報を提供するサーバーなので頻繁に引越しすることができないわけです。勿論引越しも可能ですが、それぞれのホストがどのIPアドレスなのか?は変化してもDNSサーバーのデータを書き換えるだけで済みますがDNSサーバーは接続が途切れないように引越しするのはやや面倒です。
 そんなわけで、かつてのhostsファイルやresolv.confなどのネットワークに関するファイル設定は当初はすべてのネットワークをこのファイルで設定していましたが今では自サーバーのホストと名前解決、あるいは自ネットワーク内のみの接続を設定するのみとなりました。いえ、勿論すべてbindでも設定が可能です。しかし、自分のサーバーのbindが何らかの原因で機能しなくなった際には、自サーバーの名前解決ぐらいは機能してほしいものです。

/etc/hostsファイルの設定

 前述のようにhostsファイルはどのホストがどのIPアドレスをもっているかというデータベースを作ります。本当に今では小さなデータベースですが...。
# 最初に設定
127.0.0.1    localhost hogehoge #*1

# DNSサーバー設定時に設定
127.0.0.1    localhost.localdomain example.com www.example.com #*2
192.168.11.1    ns.example.com #*3
192.168.11.2    example.com www.example.com #*4

# 以下そのまま
# The following lines are desirable for IPv6 capable hosts
#::1     ip6-localhost ip6-loopback
#fe00::0 ip6-localnet
#ff00::0 ip6-mcastprefix
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters
#ff02::3 ip6-allhosts

#::1     localhost ip6-localhost ip6-loopback
#fe00::0 ip6-localnet
#ff00::0 ip6-mcastprefix
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters
#ff02::3 ip6-allhosts
 *1では、localhostという名前に127.0.0.1というループバックIPを当てています。通常これだけでも充分ですが、せっかくなので自分のオリジナルのホスト名(hogehoge)も同時に設定します。これで自分のサーバーを自分で引くときに利用する12.0.0.1はlocalhostとhogehogeという二つの名前を与えられたことになります。もしWebサーバーを起動しているのなら、http://localhost/でWebサーバーのrootディレクトリに接続が可能になります。暇な方は、
hostname -a
というコマンドを実行してみてください。今設定したホスト名がきちんと出れば成功です。(ネットワークの再起動を忘れずに!/etc/init.d/networking restart です。)
 *2は、DNSサーバー設定時に(つまりbind設定時に)追加するものです。わかりやすいように*1の設定と分けて書いてあります。ここでは、
  • localhost.localdomain
  • example.com
  • www.example.com
の3つをループバックに対応させています。前述と同様に127.0.0.1 を自分のドメインで接続できるようになります。しかしネットワークにやや詳しくなってきるとlocalhost.localdomeinとはいったい何なんだ?という疑問が沸いてきます。実は僕もわかりません。歴史的な意味があるのかもしれませんが、実際のところはわかりません。localhostと同じく...なんというか、礼儀というか「ここに設定できますよ!」という記号というか、よくある「郵便太郎」みたいな名無し権兵衛的な存在であるようです。
 *3ではルーターのゲートウェイを指定しています。bindでDNSサーバーを設定する際にそのネットワークのネックになるデフォルトゲートウェイにns.example.comを当てておくと何となく楽というかいい感じです。特になくてもかまいませんが僕は便利だと思います。
 *4は、127.0.0.1=192.168.11.2という設定なので、自サーバーマシンそれ自体の固定IPアドレスにもオリジナルのドメインを当てておこうというものです。同じネットワーク内の他のマシンから接続する際にはここで指定したドメインが192.168.11.2の代わりをするので大変便利です。(勿論クライアント側の設定が必要ですが...)

/etc/resolv.confの設定

 このファイルは自サーバーが名前解決を試みた際の検索先を指定します。localdomainを探しに行って、その行き先は192.168.11.1(デフォルトゲートウェイ)と127.0.0.1(ループバック)の二つを指定しています。これだけで充分です。玄人はリゾルバの設定といいます。
search    localdomain
nameserver    192.168.11.1
nameserver    127.0.0.1
 ※resolv(e).confではなく、resolv.confであることに注意!変な綴りです。

/etc/host.confの設定

order hosts,bind
multi on
 これだけです。orderでは「名前解決の際は、最初にhostを探してダメだったらbindを探せ!」と指定しています。multiはonにしておいて支障ありません。multiは名前解決の結果が複数だった場合の処理方法について指定します。"multi on"は複数のアドレスをそのまま返し、"multi off" は最初に見つかった物のみを返すという意味です。





プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer