BINDの設定概要

BINDの設定概要

BINDの設定概要

BINDの設定概要です。

 

本サイト内の関連ページ

 

 

自分でDNSサーバを構築した場合はネームサーバ運営のためレジストリへの
申請依頼とWHOIS情報のネームサーバ項の変更を忘れずに行いましょう。
CentOS7でのBIND設定から一連の流れについては以下のページに記載しました。

 

また、オープンリゾルバにならないように設定しましょう。
オープンリゾルバであるかどうかは以下のサイトで確認できます。

 

wgetでの確認方法も記載されていました。

 

wget -qO - http://www.openresolver.jp/cli/check.html

Configured DNS server: [NOT open] 202.216.224.10(nsc0-06.dti.ad.jp)
Source IP address: [NOT open] 27.120.*.*(v-27-120-*-*.ub-freebit.net)

1行目はresolv.confでの(負荷分散後)DNSサーバ、
2行目は自サーバ(wgetを実行したサーバ)の結果です。

 

またJPRSが2016年1月に作成された資料が、
BINDの設定にあたり参考になります。

 

こちらはJPRSによる、DNSに関する過去の履歴です。

 

 

本ページの目次

 

 

DNSの動作について

a.b.comのIPアドレスを知りたい場合を例とします。

 

■1. クライアント自身のキャッシュを見る。

クライアント自身のDNSキャッシュを見ます。

※Windowsでのキャッシュの削除コマンドは以下です。
ipconfig /flushdns

 

■2. 無ければDNSリゾルバ機能でネームサーバに問い合わせに行く。

「再帰問い合わせ」を送信します。

 

優先DNSサーバに応答が無ければ設定している全ての優先/代替DNSサーバに
問い合わせに行きます。そして最初に応答してきたサーバを使用します。
問い合わせや、再度の問い合わせで返答が無い場合、17秒後に失敗と判定します。

 

■3. 「再帰問い合わせ」を受けたネームサーバが知っていた場合、それを返答。

自ゾーンへの問い合わせや、既にキャッシュしてたものについてはすぐに返答します。

 

■4. 知らなければ「反復問い合わせ」でネームサーバに聞きに行く。

基本的にはルートサーバから順に聞く。

 

→ルートサーバから.comサーバのIPが返ってくる。

 

→.comサーバからb.comサーバのIPが返ってくる。

 

→b.comサーバからa.b.comサーバのIPが返ってくる。

 

フォワーダ設定がされてればそのネームサーバへ。

※フォワーダ設定で指定されるサーバは、プロバイダのDNSサーバや
内部DNSサーバであれば外部DNSサーバなど。

 

■5. クライアントへの返答

それで、a.b.comのIPアドレスが分かればクライアントに返答する。

 

 

 

DNSのクエリ(問い合わせ)の種類について

 

■再帰問い合わせ

リゾルバが、ネームサーバに完全な回答を問い合わせる方法は「再帰問い合わせ」。

 

■反復問い合わせ

ネームサーバが他のゾーンのドメイン名を聞かれた場合、他のネームサーバに
問い合わせる方法は「反復問い合わせ」。

 

例としてa.b.comのIPアドレスを知りたい場合は、

まずルートサーバに聞く。comネームサーバのIPアドレスが返答される。
その後、comネームサーバに聞く。b.comネームサーバのIPアドレスが返答される。
最後に、b.comネームサーバに聞く。a.b.comネームサーバのIPアドレスが返答される。

 

 

 

BINDのインストール方法

 

■BINDのインストール確認
rpm -q bind bind-chroot caching-nameserver

→全てインストールされていないと表示されました。

 

■BINDの入手

CDから入手する場合です。
最新のパッケージへアップデートを行いましょう。

 

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom
cd Server
find -name '*bind*' -print
rpm -ivh bind-9.3.6-4.P1.el5_4.2.i386.rpm
rpm -ivh bind-chroot-9.3.6-4.P1.el5_4.2.i386.rpm
rpm -ivh caching-nameserver-9.3.6-4.P1.el5_4.2.i386.rpm

 

その後、/tmpなどにコピーし
umount -l /mnt/cdrom

 

※インストール時に警告を出さなくするにはrpmコマンドに--importオプション
と公開鍵のファイルを指定して登録しておきましょう。

 

■BINDをmakeでインストールする場合に必要なパッケージについて

インストール時にgccが必要です。また、gcc自体をインストールするには
依存性の欠如エラーが出るため、以下の順序でインストールしました。

 

まずgccをインストールするためメディアをマウントし

rpm -ivh kernel-headers-2.6.18-194.el5.i386.rpm
rpm -ivh glibc-headers-2.5-49.i386.rpm
rpm -ivh glibc-devel-2.5-49.i386.rpm
rpm -ivh libgomp-4.4.0-6.el5.i386.rpm

 

その後、

rpm -ivh gcc-4.1.2-48.el5.i386.rpm

 

■BINDの自動起動設定

 

chkconfig named on

 

自動起動の確認

chkconfig --list named

 

■BINDの起動確認

[root@ns1 sysconfig]# ps aux | grep named

root 24230 0.0 0.0 4992 776 pts/0 R+ 17:46 0:00 grep named

現在は起動されていませんでした。

※grep namedは現在実行したgrepプロセスが表示されてるだけです。

 

■psのオプション
a:自分以外のユーザーのプロセスも表示する
u:ユーザー名と開始時刻を表示する
x:制御端末のないプロセスの情報も表示する

 

■BINDの起動
/etc/init.d/named start
service named startでも可。
※/etc/init.d/ディレクトリ以下のスクリプトはserviceコマンドで操作可能です。

 

■BINDの起動確認
[root@ns1 sysconfig]# ps aux | grep named

named 24376 0.0 0.3 38860 3288 ? Ssl 17:50 0:00 /usr/sbin/named -u named -c /etc/named.caching-nameserver.conf -t /var/named/chroot
root 24465 0.0 0.0 4992 776 pts/0 R+ 17:53 0:00 grep named

起動しました。

 

■BINDのオプション

 

上記の結果表示のうち、namedのCOMMAND列を見てみました。
見にくいので以下に改行します。

/usr/sbin/named
-u named
-c /etc/named.caching-nameserver.conf
-t /var/named/chroot

 

BINDのオプションを見ていきます。

 

・「-u ユーザー名」→このユーザーで動作します。

 

・「-c 代替のコンフィグファイル」→代わりのコンフィグファイルを指定します。

※named.confの作成前にnamedをstartすると、このオプションが付いて、
/etc/named.caching-nameserver.confを読みに行くのだと思う。
named.confを作成してからnamedをstartするとこのオプションは付かなかった。

 

・「-t ディレクトリ」→chroot()するべきディレクトリを指定します

 

・「-p ポート番号」→ポート番号

 

※BINDの設定ファイルの1つ、name.confは2つに分かれてる。
・/var/named/chroot//etc/named.caching-nameserver.conf
・/var/named/chroot//etc/named.rfc1912.zones

 

※chrootについて

 

 

/etcにnamed.caching-nameserver.confとnamed.rfc1912.zonesの
シンボリックリンクが有る。

 

ls -al /etc | less

named.caching-nameserver.conf -> /var/named/chroot//etc/named.caching-nameserver.conf
named.rfc1912.zones -> /var/named/chroot//etc/named.rfc1912.zones

 

上記から、
/etcのnamed.caching-nameserver.confの実体は
/var/named/chroot//etc/named.caching-nameserver.conf

 

/etcのnamed.rfc1912.zones の実体は
/var/named/chroot//etc/named.rfc1912.zones

 

■named.confの作成

 

まずnamed.caching-nameserver.confをnamed.confとしてコピーする。

 

※サンプルファイル「/usr/share/doc/bind-バージョン番号/sample/etc
/named.conf」からnamed.confを作成しても良いかもしれない。

 

cd /var/named/chroot/etc
cp -p named.caching-nameserver.conf named.conf

 

■シンボリックリンクの作成

そのnamed.confのシンボリックリンクを/etcにnamed.confとして作成。

 

cd /etc
ln -s /var/named/chroot/etc/named.conf named.conf

 

■/etcのnamed.confのグループ変更
chgrp -h named named.conf

※-hをつけないとシンボリックリンクでは無く実体に対してchgrpが発行される。

 

 

 

ゾーンファイルについて

 

$TTL

はレコードの寿命

Time To Live

 

このサーバからゾーン情報を取得した側のサーバ側が、取得情報の有効期間として
参照する。短すぎると、毎回他サーバが参照しに来る。

 

 

 

named.confについて

 

オプションや書き方は以下のサイトを参照しました。

・http://www.kozupon.com/bind/bind2.html(リンク切れ)

 

named.confの記載が多い時の対処としてファイルを読みにいくために
「include」を使用しているnamed.confの設定例もよく見かける。

 

include "/etc/named.rfc1912.zones";
include "/etc/named.root.hints";

など。

 

 

 

aclステートメント

 

ACL(アクセスコントロールリスト)を定義する箇所です。

 

acl ACL名 {
192.168.1.0/24;
127.0.0.1;
};

 

以下の名前はデフォルトで定義されています。

any
すべてのアドレス

 

none
anyの逆。すべてのアドレスを否定

 

localhost
DNSホストに実装されたすべてのネットワーク・インタフェイスに割り当てられたIPアドレス(IPv4, IPv6)

 

localnets
DNSホストに実装されたすべてのネットワーク・インタフェイスに割り当てられたネットワーク(IPv4, IPv6)

 

引用元

 

 

 

controlステートメント

 

※rndc関連のものもある。

include "/etc/rndc.key";、key "rncdkey" {

など。

 

 

 

rndcの設定・使用方法

/usr/local/sbin/rndc
で使用可能です。

 

rndc(remote name server daemon control)とは、
BINDを動作させたまま、動作状態の確認や
設定ファイルのリロードを行うことができます。
他のPCから遠隔制御も可能です。
遠隔制御では、セキュリティのため暗号化通信路を
作成し、安全に通信することができるようになっています。

 

引用元

 

■rndc.confの生成

/usr/local/sbin/rndc-confgen > /etc/rndc.conf

 

※rndc-confgenのパスは/usr/sbin/rndc-confgenかもしれません。

 

[root@ns1 etc]# /usr/sbin/rndc-confgen > /etc/rndc.conf

 

[root@ns1 etc]# cat /etc/rndc.conf

# Start of rndc.conf
key "rndckey" {
algorithm hmac-md5;
secret "aaaaaaaaaaaaaaaaaaaaaaaa";
};

 

options {
default-key "rndckey";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf

 

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndckey" {
# algorithm hmac-md5;
# secret "aaaaaaaaaaaaaaaaaaaaaaaa";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndckey"; };
# };
# End of named.conf

 

■named.confへの追加

上記のうち以下の箇所を、#を外してnamed.confに追加する。

key "rndckey" {
algorithm hmac-md5;
secret "aaaaaaaaaaaaaaaaaaaaaaaa";
};

 

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndckey"; };
};

 

 

※named.confに

key "rndckey" {
algorithm hmac-md5;
secret "aaaaaaaaaaaaaaaaaaaaaaaa";
};

を記載するのと、
/etc/rndc.keyが有って、

include "/etc/rndc.key";

と記載するのとは同じ動作だと思います。

 

※rndc.keyを使用する場合、まずrndc.confに記載してある
secret "aaaaaaaaaaaaaaaaaaaaaaaa"を、rndc.keyを編集し入れ替えておくこと。
rndc.keyはrndc-confgen -a -b 512 -k rndc.keyで作成可能です。

 

 

■namedの再起動

/etc/init.d/named restart

 

■状態確認

/usr/sbin/rndc status

 

参照元

 

BINDには、rndcというユーティリティコマンドが含まれています。それを
使用することで、ローカルホスト又はリモートホストからのnamed デーモンの
コマンドライン管理ができるようになります。 他のシステムの権限のない
ユーザーによってサーバーのBINDが制御されるのを防ぐため、共有秘密鍵
方法を使用して、 特定のホストに明示的に特権を与えます。
このことは、/etc/named.confとrndcの設定ファイルである/etc/rndc.conf
の両方で同一の鍵を所有する必要があることを意味します。

 

引用元 ※リンク切れ

http://www.jp.redhat.com/manual/Doc9/rhl-rg-ja-9/s1-bind-rndc.html

 

optionsステートメントで、デフォルトの定義

statistics-file "/var/named/data/named_stats.txt"

が有る場合、rndc statsコマンドを打つと
/var/named/chroot/var/named/data/named_stats.txtが追記されました。

 

 

 

optionsステートメント

optionsステートメントに多くのゾーン定義に共通した設定を記載して
おけば、個々のゾーン定義部でそれぞれ記載しなくても良いです。

 

■listen-on port 53

待ち受けるポート番号。

 

例:listen-on port 53 { any; };

クエリを、すべてのインタフェースの port 53で待ち受ける。
インターフェース毎に分けたりすることが可能です。

 

■notify [yes | no]

このDNSサーバがSOAであるマスターゾーンについて、ゾーンデータに
更新があった際に、その更新をあらかじめ指定されたスレーブサーバに
伝えるかどうかを決定します。この値は、各ゾーンの設定部分でも
指定変更可能です。

 

■version
version "Non version";

バージョン情報を隠す

 

■forward

forwardersオプションが記載されている時のみ有効になります。
forwardersにはプロバイダのDNSサーバなどのアドレスを
記載したりが多いですね。

 

forward ( only | first );
first

自キャッシュに答えが無ければforwardersで
指定したネームサーバに問い合わせし、答えが無ければ
自分でルートサーバへ問い合わせに行く。

 

only

転送先のネームサーバに問い合わせする。
自分でルートサーバへ問い合わせ、っていう動作は行わない。
自キャッシュに有るものは答えられる。

 

■allow-transfer

ゾーン転送要求を許可するスレーブサーバのIPアドレス指定します。

 

■allow-query

クエリ(=ここでは名前解決のこと)を許可するホストを指定します。

 

■allow-query-cache

キャッシュ情報を提供するホストを指定します。

 

■recursion

再帰的クエリに対する措置を決定します。
「yes」の場合、知らないゾーンについてのクエリを受けると、
他のDNSサーバに問い合わせます。
「no」の場合、知らないゾーンに関するクエリを
受けても、他のサーバーへの問い合わせを行わない。

 

 

■allow-recursion

ここで定義されたホストの要求に対しては他のサーバへの問い合わせを行う。
(=再帰的クエリを処理する。)
allow-query-cacheを記載した場合の動作等の詳細の記載がありました。

http://www.kozupon.com/bind/bind2.html ※リンク切れ

 

allow-query
allow-query-cache
allow-recursion

上記3つは明示的に記載しておいた方が良いと思います。
上記が記載されていない場合のデフォルト値は

allow-query { any; };
allow-query-cache { localnets; localhost; };
allow-recursion { localnets; localhost; };
※allow-transferは多分{ any; };

しかしながら、

allow-query { any; };

のみ明示的に記載している場合は、残り2つも
anyとなるなどの把握すべき点がありますので
詳細はISCのサイト等で確認して下さい。

 

■デフォルトの定義について

any 全てのホスト

 

none 全てのホストに一致しない

 

localhost サーバの全インターフェースアドレスに一致する

 

localnets サーバのインタフェースと同じネットワーク上のホストに一致する

 

 

 

logging

 

logging {
channel "default-log" {
file "/var/named/log/default.log" versions 5 size 10M;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};

 

category default { "default-log"; };
};

 

引用元
BINDのロギング機能

 

まずログ格納用ディレクトリを作成しておきます。
cannel、categoryは複数記載可能です。

 

■channel

任意の名前「dufault-log」と定義

 

■file
出力場所を指定。

※ファイル意外にも、以下を指定可能です。

・syslogデーモンに送信するには「file syslog ( syslogのファシリティ ); 」
・標準エラーに出力するには 「file stderr; 」
・破棄する「file null;」

 

参照元
BIND 9の運用情報収集と分析方法 (1/2)

 

■versions

指定した数字の数だけログを保存する。
namedの再起動、リロードで自動ローテーションされる。

 

■size

ログの上限サイズ。
上限サイズに達した場合、出力が停止するのみなのか、
自動ローテーションされるのかは確認必要。

 

■severity

以下を設定可能
severity { critical | error | warning | notice | info | debug [level] | dynamic ];

 

 

severityは、syslogのオプションと同じように使います。
出力先がsyslogではなくファイルの場合でも機能します。
severityがここで設定された値より高いメッセージだけ出力されます。
syslogに記録する場合、syslog.confに記述したseverityも適用されます

serverityに dynamic を設定すると、グローバルレベルにしたがって
メッセージを出力するようになります。

 

引用元 ※リンク切れ

http://www.nasuinfo.or.jp/FreeSpace/yterada/admin/dns/bind8/cfgguide/logging.html

 

 

■print-severity [ yes|no ];

 

■print-category [ yes|no ];

 

■print-time [ yes|no ];

 

ログファイル中の日時、ログレベル、ログカテゴリの表示・非表示

 

 

■category

channelだけ設定しても、ログは出力されなくて、どんなログを出力するかはcategory
で設定します。定義できるcategoryは色々有ります。以下など。

「xfer-in」受信したゾーン転送の記録
「xfer-out」送信したゾーン転送の記録
「queries」問い合わせクエリーの記録

 

記載方法は以下です。チャンネルは複数入れ込むことが可能です。

category queries { "設定したチャンネル名"; };
category lame-servers { null; };
category default { "default-log"; };

 

引用・参照元

 

 

■view

view{};セクションを使う場合、match-clientsで
指定するIPアドレスやネットワークは
先頭のview{};セクションから順に評価されます

 

引用元

 

外向けの DNS と内向けの DNS を一台のサーバで運用する。
bind8 では named を二つ起動して、
listen-on で振り分けるという方法で実現していた。

 

引用元
bind9 設定

 

 

■view "任意の名前" {

localnetとかlanとか内部向けviewの定義。

例:view "localnet" {

 

 

■match-clients

ここで設定したホストがゾーン情報を参照できる

例:match-clients { 192.168.10/24; }; 
例:match-clients { localnet; };  

 

 

■match-destinations

 

デスティネーション IP アドレスが address_match_list と
一致すればマッチする。
ここでいうデスティネーション IP アドレスは、
ネームサーバのインターフェースに割り当てた
IP アドレスになる。複数のインタフェースを持つサーバで、
インタフェースごとにネームサーバの返答を変えたいときに
使用する。
match-destinations クローズを省略すると、
すべてのデスティネーション IP アドレスにマッチする。
address_match_list には、IP アドレス、
acl ステートメントで定義した ACL 名、
key ステートメントで定義した KEY ID を
指定することができる。

 

引用元

 

 

■zone "." {

ルートネームサーバと記載したファイルを指定。
ディレクトリはoptionsで記載した所。

 

zone "." IN {
type hint;
file "named.ca";
};

 

 

■逆引きのループバック

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "named.local";
};

 

自分自身を示す ループバックアドレス "127.0.0.1"の
ホスト名 は"localhost"である、という逆引きの
名前解決 を担うゾーンファイルです。

 

引用元
既存のゾーンファイルの内容(~9.3.x)

 

 

■内部向け正引きゾーンファイル

例:a.b.c.jpの内部向け正引きゾーンファイル

zone "a.b.c.jp" {
type master;
file "a.b.c.jp.internal.zone";
};

 

 

■逆引きゾーンファイル

例:192.168.1.0/24の逆引きゾーンファイル

zone "1.168.192.in-addr.arpa" {
type master;
file "1.168.192.rev";
};

 

 

■view "任意の名前" {

globalnetとかwanとか外部向けviewの定義。

view "globalnet" {

 

view "wan" {

 

■match-clients

ここで設定したホストがゾーン情報を参照できる

match-clients { globalnet; };

 

 

■外部向け正引きゾーンファイル

zone "a.b.c.jp" {
type master;
file "a.b.c.jp.external.zone";
};

 

 

■逆引きゾーンファイル

 

プロバイダからグローバルIPアドレスを/28などで貰った場合は
プロバイダごとに書き方が違うため、書き方をプロバイダへ聞きましょう。

 

zone "4/28.3.2.1.in-addr.arpa" {
type master;
file "filename";
};

 

参照元