bind

出典: wiki.nodoka.org

mydnsと連携→外向けのIFはbindがLISTENし、ループバックIFはmydnsがLISTEN。
全ての問い合わせをbindが受け取り、自IPと自ドメインの問い合わせのみ、ループバックのmydnsへフォワードする。
mydnsからbindへrecursive requestするパターンも試してみたが、正引きと同時に逆引きの問い合わせも行うため、レスポンスが異常に悪くなる。
現状ではbindmydnsのフォワードが現実的。

目次

bind-9.5.0のインストール

opensslが既にインストールされている前提。 使い道考えてないけど、SSL対応はさせておいてみる。

cd /usr/local/src
wget http://ftp.isc.org/isc/bind9/9.5.0/bind-9.5.0.tar.gz
tar xvzf bind-9.5.0.tar.gz
cd bind-9.5.0.tar.gz
./configure \
    --prefix=/usr/local/bind \
    --with-openssl=/usr/local/openssl
make
make install

設定ファイル作成

mkdir -p /usr/local/bind/chroot/etc
cd /usr/local/bind/chroot
vi etc/named.conf

プライベート用DNSとグローバル用DNSを用意する。プライベート用DNSでは、自IPと自ドメイン向けの問い合わせをmydnsへフォワードする。ついでに、fletsドメインへの問い合わせもflets網のDNSへフォワードする。グローバル用DNSは外にいる別DNSのセカンダリとして設定。

options {
        directory "/zone";
        pid-file "/var/run/named/named.pid";
        statistics-file "/named.stats";
        listen-on { 192.168.0.1; };
};
server 192.168.211.10 { edns no; };
include "/etc/rndc.key";
controls {
        inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
acl private {
        192.168.0.0/24;
        127.0.0.1;
};
view "internal" {
        match-clients { private; };
        recursion yes;
        zone "." {
                type hint;
                file "named.ca";
        };
        zone "localhost" {
                type forward;
                forward only;
                forwarders { 127.0.0.1; };
        };
        zone "0.0.127.in-addr.arpa" {
                type forward;
                forward only;
                forwarders { 127.0.0.1; };
        };
        zone "domain.com" {
                type forward;
                forward only;
                forwarders { 127.0.0.1; };
        };
        zone "0.168.192.in-addr.arpa" {
                type forward;
                forward only;
                forwarders { 127.0.0.1; };
        };
        zone "flets" {
                type forward;
                forward only;
                forwarders { 220.210.194.67; 220.210.194.68; };
        };
};
view "external" {
        match-clients { any; };
        recursion no;
        zone "." {
                type hint;
                file "named.ca";
        };
        zone "localhost" {
                type forward;
                forward only;
                forwarders { 127.0.0.1; };
        };
        zone "0.0.127.in-addr.arpa" {
                type forward;
                forward only;
                forwarders { 127.0.0.1; };
        };
        zone "domain.jp" {
                type slave;
                masters { 222.222.222.222; };
                file "domain.jp";
        };
        zone "domain.com" {
                type slave;
                masters { 222.222.222.222; };
                file "domain.com";
        };
};
wget ftp://ftp.rs.internic.net/domain/named.root
mkdir zone
mv named.root zone/named.ca
rndc-confgen -a -b 512 -k rndckey -c etc/rndc.key
vi etc/rndc.conf
options {
         default-server  localhost;
         default-key     "rndckey";
 };
server localhost {
        key     "rndckey";
};
include "/usr/local/bind/chroot/etc/rndc.key";

起動ファイル作成

vi /etc/init.d/named
:%s/usr\/sbin/usr\/local\/bind\/sbin/g
:%s/rndc/rndc -c ${ROOTDIR}\/etc\/rndc.conf/g
#               OPTIONS="${OPTIONS} -t ${ROOTDIR}"
                OPTIONS="${OPTIONS} -t ${ROOTDIR} -c /etc/named.conf"
vi /etc/sysconfig/named
#ROOTDIR=/var/named/chroot
ROOTDIR=/usr/local/bind/chroot
service named start

EDNS無効化

bindを9.5.0に変更してから、namedが以下のようなエラーを大量に吐くようになった。

named[19858]: too many timeouts resolving 'XXX.XXX.XXX.XXX.sbl.spamhaus.org/TXT' (in 'sbl.spamhaus.org'?): disabling EDNS

メッセージをキーにしてググってみると、IPv6が規定値となったため
EDNSがデフォルトで有効化されたとの事。
named.confに以下の設定を追加する事で状況は改善。

server 192.168.0.1 { edns no; };