LANDISK HACKING DIARY
Since2005/8/17
TOPへ戻る

   INDEX
 
1. LANDISKを内向けセカンダリDNSサーバーにする
2. chroot で起動させる




 
   LANDISKを内向けセカンダリDNSサーバーにする

 

 


我が家には既にFedora Core 君がプライマリDNSとして頑張ってくれている。けれども、FCを再起動した際に、一時的ではあるがインターネットに繋げなくなるのも面倒だ。その為に、Windows でセカンダリDNSを bind で立てているのだが、どうせならLANDISK君にその役割を任せたい。まず、設定ファイルの位置を確認しておきます。ソースからインストールする場合とはPATHが異なります。ファイル名も随分違うので違和感を覚えますが(名前を変えちゃっても構わないが)、db.local と db.127 が正引き/逆引きの対になっているファイルで、db.root がいわゆるヒントファイル(named.ca という名前の方がわかりやすい)となっている。rndc.key は存在するが、rndc.conf は存在しなかった。

/etc/bind/named.conf
/etc/bind/rcdc.key

/etc/bind/db.local
/etc/bind/db.127

/etc/bind/db.root


namad.conf をセカンダリ用に編集していく。その前に、設定ファイルをバックアップしておく。ログ保存用のディレクトリも予め作成しておく。

landisk:~# cp /etc/bind/named.conf /etc/bind/named.conf.default
landisk:~# mkdir /var/log/bind
landisk:~# chown bind.bind /var/log/bind/


以下のnamed.conf の例だと、kororo.jp.zone.bak と 50.16.172.in-addr.arpa.zone.bak がゾーン転送されてくれば成功である。

◎セカンダリDNS:/etc/named.conf
landisk:~# vi /etc/bind/named.conf
acl localnet {
        172.16.50.0/27;
        127.0.0.1;
};

logging {
        channel "default-log" {
                file "/var/log/bind/default.log" versions 3 size 5M;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
		
        channel "xfer-in-log" {
                file "/var/log/bind/xfer-in.log" versions 3 size 5M;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
		
        channel "xfer-out-log" {
                file "/var/log/bind/xfer-out.log" versions 3 size 5M;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
		
        channel "queries-log" {
                file "/var/log/bind/queries.log" versions 3 size 5M;
                severity info;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
		
        category default { 
               "default-log";
               "default_syslog";
               "default_debug";
               "default_stderr";
        };

        category xfer-in { 
               "xfer-in-log";
        };

        category xfer-out { 
               "xfer-out-log";
        };

        category queries { "queries-log"; };
        category lame-servers { null; };
};

options {
        directory "/etc/bind";
        allow-query { localnet; };
        allow-transfer { localnet; };
        version "no version";
        recursion yes;
};

zone "." {
             type hint;
             file "db.root";
};

zone "localhost" {
             type master;
             file "db.local";
};

zone "0.0.127.in-addr.arpa"{
             type master;
             file "db.127";
};

zone "kororo.jp" {
              type slave;
              masters {
                      172.16.50.2;
              };
              file "kororo.jp.zone.bak";
};

zone "50.16.172.in-addr.arpa" {
              type slave;
              masters {
                      172.16.50.2;
              };
              file "50.16.172.in-addr.arpa.zone.bak";
};

次に、プライマリDNS側の named.conf で LANDISKへの転送許可を与える。また、プライマリDNSが更新したことを知らせる通知メッセージも送信するようにしておく。also-notify にはセカンダリDNSサーバーのIPアドレスを記述する。

◎プライマリDNS:/etc/named.conf
acl localnet {
        172.16.50.0/27;
        127.0.0.1;
};

options {
        also-notify { 172.16.50.30;
                      172.16.50.4;
};

zone "kororo.jp"{
             type master;
             file "in-kororo.jp.zone";
             allow-query { localnet; };
             allow-transfer { localnet; };
};
		
zone "50.16.172.in-addr.arpa" {
             type master;
             file "0.50.16.172.in-addr.arpa.zone";
             allow-query { localnet; };
             allow-transfer { localnet; };
};

いざ、再起動。ん?起動しなかった?

landisk:~# /etc/init.d/bind9 restart
Stopping domain name service: namedrndc: connect failed: connection refused

Starting domain name service: named.


dumping master file とかいうエラーが発生している。

landisk:~# tail /var/log/syslog
Sep 2 03:51:57 ayano named[1690]: loading configuration from '/etc/bind/named.conf'
Sep 2 03:51:57 ayano named[1690]: no IPv6 interfaces found
Sep 2 03:51:57 ayano named[1690]: listening on IPv4 interface lo, 127.0.0.1#53
Sep 2 03:51:57 ayano named[1690]: listening on IPv4 interface eth0, 172.16.50.30#53
Sep 2 03:51:57 ayano named[1690]: command channel listening on 127.0.0.1#953
Sep 2 03:51:57 ayano named[1690]: zone 0.0.127.in-addr.arpa/IN: loaded serial 1
Sep 2 03:51:57 ayano named[1690]: zone localhost/IN: loaded serial 1
Sep 2 03:51:57 ayano named[1690]: running
Sep 2 03:51:57 ayano named[1690]: dumping master file: tmp-XXXXXD8MiX: open: permission denied
Sep 2 03:51:58 ayano named[1690]: dumping master file: tmp-XXXXntJ5K4: open: permission denied


パーミッションエラーかと思い、db.local と db.127 の所有者を bind に変更する。お、起動した。けど、ファイルが転送されてこない。

landisk:~# chown bind.bind db.127 db.local

landisk:~# /etc/init.d/bind9 restart
Stopping domain name service: named.
Starting domain name service: named.

landisk:~# ps aux | grep named
root 1473 0.0 4.2 5392 2652 ttyp0 T 03:16 0:00 vi named.conf
bind 1709 0.3 4.4 11716 2784 ? Ss 03:52 0:00 /usr/sbin/named -u bind


ログファイルを見てみると…応答を受け取とろうとはしたが、パーミッションの関係で失敗しているようだ。

landisk:~# tail /var/log/bind/xfer-in.log
Sep 02 03:56:33.317 xfer-in: error: transfer of 'kororo.jp/IN' from 172.16.50.2#53: failed while receiving responses: permission denied


ええい、めんどくさい。/etc/bind ごと所有権を bind に変えてみた。

landisk:~# chown -R bind.bind /etc/bind/
landisk:~# rndc reload
landisk:~# tail /var/log/bind/xfer-in.log
Sep 02 04:02:14.522 xfer-in: info: transfer of 'kororo.jp/IN' from 172.16.50.2#53: end of transfer
Sep 02 04:02:15.002 xfer-in: info: transfer of '50.16.172.in-addr.arpa/IN' from 172.16.50.2#53: end of transfer


お?ひょっとして成功した? ls してみる。無事にファイルが転送されてきました。あとはWindows 側で優先DNSサーバの2番目あたりの空欄にLANDISKのIPアドレスを加えるだけだ。検証方法は、簡単だ。プライマリDNSを停止させて、インターネットに接続できればセカンダリDNSは無事に動作していることが確認できる。また、nslookup などで正引き/逆引きができ、使用しているDNSサーバーにLANDISKのIPアドレスが表示されていれば成功だ。

landisk:~# ls
合計 56
-rw------- 1 bind bind 498 2005-09-02 04:02 50.16.172.in-addr.arpa.zone.bak
-rw-r--r-- 1 bind bind 237 2005-08-27 14:24 db.0
-rw-r--r-- 1 bind bind 271 2005-08-27 14:24 db.127
-rw-r--r-- 1 bind bind 256 2005-08-27 14:24 db.local
-rw-r--r-- 1 bind bind 1507 2005-08-27 14:24 db.root
-rw------- 1 bind bind 793 2005-09-02 04:02 kororo.jp.zone.bak
-rw-r--r-- 1 bind bind 1494 2005-09-02 03:59 named.conf


■プロキシを通している場合

squid を通してインターネット上にでる場合、セカンダリDNSが稼動していても名前解決ができずにレスポンスが極端に低下する場合がある。その場合は、/etc/squid/squid.conf に以下の行を加えてあげれば正常に名前解決ができるようになりインターネットにでることもできる。

landisk:~# vi /etc/squid/squid.conf
# TAG: dns_nameservers
# Use this if you want to specify a list of DNS name servers
# (IP addresses) to use instead of those given in your
# /etc/resolv.conf file.
# On Windows platforms, if no value is specified here or in
# the /etc/resolv.conf file, the list of DNS name servers are
# taken from the Windows registry, both static and dynamic DHCP
# configurations are supported.
#
# Example: dns_nameservers 10.0.0.1 192.172.0.4
#
#Default:
dns_nameservers 172.16.50.2 172.16.50.30


また、/etc/resolve.conf にも自分を加えておこう。

landisk:~# cat /etc/resolv.conf
nameserver 172.16.50.2
nameserver 172.16.50.30




 
     chroot で起動させる
   
ここまでやっておいてなんだが、bind9 をchroot させる。/etc/default/bind9 を以下のように編集する。-u は実行ユーザ、-t は chroot させるディレクトリ。

landisk:~# vi /etc/default/bind9
OPTIONS="-u bind -t /var/bind"


予めディレクトリを作成しておく。chroot ディレクトリは、/var/bind とする。

landisk:~# mkdir -p /var/bind/var/run/bind/run
landisk:~# mkdir -p /var/bind/log
landisk:~# mkdir -p /var/bind/etc/bind/
landisk:~# cp /etc/bind/named.conf /var/bind/etc/bind/
landisk:~# cp /etc/bind/* /var/bind/

# デバイスファイル作成
landisk:~# mkdir /var/named/dev
landisk:~# # cd /var/bind/dev/
landisk:~# mknod null c 1 3
landisk:~# mknod random c 1 8
landisk:~# chmod 666 *

landisk:~# chown -R bind.bind /var/bind/
landisk:~# chmod 700 /var/bind/


named.conf の directory を変更する。chroot ディレクトリからルートディレクトリを記述するので「/」で良い。また、ログのパスの位置も変更しておく。/var/bind から見た相対パスで記述する。

options {
directory "/etc/bind";
};

↓↓変更後

options {
directory "/";
};

channel "default-log" {
file "log/default.log" versions 3 size 5M;
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};


(筆者の環境では)起動スクリプトの編集をする必要はないので、そのままbind を起動。

landisk:~# /etc/init.d/bind9
landisk:~# ps aux | grep name
bind 1268 0.7 4.4 11704 2820 ? Ss 10:56 0:00 /usr/sbin/named -u bind -t /var/bind


残飯処理をしておく。

landisk:~# rm -rf /etc/bind/*
landisk:~# touch /etc/bind/named.conf
landisk:~# rm -rf /var/log/bind/






TOPへ戻る
 
Copyright © KORO All Rights Reserved.