今ならXeonも搭載可能なPCサーバー「PowerEdge SC440」が2万円台から買える!

マウスコンピューター」ならWindows抜きでもPCが買える。Linuxサーバーとしての利用に最適!

トップページ

  • tarの使い方
  • rpmの使い方
  • psコマンドでプロセスを確認
  • /etc/crontabを編集してアプリを自動実行
  • chkconfigコマンドでプロセスを自動起動

DNSサーバーを設置しホスト名でアクセス

 前のページでキャッシュだけを行うDNSサーバーを構築した。次はLANの中にあるサーバーやクライアントに対して、ホスト名でアクセスできるように設定してみよう。
 たとえば、今は自宅サーバーで公開しているウェブページをLANの中から見るために、いちいちプライベートIPアドレスを入力しているはずだ。しかし、DNSサーバーを設置すると分かりやすいホストネームでウェブサイトの確認ができるようになる。また、sshでサーバーにログインするときもホスト名を使えるので、入力の間違いもおきにくい。

正引きとは? 逆引きとは?

 DNSサーバーの設定に入る前に、DNSサーバーの仕組みを見ておこう。DNSサーバーといえば、ホスト名をIPアドレスを変換し、そのIPアドレスでアクセスするために利用するものだ。しかし、DNSサーバーにはもうひとつの機能もあり、IPアドレスをホスト名に変換することもできる。これを「逆引き」と呼び、ホスト名をIPアドレスに変換するのを「正引き」と呼ぶ。
 Apacheでアクセスログを記録するとき、接続元をIPアドレスではなく、ホスト名で記録することができるが、これはアクセスしてきた端末のIPアドレスをDNSサーバーで逆引きしているためだ。アクセスログにIPアドレスしかなければどういった場所からアクセスされているのかわかりにくいが、ホスト名であればどんな場所から接続してきたのか見当をつけることができる。
 DNSサーバーを構築するときも、正引きだけではなく、逆引きの設定も同時に行う必要がある。

ルートサーバーとは?

 ユーザーの端末がどこかのウェブサイトにアクセスしようとURLを入力したとき、まずはルートサーバーに問い合わせを行う。ルートサーバーとはインターネットの全体を管理するDNSサーバーの元締めのような存在だ。しかし、ルートサーバーは個々の端末に関する情報を持っているわけではない。
 たとえば、www.mydomain.co.jpにアクセスすると仮定してみよう。最初にルートサーバーにアクセスすると、ルートサーバーはjpドメインを管理するDNSサーバーのアドレスを通知する。アドレスを受け取った端末がjpドメインのDNSサーバーにアクセスすると、DNSサーバーは次はco.jpドメインを管理するDNSサーバーのアドレスを通知する。次にco.jpドメインのDNSサーバーにアクセスし、やっとmydomain.co.jpドメインのアドレスを得る。次はmydomain.co.jpのDNSサーバーからwww.mydomain.co.jpのアドレスを入手する。これではじめてww.mydomain.co.jpにたどり着くことができるわけだ。
 これから構築しようというのは、この流れの最後の部分。mydomain.co.jpへの問い合わせに対して、www.mydomain.co.jpのアドレスを通知するためのDNSサーバーだ。しかし、セキュリティ上の観点から外部に向かって通知することは避け、LANの内部に対してだけアドレスを通知するDNSサーバーを作ることにしよう。というより、非固定IPアドレスで運用しているときは、自分のDNSサーバーのアドレスも浮動するため、外部に向かって提供するのは難しい。

DNSサーバー構築に必要なファイル

 内向きのDNSサーバーを構築するために必要なのは次の6つのファイルだ。それぞれインストール時には作成されないので、下にあるような記述を自分で入力していかなければならない。
 /var/namedディレクトリの中に置くファイルは/etc/named.confで指定する。そのため、ファイル名は自分の環境に合わせた分かりやすいものに変えてもいい。たとえば、自分のドメインの正引きデータなら自分のドメイン名をファイルにする。

/etcディレクトリ named.conf BINDの設定ファイル
/var/namedディレクトリ named.ca ルートサーバーのアドレスを記述
localhost.zone ローカルホストの正引きデータ
named.local ローカルホストの逆引きデータ
mydomain.co.jp 自分のドメインの正引きデータ
0.168.192.in-addr.arpa 自分のドメインの逆引きデータ

 ここで構成するLANには次のようなマシンがあって、それぞれホスト名とIPアドレスは次の図のようになっていると仮定して話を進めていこう。また、ドメイン名はmydomain.co.jpという仮の名前を使う。

named.confの記述方法

 BINDの設定ファイル/etc/named.confから作成を始めよう。
 named.confは2つの部分に分かれている。前半はBINDの動作を設定する「option」、後半は名前解決に使うゾーンファイルを指定する「zone」だ。ほかにも追加でいくつもの要素を指定できるが、自宅サーバーのレベルでは必要ないので無視することにする。
 optionの部分では、サーバーのあるLANの中からしか問い合わせに応じないように設定する。また、内部のDNSサーバーで名前解決できないときは、プロバイダーのDNSサーバーへ問い合わせるように設定を行う。別にプロバイダーのDNSサーバーを指定しなくても動作はするのだが、そのときは上で述べたようにルートサーバーから順に問い合わせを行っていくため、名前解決に時間がかかってしまう。つまり、プロバイダーのDNSサーバーをキャッシュのように使うわけだ。
 後半のzoneでは、ゾーンの定義と、その設定ファイルの名前を指定する。ゾーンというのは名前解決を行う範囲のことだと考えればいい。ここで作るDNSサーバーでは、ローカルホスト(サーバー自身)と自分が所属するドメインの2つについて正引きと逆引きのゾーンファイルを作成することになる。
 ゾーンのタイプとして「master」というキーワードを指定しているが、これはメインとなるDNSサーバーであることを示している。バックアップ用に複数のDNSサーバーを設置するとき、2台目以降のDNSサーバーで「slave」と設定すれば、masterのDNSサーバーとゾーンファイルを同期させることができる。
 BINDのファイルを記述するとき、最後のセミコロン「;」を忘れないように。セミコロンがないと設定が有効にならないので注意が必要だ。

options {
        directory "/var/named"; ゾーンファイルの保存場所
        allow-query { LAN内からの問い合わせのみ応答する
                127.0.0.1;
                192.168.0.0/24;
        };
        forwarders { 外部の名前解決に利用するDNSサーバー
                202.248.37.74;
                202.219.63.253;
        };

zone "." IN {
        type hint;
        file "named.ca"; ルートサーバーの情報
};

zone "localhost" IN {
        type master;
        file "localhost.zone"; ローカルホストの正引きファイル
};

zone "named.local" IN {
        type master;
        file "named.local"; ローカルホストの逆引きファイル
};

zone "mydomain.co.jp" IN {
        type master;
        file "mydomain.co.jp"; ドメインの正引きファイル
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "0.168.192.in-addr.arpa"; ドメインの逆引きファイル
};

named.ca(ルートサーバーの情報)を入手

 ルートサーバーのアドレスを記述した最新のファイルを入手し、/var/namedディレクトリに「named.ca」という名前でコピーする。ルートサーバーのゾーンファイルはftp://ftp.rs.internic.net/domain/named.rootで入手できる。

# wget ftp://ftp.rs.internic.net/domain/named.root
            ルートサーバーのゾーンファイルをダウンロード
# cp named.root /var/named/named.ca
            /var/namedディレクトリにコピー

localhost.zone(ローカルホストの正引きファイル)を作成

 ローカルホストとは自分自身のことをあらわす特別なホスト名のこと。ローカルホストのIPアドレスは「127.0.0.1」を使うことが慣習となっている。最初にローカルホストの名前解決を行うゾーンファイルを作成する。
 ローカルホストの正引きファイルlocalhost.zone/var/namedディレクトリに作成する。注意点の第一がホスト名の最後にあるピリオド「.」を忘れないこと。もうひとつはセミコロン「;」がこんどはコメントを表すことだ。

$TTL 1D(1)             (3)                   (4)
@  IN   SOA  diamond.mydomain.co.jp. root.mydomain.co.jp. (
        (2)         2005021401  ; Serial
                     3H          ; Refresh
                     15M         ; Retry   (5)
                     1W          ; Expire
                     1D )        ; Minimum
   IN   NS   diamond.mydomain.co.jp.  (6)
   IN   A    127.0.0.1                (7)
  1. TTLは外部のDNSに対して、キャッシュしたデータの有効期限を設定する。外部に公開しないDNSサーバーではあまり意味がない項目だが、とりあえず1D(1日)と指定しておこう。
  2. SOAレコードはドメインに対する権限を持ったDNSサーバーを指定する部分で、ゾーンファイルの最初に記述しておく必要がある。
  3. DNSサーバーのホスト名。最後のピリオドを忘れないこと。
  4. 管理者のメールアドレス。ゾーンファイルの中では「@」がドメイン名を表すため、「root@mydomain.co.jp」というアドレスは「root.mydomain.co.jp」と書くことになっている。
  5. スレーブ(予備)のDNSサーバーとゾーンファイルをやりとりするときに利用する。マスターのDNSサーバーしか設置しないなら意味のない設定項目なので、上の通りに入力しておけばいい。ちなみに各項目の意味は上からそれぞれ「シリアル番号」「スレーブがマスターに問い合わせる更新の間隔」「問い合わせに失敗したときに再試行する間隔」「更新に失敗したときにスレーブのデータを破棄するまでの期間」「問い合わせに失敗したことを記憶しておくネガティブキャッシュの有効期限」となっている。ひとつめのシリアル番号はどんな数字を入力してもいいので、DNSサーバーを立ち上げた日付に2ケタの数字を追加しておくことにした。
  6. NSレコードはSOAレコードと似た意味を持っていて、ドメインの中で権限を持ったDNSサーバーのホスト名を指定する。このホスト名も最後にピリオドを付ける。
  7. Aレコードはホスト名に対応するIPアドレスを指定するもの。ここではローカルホストの名前解決を行うため、ローカルホストのIPアドレス(127.0.0.1)を指定する。

named.local(ローカルホストの逆引きファイル)を作成

 次はローカルホストの逆引きを設定する。こちらは127.0.0.1というIPアドレスが与えられたときに、ローカルホストのホスト名(localhost)を返すための設定だ。
 前半の設定は上の正引きとまったく同じ。違うのは最後の1行だ。正引きではAレコードを使ったが、逆引きではPTRレコードを使用する。

$TTL 1D
@          IN   SOA  diamond.mydomain.co.jp. root.mydomain.co.jp. (
                           2005021401 ; Serial
                           3H         ; Refresh
                           15M        ; Retry
                           1W         ; Expire
                           1D )       ; Minimum
           IN   NS   diamond.mydomain.co.jp.
127.0.0.1  IN   PTR  localhost. ←PTRレコード

ドメインの正引きファイルを作成

 いよいよLANの中でホスト名を使えるようにする設定だ。たとえば、下の図を例に考えると、「emerald.mydomain.co.jp」と指定すると「192.168.0.201」というIPアドレスが通知されるように設定する。これからはLANの中にあるマシンにアクセスするのにIPアドレスを使う必要はない。
 /var/named/mydomain.co.jpに以下の記述を書き込んで保存する。ファイル名は自分のドメインに合わせて変更してもかまわないが、そのときは/etc/named.confの記述と合わせることを忘れないようにしよう。

 記述方法は上ですませたローカルホストのやり方と同じ。前半のSOAレコードとNSレコードはどのゾーンファイルでも共通している。最後にホスト名からIPアドレスを導くAレコードを必要な数だけ追加していけばいい。
 あと、いっしょに設定しておかなければならないのがMXレコードだ。MXレコードはドメインの中でどのホストが外部からのメールを受信するのかを指定する。「MX 10 ホスト名」とあるが、10とはメールを受信するホストが複数あるときの優先順位を示す。0から65535までの数値を使えるのだが、もっとも優先順位が高いものを10とするのが慣習となっている。
 また、CNAMEレコードはエイリアスだ。あるホストに対して別名を定義できる。たとえば、diamondというホストに対して、wwwやmail、ftpといった名前を使ってもアクセスできるように設定できる。

$TTL 1D
@        IN  SOA    diamond.mydomain.co.jp. root.mydomain.co.jp. (
                          2005021401  ; Serial
                          3H          ; Refresh
                          15M         ; Retry
                          1W          ; Expire
                          1D )        ; Minimum
         IN  NS     diamond.mydomain.co.jp.
         IN  MX 10  diamond.mydomain.co.jp. ←MXレコード
diamond  IN  A      192.168.0.200           ←Aレコード
emerald  IN  A      192.168.0.201
perl     IN  A      192.168.0.10
ruby     IN  A      192.168.0.11
www      IN  CNAME  diamond                 ←CNAMEレコード
mail     IN  CNAME  diamond
ftp      IN  CNAME  diamond

ドメインの逆引きファイルを作成

 最後に逆引きの設定を行う。上の図の例でいえば、「192.168.0.200」というアドレスが与えられたときに、「diamond」と名前を返せるように設定するわけだ。/var/named/0.168.192.in-addr.arpaに以下の記述を入力して保存する。
 設定方法はこれまでのゾーンファイルと前半は共通している。異なるのは最後にホストの数だけPTRレコードを用意することだ。PTRレコードでIPアドレスを指定するとき、IPアドレスの共通分は省略してもかまわない。「192.168.0.200」のかわりに「200」とだけ指定することができる。

$TTL 1D
@    IN  SOA    diamond.mydomain.co.jp. root.mydomain.co.jp. (
                     2005021401  ; Serial
                     3H          ; Refresh
                     15M         ; Retry
                     1W          ; Expire
                     1D )        ; Minimum
     IN   NS    diamond.mydomain.co.jp.
200  IN   PTR   diamond.mydomain.co.jp. ←PTRレコード
201  IN   PTR   emerald.mydomain.co.jp.
10   IN   PTR   perl.mydomain.co.jp.
11   IN   PTR   ruby.mydomain.co.jp.

hostコマンドで動作を確認する

 ここまでのファイルをすべて作成したら、変更を有効にするためにBINDを再起動する。BINDの起動スクリプトは/etc/rc.d/init.d/namedだ。

# /etc/rc.d/init.d/named restart

 また、構築したDNSサーバーへ問い合わせを行うように、/etc/resolv.confを編集して、今作成したDNSサーバーを使うように指定する。自分自身に問い合わせを行うわけだからローカルホスト(127.0.0.1)のアドレスを指定する。

nameserver 127.0.0.1

 次にhostコマンドを使って、正しく設定ができているかを確認しよう。もしうまく働いていなかったら、これまでの記述のどこかに間違いがあるはずだ。また、BINDが起動しているかもpsコマンドで確認する。

# ps -C named BINDが起動しているか確認
  PID TTY          TIME CMD
 7164 ?        00:00:00 named
 7167 ?        00:00:00 named
 7168 ?        00:00:00 named
 7169 ?        00:00:00 named
 7170 ?        00:00:00 named
# host localhost ローカルホストへの正引きを確認
localhost has address 127.0.0.1
# host 127.0.0.1 ローカルホストへの逆引きを確認
1.0.0.127.in-addr.arpa domain name pointer localhost.
# host diamond.mydomain.co.jp ドメイン内のホストへの正引きを確認
diamond.mydomain.co.jp has address 192.168.0.50
# host 192.168.0.50 ドメイン内のホストへの逆引きを確認
50.0.168.192.in-addr.arpa domain name pointer diamond.mydomain.co.jp.
#

 うまく働いていることが確認できたら、chkconfigコマンドを使って、BINDが自動起動するように設定しておこう。次からLinuxを起動すると同時にBINDも起動し、DNSサーバーでの名前解決ができるようになる。

# chkconfig named on namedを自動起動するように設定
# chkconfig --list named 自動起動の設定を確認
named         0:off  1:off  2:off  3:on   4:on   5:on   6:off
#                 ↑ここがonになっているか
 
掲示板 管理者のサイト トップページへ

お問い合わせや間違いのご指摘はyasu@center-left.comまでメールください。