DNSサーバ(bind)の構築
- Details
-
Last Updated on Saturday, 09 May 2009 07:25
-
Written by Administrator
以下では、インターネット上へ公開するDNSサーバの公開までの一般的な手順を示します。
1.DNSの公開までの手順 (インターネットにDNSを公開する場合の手順)
- プロパイダとの契約
はじめに、当たり前ですがインターネットプロパイダと契約して ください。 このとき、プロパイダに固定IPを複数利用できる契約を行ってください。(IP8とかIP16とかの契約)
固 定IPの数が1個または0でも構築する方法が無い訳ではありませんが手間がかかるのと正しい動作のDNSの構築ができないので、ある程度の規模の組織であ ればIP8以上で契約した方が良いでしょう。 取得した固定IPのうちの1つをDNSサーバ用のIPアドレスとして使います。
- NIC(Network Infomation Center)へDNSサーバ情報の登録
DNSサーバの構築が完了したなら、DNSを上位のDNSサーバに登録する申請を行います。申請の際に利用したいドメイン名とマスタとなるDNSサーバの IPアドレス(上記で決定したアドレス)で申し込みを行います。 なおNICへの登録はプロパイダが代行してくれるので、詳しい申請方法はプロパイダに相 談すると良いでしょう。
(プロパイダを使わずに「お名前.com」のようなレジストラに直接申し込む方法でも可能です)
- 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.)のダウンロードサイトから入手すれば良いでしょう。 インストールおよび設定手順は後ほど詳しく説明します。
2.BINDのインストール手順
以下ではBINDのインストール手順および設定手順を詳しく説明します。 なお、説明にあたり構成するDNSの条件として次のような例として説明を行うものとします。
なお、BINDのインストールにはディストリビューションが用意してあるパッケージを使う方法と、ソースファイルをコンパイルしてインストールを行う方法がありますが、メンテナンスや運用が楽なパッケージによる方法を以下では説明します。
最新のソースを常に追っていけるのであればソースファイルをコンパイルする方法もありかも知れませんが、通常の運用者には少し運用がきついのでパッケージの利用をお勧めします。
| 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(NIC)のIPアドレス | 210.200.zzz.11 |
| DNSに登録する自社のメールサーバのサーバ名 | mx.example.co.jp |
メールサーバのIPアドレス
| 202.xxx.yyy.5 |
なお、BINDの設定に使う設定ファイルは利用するOS毎に違うので、以下ではOS毎の設定に分けて説明を行います。
【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/* |
| ログファイルの場所 | /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 ; 202.200.zzz.11 ; };
// forwarders { // 202.200.zzz.11; // }; };
// 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 ; |
(/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. ; |
- BINDをシステム起動時に自動的に起動する
# chkconfig named on
【Debian 4(Ubuntu 8)の場合】
- BINDのインストール方法
$ sudo apt-get install bind9 bind9utils
目的
| 保存場所
| 従来の場所 |
| BINDの動作に関する基本の設定ファイル | /etc/bind/named.conf | ー(同) |
| named.confにおけるoptin部 | /etc//bind/named.conf.options | ー |
| named.confにおけるゾーン定義部 | /etc/bind/named.conf.local | ー |
| DNSのゾーン定義ファイルの保存場所 | /var/cache/bind/* | ー |
| ログファイルの場所 | /var/log/syslog | ー |
- 設定ファイルの編集
(/etc/bind/named.conf の内容)
// include "/etc/bind/named.conf.options";
// prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; };
// be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912
zone "localhost" { type master; file "/etc/bind/db.local"; };
zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; };
zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; };
zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; };
include "/etc/bind/named.conf.local"; |
(/etc/bind/named.conf.options の内容)
options { directory "/var/cache/bind";
auth-nxdomain no; # conform to RFC1035
allow-query { any; }; allow-transfer { localnet ; 210.200.zzz.11 ; }; // forwarders { // 210.200.zzz.11 ; // }; };
|
(/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 ; |
(/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. ; |
【Windows2000/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 |
| ログファイルの場所 | イベントログ |
- ルートキャッシュファイル作成
インターネットが利用できる環境で以下のコマンドを実行します。 このコマンドを実行することで最新のルートDNSの情報が取得できます。
> cd \Windows\system32\dns
> 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 ; 202.200.zzz.11 ; };
// forwarders { // 202.200.zzz.11; // }; 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 { !localnets; !localhost; }; // match-destinations { !localnets; !localhost; }; 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 ; |
(/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. ; |