bind-9.2.1-16 の設定
作成 : 2003/10/12
bind-9.2.1 の入手
KDDI 研究所の FTP サイトから、bind-9.2.1-16.rpm をダウンロードする。 一緒に bind-utils-9.2.1-16.rpm もダウンロードしておく。 bind-utils パッケージには、dig や nslookup などのユーティリティが含まれる。
bind-9.2.1 と bind-utils-9.2.1 のインストール
rpm ユーティリティを使用して、パッケージをインストールする。
# rpm -Uvh bind-9.2.1-16.rpm
named や rndc などのユーティリティは /usr/sbin ディレクトリ、named.conf や rndc.conf などの設定ファイルは /etc ディレクトリ、named.ca などのゾーンファイルは /var/named ディレクトリにインストールされる。
# rpm -Uvh bind-utils-9.2.1-16.rpm
dig や nslookup などのユーティリティは /usr/sbin ディレクトリにインストールされる。
ドキュメント
bind-9.2.1-16 をインストールすると、/usr/share/doc/bind-9.2.1 ディレクトリ以下にドキュメントがインストールされる。 named.conf の設定については、/usr/share/doc/bind-9.2.1/arm ディレクトリ以下にインストールされる、HTML ドキュメントが参考になるだろう。
rndc.conf の設定と rndc.key の作成
rndc.conf は rndc ユーティリティの設定ファイル。 rndc ユーティリティは、リモートまたはローカルからネームサーバをコントロールすることができる。 不特定のホストからコントロールされると困るので、リモートとローカルで共通鍵を持ち、お互いの鍵が一致したときだけコントロールを許可するように設定できる。 rndc.key は共通鍵を格納するためのファイル。 (ファイル名は rndc.conf でなくてもよい)
rndc.key ファイルを作成するには、rndc-confgen ユーティリティを使用する。 -a オプションをつけて rndc-confgen を実行すると、/etc ディレクトリに rndc.key ファイルが作成される。 root ユーザと named ユーザ(named を実行するユーザ)だけ読み取り可能にしておく。
# rndc-confgen -a # chown root:named rndc.key # chmod 640 rndc.key
作成した rndc.key ファイルは以下のとおり。 文法については、rndc.conf と rndc.key の設定を参照。
# /etc/rndc.key
key rndc-key {
algorithm hmac-md5;
secret "bG4uCwl9gxmHHHEcoyWRQZ==";
};
rndc ユーティリティを実行するとき、サーバの指定がなければ localhost に接続し、キーの指定がなければ rnd.key を使用するよう、rndc.conf を編集する。 文法については、rndc.conf と rndc.key の設定を参照。
# /etc/rndc.conf
options {
default-server localhost;
default-key rndc-key;
};
server localhost {
keys rndc-key;
};
include /etc/rndc.key;
キャッシュサーバ
キャッシュサーバとしての named.conf の設定
キャッシュサーバとして使用するための設定を行う。 キャッシュサーバは、他ドメインの情報をキャッシュし、クライアントからのクエリに返答する。
include ステートメントで rndc 用のキーを読み込み、controls ステートメントでローカルホストからのみ rndc によるネームサーバの制御を許可するようにしている。
キャッシュサーバは、インターネット上の任意のホストからのクエリに応答する必要はない。 acl ステートメントでローカルネットワークのホストを定義し、options ステートメントの allow-query オプションでローカルネットワーク以外からのクエリに応答しないようにしている。 また、allow-recursion オプションで、ローカルネットワーク以外からの再帰的クエリを許可しないようにしている。
logging ステートメントで、syslog と named.root ファイルに動作の記録を書き込むよう設定している。 (この設定はデフォルトなので、明示的に記述する必要はない)
3 つの zone ステートメントは、ヒントゾーン(ルートネームサーバを記述)と localhost 正引きゾーン、localhost 逆引きゾーン( 0.0.127.in-addr.arpa )を定義している。 他ドメイン情報をキャッシュするだけのキャッシュサーバでも、この 3 つのゾーン定義をしておく。
文法については、named.conf の設定を参照。
### /etc/named.conf root:root 644 ###
acl "internal-acl" { 127/8; 192.168.0/24; };
include "/etc/rndc.key";
controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; };
options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
allow-query { internal-acl; };
allow-recursion { internal-acl; };
allow-transfer { none; };
};
logging {
channel "default_syslog" {
syslog daemon;
severity info;
};
channel "default_debug" {
file "named.run";
severity dynamic;
};
channel "null" {
null;
};
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
zone "." IN {
type hint;
file "named.root";
};
zone "localhost" IN {
type master;
file "zone/localhost";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "rev/0.0.127.in-addr.arpa";
allow-update { none; };
};
ヒントゾーンファイル( named.root )
ヒントゾーンは、ルートネームサーバの情報を持っている。 ヒントゾーンファイルは、bind パッケージに付属のものを使用する。 ( /var/named/named.ca という名前でインストールされている) named.conf で設定したとおり、/var/named/named.ca ファイルを /var/named/named.root ファイルにコピーし、named ユーザから読み取れるようパーミッションを設定する。
# mv /var/named/named.ca /var/named/named.root # chown named:named /var/named/named.root # chmod 600 /var/named/named.root
; This file holds the information on root name servers needed to ; initialize cache of Internet domain name servers ; configuration file of BIND domain name servers). ; ; This file is made available by InterNIC ; under anonymous FTP as ; file /domain/named.cache ; on server FTP.INTERNIC.NET ; ; last update: Nov 5, 2002 ; related version of root zone: 2002110501 ; ; ; formerly NS.INTERNIC.NET ; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ; ; formerly C.PSI.NET ; . 3600000 NS C.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ; ; formerly TERP.UMD.EDU ; . 3600000 NS D.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 ; ; formerly NS.NASA.GOV ; . 3600000 NS E.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 ; ; formerly NS.ISC.ORG ; . 3600000 NS F.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 ; ; formerly NS.NIC.DDN.MIL ; . 3600000 NS G.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 ; ; formerly AOS.ARL.ARMY.MIL ; . 3600000 NS H.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 ; ; formerly NIC.NORDU.NET ; . 3600000 NS I.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 ; ; operated by VeriSign, Inc. ; . 3600000 NS J.ROOT-SERVERS.NET. J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30 ; ; housed in LINX, operated by RIPE NCC ; . 3600000 NS K.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 ; ; operated by IANA ; . 3600000 NS L.ROOT-SERVERS.NET. L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12 ; ; housed in Japan, operated by WIDE ; . 3600000 NS M.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 ; End of File
localhost 正引きゾーンファイル( localhost )
localhost 正引きゾーンは、localhost の正引き情報を持っている。 localhost 正引きゾーンファイルは、bind パッケージに付属のものを使用する。 ( /var/named/localhost.zone という名前でインストールされている) named.conf で設定したとおり、/var/named/localhost.zone ファイルを /var/named/zone/localhost ファイルにコピーし、named ユーザから読み取れるようパーミッションを設定する。
# mv /var/named/localhost /var/named/zone/localhost # chown named:named /var/named/zone/localhost # chmod 600 /var/named/zone/localhost
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
1D IN NS @
1D IN A 127.0.0.1
localhost 逆引きゾーンファイル( 0.0.127.in-addr.arpa )
localhost 逆引きゾーンは、localhost の逆引き情報を持っている。 localhost 逆引きゾーンファイルは、bind パッケージに付属のものを使用する。 ( /var/named/named.local という名前でインストールされている) named.conf で設定したとおり、/var/named/named.local ファイルを /var/named/rev/0.0.127.in-addr.arpa ファイルにコピーし、named ユーザから読み取れるようパーミッションを設定する。
# mv /var/named/named.local /var/named/rev/0.0.127.in-addr.arpa # chown named:named /var/named/rev/0.0.127.in-addr.arpa # chmod 600 /var/named/rev/0.0.127.in-addr.arpa
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
ipchainsの設定
すべてのホストから53番ポートへの接続を許可するよう、ipchainsを設定する。 詳細は、ipchainsの設定を参照。 TCP と UDP 両方のプロトコルを許可しておくこと。
-A input -s 0/0 -d 0/0 53 -p tcp -j ACCEPT -A input -s 0/0 -d 0/0 53 -p udp ACCEPT
named を起動時開始サービスに追加
named がサーバ起動時に開始されるように、ntsysvコマンドなどで設定する。
ルータの設定
53 番ポート宛の TCP/UDP パケットを、ローカルセグメントのネームサーバに転送するよう設定する。
named プロセスの起動
named プロセスを起動する。 syslog にエラーが出力されないことを確認する。
# /etc/init.d/named start
イントラネット向けネームサーバ
秘密共有鍵の作成
共有秘密鍵は、ゾーン転送の署名に使用される。 マスタサーバとスレーブサーバで鍵が一致すれば、ゾーン転送が許可される。 共有秘密鍵を生成するには、dnssec-keygen を使用する。
dnssec-keygen -a algorithm -b keysize -n nametype name
# dnssec-keygen -a hmac-md5 -b 128 -n HOST host1
カレントディレクトリに、Khost1.+157+***.private と Khost1.+157+***.key というふたつのファイルが作成される。 (アルゴリズムに hmac-md5 を指定したとき、ふたつのファイルの内容は同じ) Khost1.+157+***.private の内容は、次のようになっている。
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: pWoBEQunxpk5qrntcdn5uw==
Khost1.+157+***.private の Key を元に、/etc/host1.key ファイルを作成する。 /etc/host1.key は root ユーザと named グループからだけ読み込みができるよう、パーミッションを設定しておく。
### /etc/host1.key root:named 640 ###
key host1 {
algorithm hmac-md5;
secret "pWoBEQunxpk5qrntcdn5uw==";
};
# chown root:named /etc/host1.key # chmod 640 /etc/host1.key
イントラネット向けネームサーバとしての named.conf の設定
イントラネット向けに、nina.jp ドメイン(192.168.0.X)のゾーン情報をネームサーバが持つよう設定する。 イントラネット向けなので、allow-query と allow-recursion でクエリを許可するホストと再帰的クエリを許可するホストを制限している。 host1.nina.jp(192.168.0.10)がマスタサーバ、host2.nina.jp(192.168.0.11)がスレーブサーバという設定。 文法については、named.conf の設定を参照。
### 192.168.0.10 (master server) /etc/named.conf root:root 644 ###
acl "internal-acl" { 127/8; 192.168.0/24; };
include "/etc/rndc.key";
controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; };
include "/etc/host1.key";
options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
allow-query { internal-acl; };
allow-recursion { internal-acl; };
};
logging {
channel "default_syslog" {
syslog daemon;
severity info;
};
channel "default_debug" {
file "named.run";
severity dynamic;
};
channel "null" {
null;
};
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
zone "." IN {
type hint;
file "named.root";
};
zone "localhost" IN {
type master;
file "zone/localhost";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "rev/0.0.127.in-addr.arpa";
allow-update { none; };
};
zone "nina.jp" IN {
type master;
file "zone/nina.jp";
allow-update { none; };
allow-transfer { key host1; };
also-notify { 192.168.0.11; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "rev/0.168.192.in-addr.arpa";
allow-update { none; };
allow-transfer { key host1; };
also-notify { 192.168.0.11; };
};
named.conf で、さきほど作成した /etc/host1.key を読み込むよう設定する。
include "/etc/host1.key";
host1 キーで認証したホストにゾーン転送を許可するよう設定する。 スレーブサーバ(192.168.0.11)に notify メッセージを送信する。
allow-transfer { key host1; };
also-notify { 192.168.0.11; };
スレーブサーバ(192.168.0.11)では、マスタサーバ(192.168.0.10)と通信をする際は host1 キーで署名するよう、named.conf を設定する。 (スレーブサーバに、マスタサーバの /etc/host1.key ファイルをコピーしておくこと) zone ステートメントで type を slave にし、masters オプションでマスタサーバを指定する。 文法については、named.conf の設定を参照。
### 192.168.0.11 (slave server) /etc/named.conf root:root 644 ###
acl "internal-acl" { 127/8; 192.168.0/24; };
include "/etc/rndc.key";
controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; };
include "/etc/host1.key";
server 192.168.0.10 { keys { host1; }; };
options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
allow-query { internal-acl; };
allow-recursion { internal-acl; };
};
zone "." IN {
type hint;
file "named.root";
};
zone "localhost" IN {
type master;
file "zone/localhost";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "rev/0.0.127.in-addr.arpa";
};
zone "nina.jp" IN {
type slave;
masters { 192.168.0.10; };
file "zone/nina.jp";
};
zone "0.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.0.10; };
file "rev/0.168.192.in-addr.arpa";
};
nina.jp 正引きゾーンファイル( nina.jp )
nina.jp 正引きゾーンは、localhost の正引き情報を持っている。 named.conf で設定したとおり、/var/named/zone/nina.jp ファイルを作成し、named ユーザから読み取れるようパーミッションを設定する。
# chown named:named /var/named/zone/nina.jp # chmod 600 /var/named/zone/nina.jp
$ORIGIN nina.jp.
$TTL 86400 ; 1 day
@ IN SOA host1.nina.jp. root.host1.nina.jp. (
2003101201 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS host1.nina.jp.
A 192.168.0.10
host1 A 192.168.0.10
host2 A 192.168.0.11
nina.jp 逆引きゾーンファイル( 0.168.192.in-addr.arpa )
nina.jp 逆引きゾーンは、nina.jp( 192.168.0.X )の逆引き情報を持っている。 named.conf で設定したとおり、/var/named/rev/0.168.192.in-addr.arpa ファイルを作成し、named ユーザから読み取れるようパーミッションを設定する。
# chown named:named /var/named/rev/0.168.192.in-addr.arpa # chmod 600 /var/named/rev/0.168.192.in-addr.arpa
$ORIGIN 0.168.192.in-addr.arpa.
$TTL 86400
@ IN SOA host1.nina.jp. host1.linux.nina.jp. (
2003101201 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS host1.nina.jp.
10 PTR host1.nina.jp.
11 PTR host2.nina.jp.
named プロセスの再起動
named プロセスを再起動する。
# /etc/init.d/named restart
rndc を使用してもよい。
# rndc reload
インターネット向けネームサーバ
インターネット向けネームサーバとしての named.conf の設定(他ドメインのスレーブサーバ)
インターネット向けに、xxx ドメインのゾーン情報の複製をネームサーバが持つよう設定する。 view ステートメントで、インターネットとイントラネットに提供するゾーン情報を分離する。 インターネット向けのビューでは、allow-query ですべてホストからのクエリを許可し、allow-recursion すべてのホストからの再帰的クエリを拒否している。 文法については、named.conf の設定を参照。
### /etc/named.conf root:root 644 ###
acl "internal-acl" { 127/8; 192.168.0/24; };
include "/etc/rndc.key";
controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; };
include "/etc/host1.key";
logging {
channel "default_syslog" {
syslog daemon;
severity info;
};
channel "default_debug" {
file "named.run";
severity dynamic;
};
channel "null" {
null;
};
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
};
view "internal-view" {
match-clients { internal-acl; };
allow-query { internal-acl; };
allow-recursion { internal-acl; };
zone "." IN {
type hint;
file "named.root";
};
zone "localhost" IN {
type master;
file "zone/localhost";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "rev/0.0.127.in-addr.arpa";
allow-update { none; };
};
zone "nina.jp" IN {
type master;
file "zone/nina.jp";
allow-update { none; };
allow-transfer { key host1; };
also-notify { 192.168.0.11; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "rev/0.168.192.in-addr.arpa";
allow-update { none; };
allow-transfer { key host1; };
also-notify { 192.168.0.11; };
};
};
view "external-view" {
match-clients { any; };
allow-query { any; };
allow-recursion { none; };
zone "xxx" IN {
type slave;
file "zone/xxx";
masters { x.x.x.x; };
};
};
イントラネット向けのビュー "internal-view" とインターネット向けのビュー "external-view" を定義する。 internal-view は、192.168.0.X/24 か 127.X.X.X/8 の IP アドレスを持つホストにゾーン情報を提供する。 internal-view では、192.168.0.X/24 か 127.X.X.X/8 のホストからのクエリと再帰的クエリを許可している。
external-view は、192.168.0.X/24 か 127.X.X.X/8 以外の IP アドレスを持つホストにゾーン情報を提供する。 インターネット上の任意のホストから参照されるので、external-view ですべてのホストからのクエリを許可している。 xxx ドメイン以外の情報を任意のホストから参照されないよう、external-view ですべてのホストからの再帰的クエリを拒否している。
allow-recursion で再帰的クエリを拒否しても、ネームサーバのキャッシュ参照を妨げることはできない。 しかし、キャッシュはビューごとに分離されるので、イントラネットからのクエリでキャッシュされたデータをインターネットホストから参照されることはない。
acl "internal-acl" { 127/8; 192.168.0/24; };
...
view "internal-view" {
match-clients { internal-acl; };
allow-query { internal-acl; };
allow-recursion { internal-acl; };
(イントラネット向けゾーン情報)
};
view "external-view" {
match-clients { any; };
allow-query { any; };
allow-recursion { none; };
(インターネット向けゾーン情報)
};
xxx 正引きゾーンファイル( xxx )
xxx 正引きゾーンは、xxx ドメインの正引き情報を持っている。 named を起動(再起動)したときマスタサーバからゾーン転送されるので、ファイルを作成する必要はない。
named プロセスの再起動
named プロセスを再起動する。
# /etc/init.d/named restart
rndc を使用してもよい。
# rndc reload
/var/named/zone/xxx ファイルが作成されることを確認する。
ダイナミック DNS アップデート
bind と isc-dhcpd でダイナミック DNS アップデート
isc-dhcpd と連動して、DHCP クライアントを動的に DNS に登録するよう設定する。 allow-update オプションで、key による署名を使用した更新を許可している。 共有秘密鍵は、イントラネット向けネームサーバで作成した鍵を使用する。
### /etc/named.conf root:root 644 ###
acl "internal-acl" { 127/8; 192.168.0/24; };
include "/etc/rndc.key";
controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; }; };
include "/etc/host1.key";
logging {
channel "default_syslog" {
syslog daemon;
severity info;
};
channel "default_debug" {
file "named.run";
severity dynamic;
};
channel "null" {
null;
};
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
options {
directory "/var/named";
pid-file "/var/run/named/named.pid";
};
view "internal-view" {
match-clients { internal-acl; };
allow-query { internal-acl; };
allow-recursion { internal-acl; };
zone "." IN {
type hint;
file "named.root";
};
zone "localhost" IN {
type master;
file "zone/localhost";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "rev/0.0.127.in-addr.arpa";
allow-update { none; };
};
zone "nina.jp" IN {
type master;
file "zone/nina.jp";
allow-update { key host1; };
allow-transfer { key host1; };
also-notify { 192.168.0.11; };
};
zone "168.192.in-addr.arpa" IN {
type master;
file "rev/168.192.in-addr.arpa";
allow-update { key host1; };
allow-transfer { key host1; };
also-notify { 192.168.0.11; };
};
};
view "external-view" {
match-clients { any; };
allow-query { any; };
allow-recursion { none; };
zone "xxx" IN {
type slave;
file "zone/xxx";
masters { x.x.x.x; };
};
};
/etc/dhcpd.conf でも、動的な DNS 更新を有効にする。 更新する際は、key による暗号化署名を使用するよう設定する。
default-lease-time 86400;
max-lease-time 259200;
ddns-update-style interim;
include "/etc/host1.key";
zone nina.jp. {
primary 127.0.0.1;
key host1;
}
zone 168.192.in-addr.arpa. {
primary 127.0.0.1;
key host1;
}
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.20 192.168.0.250;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.10 192.168.0.11;
option domain-name "nina.jp";
}
named プロセスの再起動
named プロセスを再起動する。
# /etc/init.d/named restart
rndc を使用してもよい。
# rndc reload
dhcpd プロセスの再起動
dhcpd プロセスを再起動する。
# /etc/init.d/dhcpd restart