DNSとはDomain Name Serviceの略で、IPアドレスと名前の変換を行ってくれるものです。インターネットはIPアドレスを使って通信されることはご存知かと思いますが、例えばYahooにアクセスするのに「210.81.3.238」とかでアクセスするのもどーかと思うでしょ?そこは、yahoo.co.jp⇔210.81.3.238を変換してくれるサーバがやってくれてるんですね。
と、これを家でやって何が嬉しいの?と思われるかと思います。これをやっておくと、「自分のPCに名前がつけられます!」これは結構嬉しいのではないでしょうか。今では、WindowsのWINSサーバを使えばローカルネットワークに名前をつけて置くこともできますが、UNIX,Windowsで共通でやろうと思ったらDNSです。また、メールやHTTPサーバ等はDNSを参照して名前とアドレスの変換をしていますので、設定しておいた方が良いでしょう。 DNSサーバとして最も有名なのはBIND(Berkrey Internet Name Domain)[3]です。これはだいたいネームサーバといえばこれを指すので、お勉強するならこれが一番役に立つと思われます。
最近のUNIXディストリビューションでは、大体添付されているので、Linuxでの設定を有効にする手順を記述しておきます。
まずは、自分ちのIPアドレス体系を決めましょう。基本的には、プライベートアドレスを使ってるでしょうね。「192.168.XXX.XXX」みたいな奴です。頭の192.168が勝手に使っていい(但しインターネットでは使っても無視される)アドレスです。 とりあえず、192.168.1.0 netmask 255.255.255.0 としておきましょう。これだと、192.168.1.1~192.168.1.254までのIPアドレスを使うことを宣言したのと同じです。
ここでは、まずfoo.netという仮装ネットワークを作ってみましょう。DNSでは
と言うことで、まずは正引きデータベース。
$TTL 86400 @ IN SOA name.foo.net. root.localhost ( ←おまじない。 2 ; serial ネームホスト名と管理者メールを書いておきます。 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttl ) IN NS 192.168.1.1 ←ネームサーバのアドレス IN A 192.168.1.1 IN MX 10 name ←ユーザ名@foo.netで送ったときに メールを受けるホスト name IN A 192.168.1.1 ←こんな具合にホストを追加していきます www IN CNAME name ←nameの別名をwwwとする。 www.foo.netでアクセスできるようになります。 host1 IN A 192.168.1.10 host1 IN A 192.168.1.11
これをfoo.net.zoneというファイル名でセーブしておきます。
次に逆引きデータベースです。
$TTL 86400 @ IN SOA name.foo.net. root.localhost ( 3 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttk ) @ IN NS name.foo.net. ←ネームサーバの宣言 1 IN PTR name.foo.net. ←こんな風に追加していきます 10 IN PTR host1.foo.net. 11 IN PTR host2.foo.net.
これを1.168.192.in-addr.arpa.zoneと言う名前でセーブしておきます。変な名前ーと思われるかもしれませんが、アドレスをひっくり返して、in-addr.arpaをつけるのが古の逆引き指定だったので、こんな名前になってます。これを一般的には/var/namedディレクトリに置いておきます。
/etcにnamed.conf,named.customというファイルがあるかと思います。named.customに以下のエントリを追加しておきます。
options { directory "/var/named/"; forward first; ←追加 forwarders { XXX.XXX.XXX.XXX;←プロバイダのネームサーバを追加しておきます XXX.XXX.XXX.XXX; }; };
これをやると、さっき書いたデータベース以外の情報はプロバイダのネームサーバに問い合わせに行くので、直接ネットの名前も引けるようになります。
さらにnamed.confに以下のエントリを追加します。
zone "1.168.192.in-addr.arpa" { ←このzoneを自分のネームサーバで扱う宣言 type master; ←データベースがあるのでマスタサーバになる file "1.168.192.in-addr.arpa.zone"; }; zone "foo.net" { ←このzoneを自分のネームサーバで扱う宣言 type master; ←データベースがあるのでマスタサーバになる file "foo.net.zone"; };
これでfoo.netのデータベースをもち、その他をプロバイダのネームサーバに問い合わせる設定が完了しました。ちなみに、他の設定では、
マスターサーバ | データベース本体を持っているサーバ |
スレーブサーバ | データベースのバックアップをするサーバ |
キャッシングオンリーサーバ | データベースを持たず、外部への問い合わせのみを行うサーバ |
という種別に分かれます。named.confき記述したtypeの項ですとか、named.customで指定したforwarderの指定などで変わります。
動かしてみましょう
/etc/rc.d/init.d/named start
でネームサーバが起動します。ついでに名前引きが出来るようにクライアント側も設定してしまいましょう。 /etc/resolve.confを以下のように設定しておきます
domain foo.net search foo.net nameserver 192.168.1.1
これを設定した上でサーバ上で以下のコマンドを実行してみましょう
[XXX@name etc]$ nslookup Note: nslookup is deprecated and may be removed from future releases. Consider using the `dig' or `host' programs instead. Run nslookup with the `-sil[ent]' option to prevent this message from appearing. > yahoo.co.jp Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: Name: yahoo.co.jp Address: 210.81.3.238 Name: yahoo.co.jp Address: 210.81.150.5 Name: yahoo.co.jp Address: 211.14.15.5 > host1 Server: 192.168.1.1 Address: 192.168.1.1#53 Name: host1.foo.net Address: 192.168.1.10
さて、こんな感じに出てきましたか?ホスト名に対してアドレスがちゃんと出てきたら設定に問題はありません。 さらに、サーバをブートしたときに自動的に起動するようにもしておきましょう
/bin/chkconfig named on
これで自動起動の設定も出来ましたね。
(This host) = https://femt.ddo.jp