○ Bindのインストール

・独自にDNSサーバ (グローバル、ローカル兼用) を立てます
・bind-9.11.2をソースからインストールし、設定します
・LINUXルータ上で固定グローバルIPで動かします
・CentOS 6.xのpythonはソースに対応していないので
・[510 Software Group]のpatchを使わせてもらいます
・make はメンテナンスマシンで行っています

・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:bind-9.11.2.tar.gz  (http://www.isc.org/downloads/)

(ftp://ftp.isc.org/isc/bind9/)
:bind-9.11.1-0.3.P2.el6.src.rpm  (http://www.five-ten-sg.com/mapper/bind)

○参照ファイル

パッケージの追加
最初の設定 (Router)
opensslのインストール

○インストール環境

:OS CentOS 6.9
:selinux permissive
:インストール先  /usr/local/(デフォルト)
:作業 ~/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○bind-9.11.2

○既存パッケージの削除

[root@venus:~]
rpm -e bind-libs bind-utils

○bind専用ユーザーを作成します

uid/gid情報を参照
・zoneファイル専用ディレクトリを作ります

[root@venus:~]
# groupadd -g 25 named
# useradd -u 25 -g 25 -d /dev/null -s /bin/false named
# mkdir -p /var/named/{data,master,slave}
# chown -R named:named /var/named
# chmod -R 750 /var/named

○ライブラリのインストール

・--with-pythonにはpython-plyが必要です
・yumでepel.repoから入れます

# yum install epel-release
# yum install python-ply --enablerepo=epel

・必要ならば

yum install GeoIP-devel GeoIP geoipupdate --enablerepo=epel
yum install lmdb-devel lmdb lmdb-libs  --enablerepo=epel

○patchファイル

:python2-build.patch, python2-compatibility.patch

# cd ~/src
[root@venus:~/src]
# rpm2cpio bind-9.11.1-0.3.P2.el6.src.rpm|cpio -t
# rpm2cpio bind-9.11.1-0.3.P2.el6.src.rpm|cpio -id python2-build.patch
# rpm2cpio bind-9.11.1-0.3.P2.el6.src.rpm|cpio -id python2-compatibility.patch

○コンフィグシェルスクリプト( bind9cfg.sh )をつくる

・"-DDIG_SIGCHASE=1"でdigの+sigchaseオプションを有効にします
・"-DNS_RUN_PID_DIR=0"でPIDファイルの場所を変えます
・( /var/run/named/named.pid → /var/run/named.pid )
・rpmパッケージでインストールしたopensslを使う場合は
・--with-opensslの設定を省略します (自動で設定します)
・--enable-full-reportオプションは9.9.4以降で有効です
・--with-dlz-bdbにはdb4-develが必要です
・--with-dlz-ldapにはopenldap-develが必要です

#!/bin/bash
CFLAGS="-O2 -march=i686 -mtune=atom"
STD_CDEFINES="-DDIG_SIGCHASE=1 -DNS_RUN_PID_DIR=0"
export CFLAGS STD_CDEFINES
#
./configure \
--sysconfdir=/etc \
--localstatedir=/var \
--enable-fixed-rrset \
--enable-filter-aaaa \
--enable-full-report \
--with-randomdev=/dev/urandom \
--with-libtool \
--with-openssl=/usr/local \
--with-tuning=default \
--with-dlopen=yes \
--with-dlz-bdb=yes \
--with-dlz-ldap=yes \
--with-dlz-filesystem=yes
#
CFLAGS=""
STD_CDEFINES=""
export CFLAGS STD_CDEFINES

○ソースの展開・インストール

・大きなシステムでは --with-tuning=large オプションを有効にします
・--with-geoip には GeoIP-devel(epel) が必要です
・--with-lmdb には lmdb-devel(epel) が必要です

# cd ~/src
[root@venus:~/src]
# tar zxvf bind-9.11.2.tar.gz
# chown -R root:root bind-9.11.2
# cd bind-9.11.2
[root@venus:~/src/bind-9.11.2]
# make distclean

・patchをあてます
・patchファイルは上位のディレクトリに置きます

# patch -p1 < ../python2-compatibility.patch
# patch -p0 < ../python2-build.patch

・configureファイルを再構成します

# libtoolize -c -f
# aclocal -I libtool.m4 --force
# autoconf -f

・コンフィグシェルスクリプトを実効します
・同じディレクトリで実行します

# source bind9cfg.sh

=====================================================================
Configuration summary:
---------------------------------------------------------------------
Optional features enabled:
    Multiprocessing support (--enable-threads)
        Mutex lock type: adaptive
    GSS-API (--with-gssapi)
        Algorithm: aes
    IPv6 support (--enable-ipv6)
    OpenSSL cryptography/DNSSEC (--with-openssl)
    Python tools (--with-python)
    XML statistics (--with-libxml2)
    HTTP zlib compression (--with-zlib)
    ECDSA algorithm support (--with-ecdsa)
    Allow 'fixed' rrset-order (--enable-fixed-rrset)
    AAAA filtering (--enable-filter-aaaa)
    Print backtrace on crash (--enable-backtrace)
    Use symbol table for backtrace, named only (--enable-symtable)
    Use GNU libtool (--with-libtool)
    Dynamically loadable zone (DLZ) drivers:
        Berkeley DB (--with-dlz-bdb)
        LDAP (--with-dlz-ldap)
        Filesystem (--with-dlz-filesystem)

Features disabled or unavailable on this platform:
    Large-system tuning (--with-tuning)
    Allow 'dnstap' packet logging (--enable-dnstap)
    GeoIP access control (--with-geoip)
    PKCS#11/Cryptoki support (--with-pkcs11)
    Native PKCS#11/Cryptoki support (--enable-native-pkcs11)
    GOST algorithm support (--with-gost)
    Use libseccomp system call filtering (--enable-seccomp)
    Very verbose query trace logging (--enable-querytrace)
    Automated Testing Framework (--with-atf)
    JSON statistics (--with-libjson)
    LMDB database to store configuration for 'addzone' zones (--with-lmdb)
=====================================================================

・コンパイル

# make

・ifconfig.shでtest環境を整える
・いくつかのテストには、perl-Net-DNS が必要です
・reclimitのテストには、perl-Net-DNS-Nameserver が必要です
・statschannelのテストには、perl-File-Fetch が必要です
・chainのテストには、pyton-dns-1.12.0 以上が必要です

# bin/tests/system/ifconfig.sh up

・networkでipv6を無効にしている場合は下記が表示されます

No support for INET6 on this system.
....................................

# make test

・bin/tests/system/systests.outputに結果が書き出されます

I:System test result summary:
I:      84 PASS
I:       3 SKIPPED
I:       1 UNTESTED

・ifconfig.shでtest環境をクリアします

# bin/tests/system/ifconfig.sh down

・インストール (アップデートは別項参照)

# make install

# cd ..
[root@venus:~/src]
# tar jcvf bind-9.11.2-170730.tar.bz2 bind-9.11.2/

:testの内容 (UNTESTED, SKIPPED)

T:chain:1:A
A:System test chain
I:This test requires the dnspython module.
I:Prerequisites for chain missing, skipping test.
R:UNTESTED

T:geoip:1:A
A:System test geoip
I:This test requires GeoIP support.
I:Prerequisites for geoip missing, skipping test.
R:SKIPPED

T:gost:1:A
A:System test gost
I:This test requires support for GOST cryptography
I:configure with --with-gost
I:Prerequisites for gost missing, skipping test.
R:SKIPPED

T:nzd2nzf:1:A
A:System test nzd2nzf
I:This test requires LMBD support (--with-lmdb)
I:Prerequisites for nzd2nzf missing, skipping test.
R:SKIPPED

○bindのアップデート

・新規インストールの場合は、次項へ進みます
・ソースの展開・コンパイルの表記は略します

・旧ファイルのバックアップを取ります

# mv /etc/bind.keys /etc/bind.keys-bak

・アップデート

# cd ~/src/bind-9.11.2
[root@venus:~/src/bind-9.11.2]
# make uninstall
# make install

・bind.keys(新旧)を比較し、変わっていれば差し替えます
・chroot環境へのコピーは省略します

# diff -urp /etc/bind.keys-bak /etc/bind.keys

・キャッシュ情報の更新と確認

# ldconfig
# ldconfig -p|egrep -e "libbind|libdns|libirs|libisc|liblwres"

・selinuxラベルの修正 (selinuxが有効の場合)

# restorecon -Rv /etc
# restorecon -Rv /usr/local
# restorecon -Rv /var

・再起動します

# service named restart

○キャッシュ情報の更新と確認

・/usr/local/libの設定がされているなら、ldconfigのみ実行します

# cd ~
[root@venus:~]
# echo /usr/local/lib >> /etc/ld.so.conf.d/usrlocal.conf
# ldconfig
# ldconfig -p|egrep -e "libbind|libdns|libirs|libisc|liblwres"
    liblwres.so.160 (libc6) => /usr/local/lib/liblwres.so.160
    liblwres.so.141 (libc6) => /usr/local/lib/liblwres.so.141
    liblwres.so (libc6) => /usr/local/lib/liblwres.so
    libisccfg.so.160 (libc6) => /usr/local/lib/libisccfg.so.160
    libisccfg.so.140 (libc6) => /usr/local/lib/libisccfg.so.140
    libisccfg.so (libc6) => /usr/local/lib/libisccfg.so
    libisccc.so.160 (libc6) => /usr/local/lib/libisccc.so.160
    libisccc.so.140 (libc6) => /usr/local/lib/libisccc.so.140
    libisccc.so (libc6) => /usr/local/lib/libisccc.so
    libisc.so.166 (libc6) => /usr/local/lib/libisc.so.166
    libisc.so.160 (libc6) => /usr/local/lib/libisc.so.160
    libisc.so (libc6) => /usr/local/lib/libisc.so
    libirs.so.160 (libc6) => /usr/local/lib/libirs.so.160
    libirs.so.141 (libc6) => /usr/local/lib/libirs.so.141
    libirs.so (libc6) => /usr/local/lib/libirs.so
    libdns.so.169 (libc6) => /usr/local/lib/libdns.so.169
    libdns.so.166 (libc6) => /usr/local/lib/libdns.so.166
    libdns.so.165 (libc6) => /usr/local/lib/libdns.so.165
    libdns.so.164 (libc6) => /usr/local/lib/libdns.so.164
    libdns.so.162 (libc6) => /usr/local/lib/libdns.so.162
    libdns.so.161 (libc6) => /usr/local/lib/libdns.so.161
    libdns.so (libc6) => /usr/local/lib/libdns.so
    libbind9.so.160 (libc6) => /usr/local/lib/libbind9.so.160
    libbind9.so.140 (libc6) => /usr/local/lib/libbind9.so.140
    libbind9.so (libc6) => /usr/local/lib/libbind9.so

○rndc.confファイルを作成

・opensslが上手く組み込まれないとrndc-confgenは動作しないと思う?
・同時にkeyが作成されるのでそのまま使用します
・"-b 512" 512bitsでkeyをつくる指定 (1から512の間 デフォルトは hash size)
・"-A hmac-sha512" algorithmの指定 (デフォルトはhmac-md5)
・configureでrandomdevを指定しない場合、作成に時間がかかる場合があります
・-rオプションでrandomfileを指定します

[root@venus:~]

・デフォルト(algorithm hmac-md5 128bits)

# rndc-confgen >> /etc/rndc.conf
# rndc-confgen -r /dev/urandom >> /etc/rndc.conf

・セキュア(algorithm hmac-sha512 512bits)

# rndc-confgen -A hmac-sha512 >> /etc/rndc.conf
# rndc-confgen -A hmac-sha512 -r /dev/urandom >> /etc/rndc.conf

:/etc/rndc.conf

・コメントされている部分(key,controls)をnamed.confに書き込みます
・key の "secret" の値は128bitの値で、実際とは異なります

# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-sha512;
        secret "G1C7qMA6qciQe4cWQJHdEw==";
};

options {
        default-key "rndc-key";
        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 "rndc-key" {
#       algorithm hmac-sha512;
#       secret "G1C7qMA6qciQe4cWQJHdEw==";
# };
# 
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

○"." 情報を取得し、/var/named/masterに保存します

・A.ROOT-SERVERに問い合わせ "." 情報を取得します

[root@venus:~]
# cd /var/named/master
[root@venus:/var/named/master]
# dig . ns @198.41.0.4 > named.cache

○zoneファイルをつくり、/var/named/masterに保存します

zoneファイル (詳細別記)

○named.conf,named.default.zonesファイルを作り、/etcに保存します

named.conf (詳細別記)
named.default.zones (詳細別記)

○resolv.confファイルを作り、/etcに保存します

:resolv.conf

・"aaa.bbb.ccc.ddd"には2nd.name.serverのアドレスを入れます

search 528p.com
nameserver 127.0.0.1
nameserver aaa.bbb.ccc.ddd

○/etc/sysconfig/namedファイル

・named起動スクリプトで読みこみます
・IPv4のみの接続にします

#ROOTDIR=/var/chroot/bind
OPTIONS=-4

○named起動スクリプトを作り、/etc/rc.d/init.dに保存します

/etc/rc.d/init.d/named (詳細別記)

○ファイル及びディレクトリのユーザ・グループ・パーミッションの設定

・変更コマンド省略
・( )のファイルは起動後またはrndcコマンドで作られます

etc/ 755 root:root

named.conf 640 root:named

named.default.zones 640 root:named

rndc.conf 640 root:named

bind.keys 640 root:named

resolv.conf 644 root:root
var/ 755 root:root

named/ 750 named:named


(named.pid) 644 named:named


(*.mkeys) 644 named:named


(*.mkeys.jnl) 644 named:named


(session.key) 600 named:named


data/ 750 named:named



(named_stats.txt) 644 named:named



(cache_dump.db) 644 named:named



(queries.log) 644 named:named


slave/ 750 named:named


master/ 750 named:named



zone-file 640 named:named



named.cache 440 named:named

○rp-pppoeのDNS設定を変更します

rp-pppoeのインストールを参照
・xxxxxxxxxxxxの部分にはプロバイダーのユーザーIDをいれます
・"DNS: Do not adjust"でresolv.confが書き変わらなくなります
・/etc/ppp/pppoe.confを直接修正しても良いです

# cd ~
[root@venus:~]
# pppoe-setup

USERNAME
>>> Enter your PPPoE user name:xxxxxxxxxxxx@rb.il24.net

INTERFACE
(default eth1):eth1

>>> Enter the demand value (default no):no

DNS
>>> Enter the DNS information here:← 未入力でEnterキー

PASSWORD
>>> Please enter your PPPoE password:← パスワードを入力
>>> Please re-enter your PPPoE password:← 再入力

FIREWALLING
>>> choose a type of firewall (0-2):2

** Summary of what you enterd **
Ethernet Interface:eth1
User name:xxxxxxxxxxxx@rb.il24.net
Active-on-demand:NO
DNS: Do not adjust
Firewalling:MASQUERADE

>>>Accept these settings and adjust configuration files(y/N)?y

○iptableの設定

Netfilter(iptables)で制御している場合、ポートを開けてください

Netfilter(iptables)の設定を参照

○selinuxの対応 (selinuxが有効の場合)

・新規インストールファイルのselinuxラベルを修正

[root@venus:~]
# restorecon -Rv /etc
# restorecon -Rv /usr/local
# restorecon -Rv /var

○namedの自動起動をonにし、再起動します

[root@venus:~]
# chkconfig --add named
# shutdown -r now



○bind起動後の確認

○digコマンドで1st.name.serverの問い合わせをします

・正引き(ルートサーバから引きます)

[sola@mars ~]
$ dig ns com @a.root-servers.net

・a.gtld-servers.netがcomを管理しているのが解かる
・a.gtld-servers.net(192.5.6.30)で引く

$ dig ns 528p.com @192.5.6.30

・自分のDNSサーバ(master)で自分のDNSサーバを引く

$ dig ns.528p.com @219.117.201.3 

・DNSサーバ(slave)で自分のDNSサーバを引く

$ dig ns.528p.com @ddns1.interlink.or.jp

・逆引き(ルートサーバから引きます)

$ dig ptr in-addr.arpa @a.root-servers.net

・in-addr.arpaはa.in-addr-servers.arpaが管理しているのが解かる
・a.in-addr-servers.arpa(199.212.0.73)で引く

$ dig ptr 219.in-addr.arpa @199.212.0.73

・219.in-addr.arpaはns1.apnic.netが管理しているのが解かる
・ns1.apnic.netで引く

$ dig ptr 117.219.in-addr.arpa @ns1.apnic.net

・117.219.in-addr.arpaはa.dns.jpが管理しているのが解かる
・a.dns.jpで引く

$ dig ptr 201.117.219.in-addr.arpa @a.dns.jp

・201.117.219.in-addr.arpaはddns1.interlink.or.jpが管理しているのが解かる
・ddns1.interlink.or.jpで引く

$ dig ptr 3.201.117.219.in-addr.arpa @ddns1.interlink.or.jp

・プロバイダで逆引きの権限委譲をしているのでDNSサーバ名を返す


○rndcコマンドを使う

・chroot環境に係わらず、/etc/rndc.confを読みにいきます
・使用できるcommandを"rndc --help"で確認します

・サーバの起動状態の表示

[root@venus:~]
# rndc status

・(rndc querylogの実行ごとに)querylogの有効・無効の切り替え

# rndc querylog
# rndc status

・サーバの統計情報をファイルに出力します

# rndc stats
# less /var/named/data/named_stats.txt

・キャッシュの内容をファイルに出力します

# rndc dumpdb
# less /var/named/data/cache_dump.db

・キャッシュの内容をクリアします

# rndc flush
# rndc dumpdb
# less /var/named/data/cache_dump.db

○ Copyright(c) 528p.com All Rights Reserved.