- HOME
- サーバー構築サービス
- DNSサーバの構築
DNSサーバの構築
DNSとは、「Domain Name System」の略で、DNSサーバ(ネームサーバ)はインターネット上での名前解決を行うために必要なサーバである。よく使われている代表的なDNSサーバとしては「BIND」(Berkeley
Internet Name Domain)が挙げられる。今回はこのBINDを利用したDNSサーバの設定を紹介する。なおほとんどのUnixには最初からBINDがインストールされているので、ここではインストールの方法は紹介していないが、通常の手順どおりにインストールを行えばいいと思われる。
DNSサーバは一般的に、プライマリ(マスター)とセカンダリ(スレーブ)の2台のサーバで運用させる。また問い合わせ方法も、正引きと逆引きの2つの方法がある。前者はホスト名からIPアドレスを、後者はIPアドレスからホスト名を導き出すための設定で、通常正引きファイルはDNSサーバを構築するサーバでは必ず設定する必要があるが、逆引き設定に関しては通常プロバイダが用意するセカンダリのネームサーバで、自分のネームサーバの設定を追加してもらえば、独自で逆引き設定を行う必要はない。
[LinuxとFreeBSDの設定ファイル・起動コマンドの違い]
Linux |
FreeBSD |
|
設定ファイル | /etc/named.conf | /etc/namedb/named.conf |
---|---|---|
実行コマンド | /etc/rc.d/init.d/named start | /usr/sbin/ndc start |
停止コマンド | /etc/rc.d/init.d/named stop | /usr/sbin/ndc stop |
自動起動設定 | chkconfig | /etc/rc.conf |
1)DNSの設定を行う前に、リゾルバの設定を行う。「/etc/resolv.conf」を編集する。以下、ドメイン名を「mydomain.ne.jp」、ホスト名を「ns.mydomain.ne.jp」、IPアドレスを「192.168.0.2」とした場合の例で説明する。
domain mydomain.ne.jpnameserver 192.168.0.2
nameserver 192.168.0.3
search mydomain.ne.jp
※1行目はデフォルトのドメイン名。これは複数記述することはできない。2,3行目はネームサーバのIPアドレスを記述する。上がプライマリで、セカンダリがある場合はその下に記述。4行目は名前補完を行うドメイン名を記述する。これは複数記述してもよい。
2)bindの設定ファイル「named.conf」を編集する。
options {directory "/var/named";
};
zone "mydomain.ne.jp." {
type master;
file "mydomain.zone";
};
zone "0.168.192.in-addr.arpa" {
type master;
file "mydomain.rev";
};
※Options{}のdirectoryの指定で、設定ファイルを格納するディレクトリを指定する。次のzone "mydomain.ne.jp."では、ドメイン「mydomain.ne.jp」の正引きの設定の記述である。最後のzone "0.168.192.in-addr.arpa"では、逆引きの設定を行う。typeはmaster/slaveを指定し、fileは正引きファイルのファイル名を指定する。上でディレクトリを指定しているため、ここではファイル名のみ指定すればよい。
3)正引きファイルを設定し、(1)で設定したファイル名で保存する。例では「/var/named/mydomain.zone」。
$TTL 3600@ IN SOA ns.mydomain.ne.jp. info.mydomain.ne.jp. (
2002010100 ;Serial
28800 ;Refresh
14400 ;Retry
2592000 ;Expire
86400) ;Minimum
IN NS ns.mydomain.ne.jp.
IN NS ns2.mydomain.ne.jp.
IN MX 10 mail.mydomain.ne.jp.
ns IN A 192.168.0.2
mail IN A 192.168.0.2
www IN A 192.168.0.2
ftp IN A 192.168.0.2
※「ns.mydomain.ne.jp.」はこのゾーン情報が存在するホスト名で、通常はDNSサーバ名を指定。「info.mydomain.co.jp.」は管理者のメールアドレスが「info@mydomain.co.jp」の場合。
Serial
ゾーン情報のシリアル番号。このファイルを更新した場合はその都度この値を増やしていく必要がある。セカンダリサーバ等はこの値をチェックして更新していくため、ここで設定する値は日付+連番としておくとわかりやすい。
Refresh
スレーブサーバが、マスターサーバが変更されたかどうかをチェックする間隔。秒単位で指定する。上の例では8時間。
Retry
スレーブサーバがRefreshに失敗した場合、再試行を行うまでの間隔。単位は秒数で、上の例では4時間。
Expire
スレーブサーバがマスターサーバからのすべての情報を破棄し、再度すべての情報をマスターから取り出すまでの間隔。単位は秒数で、上の例では1ヶ月(30日)。
Minimum
DNSサーバがキャッシュした内容を破棄する間隔。DNSがキャッシュサーバとして設定されていない場合はこの値は無視される。単位は秒数で、上の例では1日
SOA(Start Of Authority)
このゾーンの基本的な情報を記述する。
NS(Name Server)
ネームサーバを指定。複数ある場合は上がマスター、その下がスレーブというように指定できる。
MX(Mail eXchange)
このメールを受け取るメールサーバ名。MXレコードが複数あった場合の、メール受信の優先順位を指定する。最小は10で、10間隔で指定する。上記のように1つしかない場合は「10」でよい。
A(Address)
ホスト名とIPアドレスを対応させて定義する。左側はホスト名、右側はIPアドレスを記述する。ホスト名は上記のように省略形でよい(最後が「.」で終わっていなければ「.mydomain.ne.jp」がうしろにつく)。
CNAME(Canonical NAME)
ホストに対する別名定義。Aレコードで定義したホストを別の名前で定義する場合に用いられるが、現状はCNAMEをできるだけ使わず、すべてAレコードで定義したほうがよいとされている。
なお、以下のような設定も可能である。
@ IN A 192.168.0.2* IN CNAME ns
「@」を定義すると、ドメイン名「mydomain.ne.jp」でも「192.168.0.2」でアクセスさせることができる。また「*」(ワイルドカード)を定義すれば、ドメイン名の前にどんな文字列を入れても「ns.mydomain.ne.jp」として名前解決ができる(「testtesttest.mydomain.ne.jp」など)。
4)逆引きファイルを設定し、(1)で設定したファイル名で保存する。例では「/var/named/mydomain.rev」。
$TTL 3600@ IN SOA ns.mydomain.ne.jp. info.mydomain.ne.jp. (
2002010100 ;Serial
28800 ;Refresh
14400 ;Retry
2592000 ;Expire
86400) ;Minimum
IN NS ns.mydomain.ne.jp.
IN NS ns2.mydomain.ne.jp.
IN PTR mydomain.ne.jp.
IN A 255.255.255.0
2 IN PTR ns.mydomain.ne.jp.
PTR(PoinTeR)
IPアドレスに対するホスト名を定義する。上記の例では、まずこの逆引きゾーンが「mydomain.ne.jp」のものであることを定義し、「192.168.0.2」のIPアドレスが「ns.mydomain.ne.jp」という名前で逆引きさせることを定義している。通常DNSサーバを立てるホストは、ネームサーバの名前を導き出したほうがよいとされている。
A(Address)
ゾーンのネットマスクを定義する。
5)設定が完了したらnamedを起動する。正しく名前解決ができているか確認し、うまく動いていなければエラーログ「/var/log/message」を見て修正する。
# service named start# nslookup
[外向けDNSと内向けDNSの運用]
ADSLのNAT等を利用している場合、LANの外からはグローバルIPアドレスでアクセスさせ、LANの内部からはプライベートIPアドレスでアクセスさせるように設定することもできる。これを設定すればアクセス速度も上がるし、インターネットへの無駄なアクセスも低減できる。またルータの中には、LANの内部からグローバルIPでアクセスすると、ルータ自身のアドレスとしてアクセスしてしまうものもあるため、そのような場合はこのDNSサーバの構築方法が必須となってくる。
このようなDNSを構築するには、外向け用の設定ファイルと内向け用設定ファイルをそれぞれ用意し、named.confでviewステートメントを設定することで実現可能。
match-clients {
127.0.0.0/8;
192.168.0.0/24;
};
recursion yes;
zone "." {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "localhost.rev";
allow-update { none; };
};
zone "mydomain.ne.jp" IN {
type master;
file "mydomain-in.zone";
};
zone "0.168.192.in-addr.arpa" {
type master;
file "mydomain-in.rev";
};
};
view "external" {
match-clients { any; };
recursion no;
zone "mydomain.ne.jp" {
type master;
file "mydomain-ex.zone";
};
zone "333.222.111.in-addr.arpa" {
type master;
file "mydomain-ex.rev";
};
};
上の例では、WAN側グローバルIPアドレスが「111.222.333.*」である場合の設定。LAN側のプライベートIPアドレスは「192.168.0.*」で、このネットワークとlocalhostでは上の"internal"の設定が適用され、それ以外のホストはすべて下の設定が適用される。WAN側でrecursionをnoと設定することにより、再起問い合わせを禁止してキャッシュを書き換えられるのを防いでいる。