本章では、インターネット用DNSを自サイトに構築する手順と、DNSサーバソフトのbindを使ったDNSサーバ構築例を説明します。
インターネットにサーバを公開するために、インターネット上のDNSに公開したいサーバを登録する必要があります。 登録の方法としては、
- プロパイダなどが用意しているDNSに登録してもらう。
- 自分の組織用DNSを用意して、ゾーン名を取得してそれをインターネット上のDNS名を管理しているNIC(Network Information Center)に登録する。
の2つの方法が考えられます。 会社などで公開するサーバがある程度の数がある場合には、商標とおなじように予めDNSのゾーン名を確保しておきたい場合にはⅱの方法でNICへドメイン名を登録する必要があります。
DNSのドメイン名を取得するには、DNS名を管理・維持・販売をしているレジストラという会社か利用プロパイダを使って登録を行います。(レジストラ会社の例: "お名前.com"、"GoDaddy")
また、登録後、DNSサーバのIPアドレスも指定する必要があります。このため、インターネット上にDNSサーバを公開するにあたり必要な手順は、大凡、次の手順となります。
- プロパイダと契約
プロパイダと契約してインターネットへ接続できるようにします。
このとき、接続に固定IPアドレスを複数利用できる契約を行ってください。(IP8とかIP16とかの契約)
固定IPアドレスの数が1個または0でも構築する方法が無い訳ではありませんが手間がかかるのと、将来IPv6などの利用時などで正しい動作のDNSの構築ができない可能性があるので、ある程度の規模の組織であれば、IP8以上で契約した方が良いでしょう。
ここで取得した固定IPアドレスのうちの1つを、DNSサーバ用のIPアドレスとして使います。
- NIC(Network Infomation Center)へDNSサーバ情報の登録
利用したいドメイン名を取得して、NICへ登録します。
NICへの登録はプロパイダが代行してくれるので、詳しい申請方法はプロパイダに相談すると良いでしょう。もちろん、プロパイダを使わずに、上で説明したようなレジストラからユーザ自身が取得・登録することも可能です。レジストラを使うメリットは、登録・管理料が安いことと、多くのトップレベルドメイン名(ex. "example.com"、"example.org"、"example.jp"等)が登録できることです。
- DNSサーバの構築
ドメイン名が決まったらインターネットに公開するDNSサーバをインストールします。 このとき、DNSサーバ用のソフトには BIND というソフトを利用する事をお勧めします。 BIND は古くからあるフリーのDNSサーバソフトで、信頼性が高く、またその情報が多く存在するので困った時に安心です。
BIND以外にもMS-DNSとかソフトなども存在しますが、インターネット公開用のDNSとしては少し問題があるのでここは素直にBINDを利用する方が得策です。
BINDは 各種Unix,Linux, SunOS, Mac, そしてWindows用があるので、自分が利用したいOS環境のものを入手すれば良いでしょう。
一般的なUnixやLinuxではOSにはじめからBINDが入っているのでそれをインストールしますが、WindowsなどはISC(Internet Systems Consortium, Inc.)のダウンロードサイトから入手すれば良いでしょう。 インストールおよび設定手順は後ほど詳しく説明します。
- DNSサーバの公開
DNSサーバの構築が終わったなら、そのDNSをインターネットに公開します。
公開するには、上位のDNSサーバに登録してもらう必要があるので、プロパイダまたはレジストラの管理画面を呼び出して、ⅲで構築したDNSを登録します。
BIND(Berkeley Internet Name Domain)は、インターネット上で運用されているDNS(Domain Name System)サーバとして一番有名なものでしょう。
本ページでは、BINDに関する一般的な情報や構築の仕方について説明しています。 なお、説明にあたり構成するDNSの条件として、次のような例として説明を行うものとします。
なお、BINDのインストールにはディストリビューションが用意してあるパッケージを使う方法と、ソースファイルをコンパイルしてインストールを行う方法がありますが、メンテナンスや運用が楽なパッケージによる方法を以下では説明します。
最新のソースを常に追っていけるのであればソースファイルをコンパイルする方法もありかも知れませんが、通常の運用者には少し運用がきついのでパッケージの利用をお勧めします。
取得したIPアドレスの範囲 202.xxx.yyy.0 - 202.xxx.yyy.15 DNSサーバに割り当てる固定IPアドレス 202.xxx.yyy.2 NICから取得したドメイン名 正引き example.co.jp 逆引き 16.yyy.xxx.202.in-addr.arpa NICに申請したDNSサーバの正式(FQDN)名 ns.example.co.jp DNSに登録する自社のメールサーバ名 mx.example.co.jp メールサーバのIPアドレス 202.xxx.yyy.5 プロパイダのDNS dns1.isp.ne.jp (210.200.xxx.5)
dns2.isp.ne.jp (210.200.xxx.6)ファイアーウォールのWAN側アドレス 202.xxx.yyy.14
なお、BINDの設定に使う設定ファイルは利用するOS毎に違うので、以下ではOS毎の設定に分けて説明を行います。
設定例でも指定を行っていますが、DNSの設定情報にはその登録されている情報の有効期間が定義されています。 有効期間は「SOAレコード」という部分で定義されており、BINDでは次のような形で定義しています。
$TTL 3600
@ IN soa ns.example.co.jp. root.example.co.jp. (
2009030900 ; Serial
3H ; Refresh(3 hour)
15M ; Retry(15 minutes)
1W ; Expire(1 week)
3600 ) ; Negative Cache TTL(1 hour)
;
ここで、SOAに登録している情報の意味は以下の通りとなります。
項目 設定例 設定目的 シリアル番号(Seria) 2009030900 DNSの情報に変更を加えたら数値を大きくする。数値が大きくなったことを他のDNSが認識すると、古い情報を破棄して新しい情報を取得するようになる。
セカンダリDNSサーバがデータをプライマリDNSサーバからリロードするための基準として使われます。
設定する値は、どこから初めても数字であれば構いませんが、前よりも小さな値を設定することは出来ません。(0は例外的に、リセット用の値として使えます)
混乱しないために、一般的は日付と枝番(2桁)での形式が良く利用されます。(yyyy+mm+dd+No)リフレッシュ期間(Refresh) 3H, 10800 セカンダリサーバが、再度、プライマリサーバから最新の情報を確認しに行くまでの時間。 リトライ間隔(Retry) 15M, 900 セカンダリがRefreshのタイミングで最新情報を入手できなかった時に、ここで指定された時間が経過後、再度、情報を入手する。 廃棄時間(Expire) 1W, 604800 プライマリDNSから最新データを入手できなくなった場合、最後のリフレッシュから何時間、データを維持するかを指定。この時間を経過すると、データは廃棄される。 ネガティブキャッシュの生存時間(Negative Cache TTL) 3600 DNSは存在しないドメイン情報もネガティブキャッシュとして、ここで指定された時間だけ保持します。 キャッシュの生存時間($TTL) 3600 SOAレコードではありませんが、ネガティブキャッシュではなく正常なキャッシュ情報の保持時間をここで指定します。
ここで指定された時間内は、キャッシュされた情報を利用します。
4-1. Redhat ES5(CentOS 5)の場合
- BINDのインストール方法
# yum install bind bind-utils
- BINDで利用する設定ファイル
Redhat(CentOS)では、デフォルトでセキュリティ強化の為にBINDの動作はchroot環境化(通称、牢獄環境)にて実行されるようになりました。 このため、BINDに関する各種設定ファイルは従来の場所ではなく /var/named/chroot 下の各ディレクトリに置かれたものを使うようになっています。
目的 保存場所 従来の場所 BINDの動作に関する基本の設定ファイル /var/named/chroot/etc/named.conf /etc/named.conf DNSのゾーン定義ファイルの保存場所 /var/named/chroot/var/named/* /var/named/* 正引きファイル db.example.co.jp - 逆引きファイル db.202.xxx.yyy - ログファイルの場所 /var/log/messages /var/log/messages
- 設定ファイルの編集
(/var/named/chroot/etc/named.confの内容)
//
options
{
// Those options should be used carefully because they disable port
// randomization
// query-source port 53;
// query-source-v6 port 53;
// Put files that named is allowed to write in the data/ directory:
directory "/var/named"; // the default
dump-file "data/cache_dump.db";
statistics-fil "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
// listen-on-v6 { any; };
auth-nxdomain no; # conform to RFC1035
allow-transfer {
localnets ;
};
// forwarders { # forwardersの設定は、DNSが直接ルートDNSに参照にいけない場合設定する
// 210.200.xxx.5 ;
// 210.200.xxx.6 ;
// };
};
//
logging
{
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
//key ddns_key
//{
// algorithm hmac-md5;
// secret "use /usr/sbin/dns-keygen to generate TSIG keys";
//};
view "external"
{
// match-clients { !localnets; !localhost; };
// match-destinations { !localnets; !localhost; };
match-clients { any; };
match-destinations { any; };
recursion no;
// all views must contain the root hints zone:
include "/etc/named.root.hints";
zone "example.co.jp" {
type master;
allow-query { any; };
file "db.example.co.jp";
};
zone "16.yyy.xxx.202.in-addr.arpa" {
type master;
allow-query { any; };
file "db.202.xxx.yyy";
};
};
(/var/named/chroot/var/named/db.example.co.jpの内容)
$TTL 3600
@ IN soa ns.example.co.jp. root.example.co.jp. (
2009030900 ; Serial
3H ; Refresh(3 hour)
15M ; Retry(15 minutes)
1W ; Expire(1 week)
3600 ) ; Negative Cache TTL(1 hour)
;
@ IN NS ns.example.co.jp.
@ IN MX 10 mx.example.co.jp.
*.example.co.jp. IN MX 10 mx.example.co.jp.;
ns IN A 202.xxx.yyy.2
mx IN A 202.xxx.yyy.5
fw IN A 202.xxx.yyy.14
;
(/var/named/chroot/var/named/db.202.xxx.yyyの内容)
$TTL 3600
@ IN soa ns.example.co.jp. root.example.co.jp. (
2009030900 ; Serial
3H ; Refresh(3 hour)
15M ; Retry(15 minutes)
1W ; Expire(1 week)
3600 ) ; Negative Cache TTL(1 hour)
;
@ IN NS ns.example.co.jp.;
2 IN PTR ns.example.co.jp.
5 IN PTR mx.example.co.jp.
14 IN PTR fw.example.co.jp. # FW経由のアクセスで相手側サーバがアドレスチェックを実施している可能性あるので、FWのアドレスを定義しておく。
;
- BINDをシステム起動時に自動的に起動する
# chkconfig named on
4-2. Debian 4.x(Ubuntu 8.x)の場合
- BINDのインストール方法
$ sudo apt-get install bind9 bind9utils
- BINDで利用する設定ファイル
目的 保存場所 従来の場所 BINDの動作に関する基本の設定ファイル /etc/bind/named.conf ←同 named.confにおけるoptin部 /etc/bind/named.conf.options ←同 named.confにおけるゾーン定義部 /etc/bind/named.conf.local ←同 DNSのゾーン定義ファイルの保存場所 /var/cache/bind/* ←同 正引きファイル db.example.co.jp - 逆引きファイル db.202.xxx.yyy - ログファイルの場所 /var/log/syslog ←同
- 設定ファイルの編集
(/etc/bind/named.conf の内容)
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
(/etc/bind/named.conf.options の内容)
options {
directory "/var/cache/bind";
auth-nxdomain no; # conform to RFC1035
allow-query { any; };
allow-transfer {
localnets ;
};
// forwarders { # forwardersの設定は、DNSが直接ルートDNSに参照にいけない場合設定する
// 210.200.xxx.5 ;
// 210.200.xxx.6 ;
// };
};
(/etc/bind/named.conf.local の内容)
//
match-clients { any; } ;
recursion no;zone "example.co.jp" {
type master;
allow-query { any; };
file "db.example.co.jp";
};
zone "16.yyy.xxx.202.in-addr.arpa" {
type master;
allow-query { any; };
file "db.202.xxx.yyy";
};
(/var/cache/bind/db.example.co.jpの内容)
$TTL 3600
@ IN soa ns.example.co.jp. root.example.co.jp. (
2009030900 ; Serial
3H ; Refresh(3 hour)
15M ; Retry(15 minutes)
1W ; Expire(1 week)
3600 ) ; Negative Cache TTL(1 hour)
;
@ IN NS ns.example.co.jp.
@ IN MX 10 mx.example.co.jp.
*.example.co.jp. IN MX 10 mx.example.co.jp.;
ns IN A 202.xxx.yyy.2
mx IN A 202.xxx.yyy.5
fw IN A 202.xxx.yyy.14
(/var/cache/bind/db.202.xxx.yyyの内容)
$TTL 3600
@ IN soa ns.example.co.jp. root.example.co.jp. (
2009030900 ; Serial
3H ; Refresh(3 hour)
15M ; Retry(15 minutes)
1W ; Expire(1 week)
3600 ) ; Negative Cache TTL(1 hour)
;
@ IN NS ns.example.co.jp.;
2 IN PTR ns.example.co.jp.
5 IN PTR mx.example.co.jp.
;
14 IN PTR fw.example.co.jp. # FW経由のアクセスで相手側サーバがアドレスチェックを実施している可能性あるので、FWのアドレスを定義しておく。
4-3. Windows 2000/2003の場合
- BINDのインストール方法
ISC(Internet Systems Consortium, Inc.)のダウンロードサイトか ら入手したzip形式のファイルを解凍してください。 解凍すると 「BINDInstall.exe」という実行ファイルがあるのでこれを実行します。 実行すると、bindをインストールするディレクトリ(デフォル ト: c:\windows\system32\dns)と、実行時のアカウント(デフォルト:named)とそのパスワードを求めてきます。 ユーザアカウン トはセキュリティの為に管理者権限以外のアカウント使う必要があるのでそのまま"named"としてパスワードを指定します。 ここでnamedのアカウ ントがWindowsに登録されていなければ指定したパスワードとともにWindowsに登録されます。
また、セキュリティ保護のためにファイルへのアクセス権が必要なのでBINDをインストールするファイルシステムはNTFSとなっている必要があります。
- BINDで利用する設定ファイル
Windows版のBINDをインストールしても、各種の設定ファイルは自動的に構成されません。 このため、1からファイル作成する必要がありますが、 記述方法自体はLinuxと変わりありません。 また、基本の設定ファイルであるnamed.confのファイル名が決まっているだけなので、それ以外の ファイル名についてはLinuxなどと合わせておくと混乱が少ないと思います。(なお、ファイルの内容について同じような記述が複数のファイルにあります が、間違いではありません)
目的 保存場所 従来の場所 BINDの動作に関する基本の設定ファイル c:\windows\system32\etc\named.conf - DNSのゾーン定義ファイルの保存場所 c:\windows\system32\etc\* - ルートキャッシュファイル named.root.txt - ローカルゾーン設定ファイル named.rfc1912.zones.txt - 「localdomain」ゾーン定義ファイル localdomain.zone.txt - 「localhost」正引き定義ファイル localhost.zone.txt - 「localhost」逆引き定義ファイル named.local.txt - 「localhost」ipv6逆引き定義ファイル named.ip6.local.txt - ローカルブロードキャスト定義ファイル named.broadcast.txt - ローカルネット定義ファイル named.zero.txt - 正引きファイル db.example.co.jp - 逆引きファイル db.202.xxx.yyy - ログファイルの場所 イベントログ -
- ルートキャッシュファイル作成
インターネットが利用できる環境で以下のコマンドを実行します。 このコマンドを実行することで最新のルートDNSの情報が取得できます。
C:\> cd \Windows\system32\dns
C:\> bin\dig @a.root-servers.net . ns > etc/named.root.txt
- 設定ファイルの編集
(c:\windows\system32\etc\named.confの内容)
//
options
{
// Those options should be used carefully because they disable port
// randomization
// query-source port 53;
// query-source-v6 port 53;
directory "C:\Windows\system32\dns\etc"; // the default
// dump-file "cache_dump.db";
// statistics-fil "named_stats.txt";
// memstatistics-file "named_mem_stats.txt";
// listen-on-v6 { any; };
auth-nxdomain no; # conform to RFC1035
allow-transfer {
localnets ;
};
// forwarders { # forwardersの設定は、DNSが直接ルートDNSに参照にいけない場合設定する
// 210.200.xxx.5 ;
// 210.200.xxx.6 ;
// };
empty-zones-enable no;
};
//
logging
{
channel default_debug {
file "named.run";
severity dynamic;
};
};
//key ddns_key
//{
// algorithm hmac-md5;
// secret "use /usr/sbin/dns-keygen to generate TSIG keys";
//};
view "external"
{
match-clients { any; };
match-destinations { any; };
recursion no;
// all views must contain the root hints zone:
zone "." IN {
type hint;
file "named.root.txt";
};
include "named.rfc1912.zones.txt";
zone "example.co.jp" {
type master;
allow-query { any; };
file "db.example.co.jp.txt";
};
zone "16.yyy.xxx.202.in-addr.arpa" {
type master;
allow-query { any; };
file "db.202.xxx.yyy.txt";
};
};
(C:\Windows\system32\dns\etc\named.rfc1912.zones.txt の内容)
// named.rfc1912.zones:
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
//
zone "localdomain" IN {
type master;
file "localdomain.zone.txt";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "localhost.zone.txt";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local.txt";
allow-update { none; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local.txt";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "named.broadcast.txt";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.zero.txt";
allow-update { none; };
};
(C:\Windows\system32\dns\etc\localdomain.zone.txt の内容)
$TTL 86400
@ IN SOA localhost root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS localhost
localhost IN A 127.0.0.1
(C:\Windows\system32\dns\etc\localhost.zone.txt の内容)
$TTL 86400
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS @
IN A 127.0.0.1
IN AAAA ::1
(C:\Windows\system32\dns\etc\named.local.txt の内容)
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
(C:\Windows\system32\dns\etc\named.ip6.local.txt の内容)
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
(C:\Windows\system32\dns\etc\named.broadcast.txt の内容)
$TTL 86400
@ IN SOA localhost. root.localhost. (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS localhost.
(C:\Windows\system32\dns\etc\named.zero.txt の内容)
$TTL 86400
@ IN SOA localhost. root.localhost. (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS localhost.
(/var/named/chroot/var/named/db.example.co.jp.txt の内容)
$TTL 3600
@ IN soa ns.example.co.jp. root.example.co.jp. (
2009030900 ; Serial
3H ; Refresh(3 hour)
15M ; Retry(15 minutes)
1W ; Expire(1 week)
3600 ) ; Negative Cache TTL(1 hour)
;
@ IN NS ns.example.co.jp.
@ IN MX 10 mx.example.co.jp.
*.example.co.jp. IN MX 10 mx.example.co.jp.;
ns IN A 202.xxx.yyy.2
mx IN A 202.xxx.yyy.5
fw IN A 202.xxx.yyy.5
;
(/var/named/chroot/var/named/db.202.xxx.yyy.txt の内容)
$TTL 3600
@ IN soa ns.example.co.jp. root.example.co.jp. (
2009030900 ; Serial
3H ; Refresh(3 hour)
15M ; Retry(15 minutes)
1W ; Expire(1 week)
3600 ) ; Negative Cache TTL(1 hour)
;
@ IN NS ns.example.co.jp.;
2 IN PTR ns.example.co.jp.
5 IN PTR mx.example.co.jp.
14 IN PTR fw.example.co.jp. # FW経由のアクセスで相手側サーバがアドレスチェックを実施している可能性あるので、FWのアドレスを定義しておく。
;
【MS-DNSの外部ドメイン名/内部ドメイン名】 MSの資料などを読むと、DNSの設計で外部(公開用)DNSと内部(組織内)DNSでドメインを違う名前として構成する資料を良く目にします。(例: (外部) example.co.jp, (内部) example.local ) しかし、このようなドメイン設計は個人的には違和感を感じます。 本来ドメイン名は組織単位や地域を表現するもので外部であろうと内部であれと同じ組織や地域なら単一のドメイン名とした方が論理的だというのが個人的な思いです。 上記のような場合、本来はすべて「example.co.jp」として設計するのが正しいと思うのですが如何でしょうか? どうしても外部と内部のドメイン名を分けるなら、外部を「example.co.jp または public.example.co.jp」、内部を「ad-domain.example.co.jp」というよな感じで設計するのがすっきりすると思うのですが。。。 それとも、MSの資料のような設計の方が論理的なのでしょうか? なんとなく、MSの方法はMS独自の実装による問題を回避するための苦肉の策のような気がしてなりません。 もちろん、技術的な整合性のためにMSの方法をつかう事は否定はしませんけど、なんとなくすっきりしないという個人的な感情ですけどね。 |
Copyright© 1998-2011 ROBATA.ORG