bind 9.11 9.12
bind (named)は、現在、
9.11系と、9.12系が主流です。9.9は、サポートが終わっています!
9.12系の方がバージョンが新しいですが、サポートの期限が、短いです。
9.11系は、ESV(Extended Support Version)とサポートの期間が長いです。
オーソドックスな機能を使い、長いサポートを利用するのであれば、
9.11系のほうがよいかと思います。
9.12系は、9.11系に対して、
・新機能
NSEC Aggressive use, Serve Stale, Response Policy Service Interface
・暗号化のアップデート
・パフォーマンスの向上
と、積極的な機能改善を行っているようです。
https://www.isc.org/blogs/bind-9-12-0-released/
bind 9.12のあとは、bind14/bind15が、登場するようです・・・
ここでは、「権威サーバー(権威DNSサーバー)(権威ネームサーバー)(コンテンツサーバー)」の構築方法を書きます。
「権威サーバー」と対局にあるのが、「キャッシュDNSサーバ」です。
yum install
# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
#yum install bind
でインストールを試みると、
Installing: bind x86_64 32:9.9.4-73.el7_6 updates 1.8 M
と
9.9.4
を入れようとします。
セキュリティアップデートが頻繁に行われる bind(named)では、ソースインストールがいいかと思います。
そもそも、bind(named)を自分で管理するな。という考えも、ごもっともです(笑)。
bind (named) 9.11 ソースインストール
# yum groupinstall "Development Tools"
↑開発関係のファイル群を入れます。
# wget https://www.isc.org/downloads/file/bind-9-11-6/?version=tar-gz -O bind-9.11.6.tar.gz
↑ bind 9.11をダウンロードします。
# wget https://downloads.isc.org/isc/bind9/9.11.13/bind-9.11.13.tar.gz
↑ 2019/11/22 現在のバージョン、9.11.13 では・・・(2019/11/22 更新)
# tar xzvf bind-9.11.6.tar.gz # cd bind-9.11.6/ # ./configure --help
↑「–help」で、構築時のオプションを見ることができます。
Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local]
と出てきます。
今回、「/usr/local/bind9/」に入れたいと思います。
バージョンを明確にするために、実際には、
/usr/local/bind-9.11.6/
に入れて、
/usr/local/bind-9.11.6/
から
/usr/local/bind9/
にシンボリックリンクを貼りたいと思います。
# ./configure --prefix=/usr/local/bind-9.11.6/ checking for python2.7... /usr/bin/python2.7 checking if /usr/bin/python2.7 is python2 version >= 2.7 or python3 version >= 3.2... yes checking Python module 'argparse'... yes checking Python module 'ply'... no checking for Python support... no
↑、Python の plyモジュールがない!とエラーになりました。
# yum install python-ply --enablerepo=epel
↑yum で、インストールします。
再度、configureを行います。
checking for libtool... no checking for OpenSSL library... configure: error: OpenSSL was not found in any of /usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw; use --with-openssl=/path If you don't want OpenSSL, use --without-openssl
↑openssl のライブラリがない!とエラーになりました。
yum install openssl-devel
↑yum で、opnsslのライブラリを入れます。
再度、configureをします。
Configuration summary: ------------------------------------------------------------------------------- Configured paths: prefix: /usr/local/bind-9.11.6 sysconfdir: ${prefix}/etc localstatedir: ${prefix}/var
↑configureがうまくいきました。
# make # make install # cd /usr/local/ # ln -s bind-9.11.6 bind9
↑インストールをします。
共通鍵の作成
# /usr/local/bind9/sbin/rndc-confgen -a wrote key file "/usr/local/bind-9.11.6/etc/rndc.key"
と、
共通鍵が、/usr/local/bind-9.11.6/etc/rndc.key
に作成されます。
(↑ 2019/11/22 修正)
# cd /usr/local/bind9/etc/ # vi rndc.conf ------------------------------------------- options { default-server localhost; default-key "rndc.key"; }; key "rndc-key" { algorithm hmac-md5; secret "XXXXXXXXXXXXXXXXXXXXX"; }; -------------------------------------------
↑「rndc.conf」ファイルを作成します。
後半のキーは、共通鍵、「rndc.key」の内容をそのまま、貼り付けます。
# chmod og-r rndc.conf # chmod u-w rndc.conf # ls -al # -r-------- 1 root root 157 Mar XX XX:XX rndc.conf
↑rootのみ、読み込み可にします。
namedユーザに変更
bind (named)を起動するユーザを「named」にします。
# vi /etc/passwd named:x:25:25::/dev/null:/bin/false # vi /etc/group named:x:25: #cd /usr/local/ # chown -R named.named bind-9.11.6
named.confファイルの設定
named.conf設定
設定ファイルの中心である「named.conf」の設定をします。
# cd /usr/local/bind9/etc # vi named.conf
↑(2019/11/22 修正)
include "/etc/rndc.key"; controls { inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; }; }; options { directory "/var/named"; pid-file "/var/run/named/named.pid"; allow-transfer { XXX.XXX.XXX.XXX;XXX.XXX.XXX.XXX;}; allow-notify { XXX.XXX.XXX.XXX;XXX.XXX.XXX.XXX;}; allow-query { any;}; allow-recursion { none; }; allow-query-cache { none; }; recursion no; version "DNS Server"; }; zone "." { type hint; file "root.hint"; }; zone "localhost" { type master; file "local.zone"; }; zone "0.0.127.in-addr.arpa" { type master; file "pri.0.0.127.in-addr.arpa"; notify no; };
「controls」のところの「keys」のところは、「rndc.conf」の内容と同じにします。
(上記の記述の通りで大丈夫です)
(2020/09/01 修正)
rootサーバー情報
「zone “.”」のところは、「ルートサーバー情報」のファイル名を指定します。
rootサーバーの情報を取得します。
このデータは、変わる場合があります。
ネット上で、話題になるので、アンテナを張っておくと情報が入ってくるかと思います。
# mkdir /usr/local/bind9/var/named/ # cd /usr/local/bind9/var/named/ # wget https://www.internic.net/domain/named.root -O root.hint
localhostの正引き/逆引き設定
「zone “localhost” 」の「local.zone」ファイルは、
$TTL 86400 @ IN SOA localhost. root.localhost. ( 2002122001 ; serial 28800 ; refresh 8hr 14400 ; retry 4hr 604800 ; expire 1w 86400 ; default_ttl 24hr ) IN NS localhost. IN A 127.0.0.1
という内容で保存します。
逆引きである「zone “0.0.127.in-addr.arpa”」
のところは、
$TTL 86400 0.0.127.in-addr.arpa. IN SOA localhost. admin.localhost. ( 2005122001 10800 3600 604800 86400 ) 0.0.127.in-addr.arpa. IN NS localhost. 1 in ptr localhost.
という内容で、「pri.0.0.127.in-addr.arpa」というファイル名で、保存をします。
(2019/11/22 補足)
# chown -R named.named /usr/local/bind9/var/named/
↑ 追記 (2019/11/22)
起動ファイル関係
# vi /etc/sysconfig/named OPTIONS="-t /usr/local/bind9/ -c /etc/named.conf"
↑起動のオプションを設定します。
今回、「chroot」の機能を利用して、「/usr/local/bind9/」を「bind (named)」の起点とします。
# vi /etc/systemd/system/named.service [Unit] Description=Berkeley Internet Name Domain (DNS) [Service] Type=forking EnvironmentFile=/etc/sysconfig/named ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/local/bind9/sbin/named-checkconf -t /usr/local/bind9/ -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi' ExecStart=/usr/local/bind9/sbin/named -u named $OPTIONS ExecReload=/bin/sh -c '/usr/local/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID' ExecStop=/bin/sh -c '/usr/local/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID' PrivateTmp=true [Install] WantedBy=multi-user.target
↑サービスの起動ファイルです。
途中の「EnvironmentFile」で、「/etc/sysconfig/named 」のオプションを指定します。
「ExecStartPre」は、起動前のチェックです。「named.conf」の構文をチェックしてくれます。
bind (named) 起動
# systemctl start named.service
で、起動をします。
# systemctl enable named.service
で、自動起動
# systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2019-XX-XX XX:XX:XX JST; Xh Xmin ago
↑無事、起動をしました。
/dev/randomのエラー (2019/05/05 追加)
vi /var/log/messages could not open entropy source /dev/random: file not found using pre-chroot entropy source /dev/random
↑randomファイルが無いよ。というエラーが出ていました。
/dev/randomファイルを作成します。
/usr/local/bind9/
が起点としています(chrootdirで指定している)ので、
実際のファイルパスは、
/usr/local/bind9/dev/random
となります。
# cd /usr/local/bind9/ # mkdir dev # cd dev # mknod null c 1 3 # mknod random c 1 8 # cd .. # chown -R named.named dev
# systemctl stop named # systemctl reload named # systemctl start named
↑無事、namedが起動してエラーも無くなりました。
参考サイト:
https://www.atmarkit.co.jp/ait/articles/0309/09/news001.html
bind バージョンアップ作業、パターン1
バージョンアップ前と、後のディレクトリを、違う場所にする場合。
慎重に行うパターン!パターン2は、簡単にバージョンアップができます。
最新版、9.11系のbindダウンロード
# wget https://www.isc.org/downloads/file/bind-9-11-6-p1/?version=tar-gz # mv 'index.html?version=tar-gz' bind-9.11.6-P1.tar.gz
↑最新バージョンの、bind-9.11.6-P1 をダウンロードします。
bind 9.11 インストール
# tar xzvf bind-9.11.6-P1.tar.gz # cd bind-9.11.6-P1/ # ./configure --prefix=/usr/local/bind-9.11.6-P1
↑前バージョンは、
/usr/local/bind-9.11.6
にインストールしているので、
今回は、
/usr/local/bind-9.11.6-P1
にインストールします。
# make # make install
↑インストールをします。
bind9 データの移行
# cd /usr/local/bind-9.11.6 # cp -a etc ../bind-9.11.6-P1/ # cp -a var ../bind-9.11.6-P1/ # cp -a dev ../bind-9.11.6-P1/ # cd /usr/local/ # chown -R named.named bind-9.11.6-P1
↑新しいnamed(bind)の方にデータをコピーして、ファイルの権限を「named」にします。
bind9 切り替え作業
# systemctl stop named # cd /usr/local # rm bind9 # ln -s bind-9.11.6-P1 bind9
↑新しいバージョンを、/usr/local/bind9/
にリンクさせます。
# systemctl reload named # systemctl start named
これで、最新バージョンが起動します。
なんらかのエラーが出ている場合、
/usr/local/bind9
のリンク先を元のバージョンに戻して、原因を探ります。
bind バージョンアップ作業 パターン2
バージョンアップ前と、後のディレクトリが、同じ場所の場合。
簡単にバージョンアップする場合。
# wget https://downloads.isc.org/isc/bind9/9.11.17/bind-9.11.17.tar.gz
↑最新版をダウンロードします。(2020/04/08現在)
# tar xzvf bind-9.11.17.tar.gz # cd bind-9.11.17 # ./configure --prefix=/usr/local/bind-9.11.13/
↑元々「bind」の実態のあった、ディレクトリ「/usr/local/bind-9.11.13/」を指定します。
# make # make install # systemctl restart named
↑コンパイルをして、インストール、「bind」の再起動を行います。
ここで、「/var/log/messages」をみてチェックします。
問題がなければ、このまま運用。
もし、問題があれば、「前のバージョンのbindのソースディレクトリから「# make install」」を行い、バージョンを下げます。
DNSのfirewall設定(関連記事、2019/05/06 追加)
CentOS7 firewall 設定 / ConoHa VPS
参考書籍
max-cache-size の設定(2019/11/23 更新)
「/var/log/messages」のbind関係のメッセージで、
class=”st-css-no”class=”st-css-no”
none:100: 'max-cache-size 90%' - setting to 175921860444MB (out of 17592186044415MB)
というようなメッセージが出てくる時があります。
これは、キャッシュ用のメモリが90%に達したと・・・
キャッシュサイズは、デフォルトでは、無制限なので、メモリ節約のためにも、設定をします。
今回、
options { (略) max-cache-size 100M; (略) }
と、100Mに設定をしてみました。適正値がどのくらいかよくわからず・・・(汗)
さて、ついでに、
cleaning-interval 15; 期限切れレコードのチェック間隔を15分に設定 (デフォルトは、60) ゼロだと、キャッシュのクリーニングがされない max-cache-ttl 86400; キャッシュされたレコードの最大TTL値を1日に設定 max-ncache-ttl 3600; ネガティブキャッシュの最大TTL値を1時間に設定
↑なども、「options」に設定をしておきます。
参考情報
http://www.tatsuyababa.com/NW-DNS/NW-200402-DNSQA06.pdf