BINDの設定概要です。
本サイト内の関連ページ
自分でDNSサーバを構築した場合はネームサーバ運営のためレジストリへの
申請依頼とWHOIS情報のネームサーバ項の変更を忘れずに行いましょう。
CentOS7でのBIND設定から一連の流れについては以下のページに記載しました。
また、オープンリゾルバにならないように設定しましょう。
オープンリゾルバであるかどうかは以下のサイトで確認できます。
wgetでの確認方法も記載されていました。
wget -qO - http://www.openresolver.jp/cli/check.html
1行目はresolv.confでの(負荷分散後)DNSサーバ、
2行目は自サーバ(wgetを実行したサーバ)の結果です。
またJPRSが2016年1月に作成された資料が、
BINDの設定にあたり参考になります。
こちらはJPRSによる、DNSに関する過去の履歴です。
本ページの目次
a.b.comのIPアドレスを知りたい場合を例とします。
クライアント自身のDNSキャッシュを見ます。
「再帰問い合わせ」を送信します。
優先DNSサーバに応答が無ければ設定している全ての優先/代替DNSサーバに
問い合わせに行きます。そして最初に応答してきたサーバを使用します。
問い合わせや、再度の問い合わせで返答が無い場合、17秒後に失敗と判定します。
自ゾーンへの問い合わせや、既にキャッシュしてたものについてはすぐに返答します。
基本的にはルートサーバから順に聞く。
→ルートサーバから.comサーバのIPが返ってくる。
→.comサーバからb.comサーバのIPが返ってくる。
→b.comサーバからa.b.comサーバのIPが返ってくる。
フォワーダ設定がされてればそのネームサーバへ。
※フォワーダ設定で指定されるサーバは、プロバイダのDNSサーバや
内部DNSサーバであれば外部DNSサーバなど。
それで、a.b.comのIPアドレスが分かればクライアントに返答する。
リゾルバが、ネームサーバに完全な回答を問い合わせる方法は「再帰問い合わせ」。
ネームサーバが他のゾーンのドメイン名を聞かれた場合、他のネームサーバに
問い合わせる方法は「反復問い合わせ」。
例としてa.b.comのIPアドレスを知りたい場合は、
→全てインストールされていないと表示されました。
CDから入手する場合です。
最新のパッケージへアップデートを行いましょう。
その後、/tmpなどにコピーし
umount -l /mnt/cdrom
※インストール時に警告を出さなくするにはrpmコマンドに--importオプション
と公開鍵のファイルを指定して登録しておきましょう。
インストール時にgccが必要です。また、gcc自体をインストールするには
依存性の欠如エラーが出るため、以下の順序でインストールしました。
まずgccをインストールするためメディアをマウントし
その後、
自動起動の確認
[root@ns1 sysconfig]# ps aux | grep named
root 24230 0.0 0.0 4992 776 pts/0 R+ 17:46 0:00 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
起動しました。
上記の結果表示のうち、namedのCOMMAND列を見てみました。
見にくいので以下に改行します。
BINDのオプションを見ていきます。
※named.confの作成前にnamedをstartすると、このオプションが付いて、
/etc/named.caching-nameserver.confを読みに行くのだと思う。
named.confを作成してからnamedをstartするとこのオプションは付かなかった。
※chrootについて
/etcにnamed.caching-nameserver.confとnamed.rfc1912.zonesの
シンボリックリンクが有る。
ls -al /etc | less
上記から、
/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.caching-nameserver.confをnamed.confとしてコピーする。
※サンプルファイル「/usr/share/doc/bind-バージョン番号/sample/etc
/named.conf」からnamed.confを作成しても良いかもしれない。
そのnamed.confのシンボリックリンクを/etcにnamed.confとして作成。
※-hをつけないとシンボリックリンクでは無く実体に対してchgrpが発行される。
はレコードの寿命
このサーバからゾーン情報を取得した側のサーバ側が、取得情報の有効期間として
参照する。短すぎると、毎回他サーバが参照しに来る。
オプションや書き方は以下のサイトを参照しました。
named.confの記載が多い時の対処としてファイルを読みにいくために
「include」を使用しているnamed.confの設定例もよく見かける。
など。
ACL(アクセスコントロールリスト)を定義する箇所です。
例
以下の名前はデフォルトで定義されています。
anyすべてのアドレス
noneanyの逆。すべてのアドレスを否定
localhostDNSホストに実装されたすべてのネットワーク・インタフェイスに割り当てられたIPアドレス(IPv4, IPv6)
localnetsDNSホストに実装されたすべてのネットワーク・インタフェイスに割り当てられたネットワーク(IPv4, IPv6)
引用元
※rndc関連のものもある。
include "/etc/rndc.key";、key "rncdkey" {
など。
/usr/local/sbin/rndc
で使用可能です。
rndc(remote name server daemon control)とは、
BINDを動作させたまま、動作状態の確認や
設定ファイルのリロードを行うことができます。
他のPCから遠隔制御も可能です。
遠隔制御では、セキュリティのため暗号化通信路を
作成し、安全に通信することができるようになっています。
引用元
/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に追加する。
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で作成可能です。
/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ステートメントに多くのゾーン定義に共通した設定を記載して
おけば、個々のゾーン定義部でそれぞれ記載しなくても良いです。
待ち受けるポート番号。
クエリを、すべてのインタフェースの port 53で待ち受ける。
インターフェース毎に分けたりすることが可能です。
このDNSサーバがSOAであるマスターゾーンについて、ゾーンデータに
更新があった際に、その更新をあらかじめ指定されたスレーブサーバに
伝えるかどうかを決定します。この値は、各ゾーンの設定部分でも
指定変更可能です。
バージョン情報を隠す
forwardersオプションが記載されている時のみ有効になります。
forwardersにはプロバイダのDNSサーバなどのアドレスを
記載したりが多いですね。
自キャッシュに答えが無ければforwardersで
指定したネームサーバに問い合わせし、答えが無ければ
自分でルートサーバへ問い合わせに行く。
転送先のネームサーバに問い合わせする。
自分でルートサーバへ問い合わせ、っていう動作は行わない。
自キャッシュに有るものは答えられる。
ゾーン転送要求を許可するスレーブサーバのIPアドレス指定します。
クエリ(=ここでは名前解決のこと)を許可するホストを指定します。
キャッシュ情報を提供するホストを指定します。
再帰的クエリに対する措置を決定します。
「yes」の場合、知らないゾーンについてのクエリを受けると、
他のDNSサーバに問い合わせます。
「no」の場合、知らないゾーンに関するクエリを
受けても、他のサーバーへの問い合わせを行わない。
ここで定義されたホストの要求に対しては他のサーバへの問い合わせを行う。
(=再帰的クエリを処理する。)
allow-query-cacheを記載した場合の動作等の詳細の記載がありました。
上記3つは明示的に記載しておいた方が良いと思います。
上記が記載されていない場合のデフォルト値は
しかしながら、
のみ明示的に記載している場合は、残り2つも
anyとなるなどの把握すべき点がありますので
詳細はISCのサイト等で確認して下さい。
any 全てのホスト
none 全てのホストに一致しない
localhost サーバの全インターフェースアドレスに一致する
localnets サーバのインタフェースと同じネットワーク上のホストに一致する
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は複数記載可能です。
任意の名前「dufault-log」と定義
※ファイル意外にも、以下を指定可能です。
指定した数字の数だけログを保存する。
namedの再起動、リロードで自動ローテーションされる。
ログの上限サイズ。
上限サイズに達した場合、出力が停止するのみなのか、
自動ローテーションされるのかは確認必要。
以下を設定可能
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
ログファイル中の日時、ログレベル、ログカテゴリの表示・非表示
channelだけ設定しても、ログは出力されなくて、どんなログを出力するかはcategory
で設定します。定義できるcategoryは色々有ります。以下など。
記載方法は以下です。チャンネルは複数入れ込むことが可能です。
category queries { "設定したチャンネル名"; };
category lame-servers { null; };
category default { "default-log"; };
引用・参照元
view{};セクションを使う場合、match-clientsで
指定するIPアドレスやネットワークは
先頭のview{};セクションから順に評価されます
引用元
外向けの DNS と内向けの DNS を一台のサーバで運用する。
bind8 では named を二つ起動して、
listen-on で振り分けるという方法で実現していた。
引用元
bind9 設定
localnetとかlanとか内部向けviewの定義。
ここで設定したホストがゾーン情報を参照できる
デスティネーション IP アドレスが address_match_list と
一致すればマッチする。
ここでいうデスティネーション IP アドレスは、
ネームサーバのインターフェースに割り当てた
IP アドレスになる。複数のインタフェースを持つサーバで、
インタフェースごとにネームサーバの返答を変えたいときに
使用する。
match-destinations クローズを省略すると、
すべてのデスティネーション IP アドレスにマッチする。
address_match_list には、IP アドレス、
acl ステートメントで定義した ACL 名、
key ステートメントで定義した KEY ID を
指定することができる。
引用元
ルートネームサーバと記載したファイルを指定。
ディレクトリは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"である、という逆引きの
名前解決 を担うゾーンファイルです。
例: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";
};
globalnetとかwanとか外部向けviewの定義。
例
view "globalnet" {
view "wan" {
ここで設定したホストがゾーン情報を参照できる
例
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";
};
参照元