Raspberry Pi に bind9 を導入

ラズパイ自宅サーバに自宅からもホスト名でアクセスできるように bind9 を導入した。

インストール

$ sudo apt-get install bind9

設定

内向き DNS であることを意識しながら named.conf.options と named.conf.local をいじる。

named.conf.options

$ sudo nano /etc/bind/named.conf.options
$ cat /etc/bind/named.conf.options 
acl localnet {
    127.0.0.1;
    192.168.1.0/24;
};

options {
    directory "/var/cache/bind";

    allow-query { localnet; };
    allow-transfer { none; };

    // If there is a firewall between you and nameservers you want
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

    // If your ISP provided one or more IP addresses for stable 
    // nameservers, you probably want to use them as forwarders.  
    // Uncomment the following block, and insert the addresses replacing 
    // the all-0's placeholder.

    forwarders { 192.168.1.1; };
    forward only;

    //========================================================================
    // If BIND logs error messages about the root key being expired,
    // you will need to update your keys.  See https://www.isc.org/bind-keys
    //========================================================================
    dnssec-enable no;
    dnssec-validation no;

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};

はじめ dnssec 周りの設定はデフォルトの

dnssec-validation auto;

にしていたが syslog に

error (broken trust chain) resolving 'www.google.co.jp/A/IN'

みたいなログが大量に吐かれて logwatch が大変なことになるので dnssec は無効にした。

named.conf.local

$ sudo nano /etc/bind/named.conf.local
$ cat /etc/bind/named.conf.local 
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "hoge.fuga" {
    type master;
    file "hoge.fuga.zone";
};

zone "1.168.192.in-addr.arpa" {
    type master;
    file "hoge.fuga.rev";
};

ゾーンファイル

正引き用

$ sudo nano /var/cache/bind/hoge.fuga.zone 
$ cat /var/cache/bind/hoge.fuga.zone 
$TTL 86400

@   IN  SOA ns.hoge.fuga. root.hoge.fuga. (
    2016071805;
    3600;
    900;
    604800;
    86400;
)

    IN  NS  hoge.fuga.;
@   IN  A   192.168.1.3;
*   IN  A   192.168.1.3;

逆引き用

$ sudo nano /var/cache/bind/hoge.fuga.rev 
$ cat /var/cache/bind/hoge.fuga.rev 
$TTL 86400

@   IN  SOA ns.hoge.fuga. root.hoge.fuga. (
    2016071805;
    3600;
    900;
    604800;
    86400;
)

    IN  NS  hoge.fuga.;
3   IN  PTR hoge.fuga.;

文法チェック

$ named-checkconf /etc/bind/named.conf

何も出なければ OK らしい。

$ named-checkzone hoge.fuga /etc/bind/hoge.fuga.zone
zone hoge.fuga/IN: loaded serial 2016071805
OK
$ named-checkzone 3.1.168.192.in-addr-arpa /etc/bind/hoge.fuga.zone
zone 3.1.168.192.in-addr.arpa/IN: loaded serial 2016071805
OK

OK と言われたので OK 。

ufw

私は ufw の設定を忘れて時間を溶かした。

$ sudo ufw status
$ sudo ufw allow 53/tcp
$ sudo ufw allow 53/udp

反映

$ sudo service bind9 restart

あと、ルーターなりパソコンなりの設定をいじってラズパイサーバに DNS を聞きに行くよう設定する必要がある。

確認

dig で確認する。

正引き

$ dig hoge.fuga

; <<>> DiG 9.9.5-9+deb8u6-Raspbian <<>> hoge.fuga
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16249
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hoge.fuga.         IN  A

;; ANSWER SECTION:
hoge.fuga.      86400   IN  A   192.168.1.3

;; AUTHORITY SECTION:
hoge.fuga.      86400   IN  NS  hoge.fuga.

;; Query time: 2 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Tue Jul 19 02:48:48 JST 2016
;; MSG SIZE  rcvd: 72

逆引き

$ dig -x 192.168.1.3

; <<>> DiG 9.9.5-9+deb8u6-Raspbian <<>> -x 192.168.1.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16036
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;3.1.168.192.in-addr.arpa.  IN  PTR

;; ANSWER SECTION:
3.1.168.192.in-addr.arpa. 86400 IN  PTR hoge.fuga.

;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400   IN  NS  hoge.fuga.

;; ADDITIONAL SECTION:
hoge.fuga.      86400   IN  A   192.168.1.3

;; Query time: 2 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Tue Jul 19 02:49:27 JST 2016
;; MSG SIZE  rcvd: 111

ちゃんと引けている。

ところで

ラズパイのブート直後、 bind9 は起動しているのだが1回 service を restart するまでちゃんと引けない。 心当たりのある人は教えてください。