CentOS 7 で、bind (named) 9.11 ソースインストール

この記事は約17分で読めます。

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が、登場するようです・・・

BIND Release Strategy Updated
We are updating our release model for BIND, starting in 2018.

ここでは、「権威サーバー(権威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サーバーの情報を取得します。
このデータは、変わる場合があります。
ネット上で、話題になるので、アンテナを張っておくと情報が入ってくるかと思います。

https://www.internic.net/domain/named.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

タイトルとURLをコピーしました