🦔

いまさらながら djbdns から NSD に乗り換えた

2020/11/14に公開

djbdns というか tinydns です。

djbdns はおもに tinydns (コンテンツサーバー) と dnscache (キャッシュサーバー)で構成されてますが、うちでは tinydns のみ使ってました。弊ドメインでの使い方では tinydns で困ってはいなかったんだけど、2020 年にもなってなー、ということで NSD に乗り換えてみた。なぜ BIND ではなく NSD なのかというと、せっかくだから。

以前はウェブサーバーやメールサーバーを動かしていたけど、現在はウェブサーバーのみ。普通に使ってるだけです。

環境

NetBSD 9.1

現状確認

tinydns での DNS 設定を確認しときます。

$ dig example.jp any

; <<>> DiG 9.16.1-Ubuntu <<>> example.jp any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56353
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.jp.			IN	ANY

;; ANSWER SECTION:
example.jp.		86400	IN	A	xxx.xxx.xxx.xxx
example.jp.		86400	IN	MX	0 host1.example.jp.
example.jp.		2560	IN	SOA	ns.example.jp. miwarin.example.jp. 1467441028 16384 2048 1048576 86400
example.jp.		4706	IN	NS	ns.example.com.
example.jp.		4706	IN	NS	ns.example.jp.

;; Query time: 48 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: 月 11月 09 22:44:49 JST 2020
;; MSG SIZE  rcvd: 169

nsd をインストールする

pkgsrc で

% cd /usr/pkgsrc/net/nsd
% sudo make install

 :

nsd-4.3.2: copying /usr/pkg/share/examples/nsd/nsd.conf to /usr/pkg/etc/nsd/nsd.conf
===========================================================================
The following files should be created for nsd-4.3.2:

        /etc/rc.d/nlnsd (m=0755)
            [/usr/pkg/share/examples/rc.d/nlnsd]

===========================================================================
===========================================================================

nsd の設定を書く

nsd/Makefile の configure でいろいろデフォルトが設定されているので nsd.conf は最低限だけ。汎用性を上げるなら設定は nsd.conf に明記すべきかと思いますがー。

/usr/pkg/etc/nsd/nsd.conf はこんだけ

server:
  logfile: "/var/log/nsd.log"
zone:
  name: example.jp
  zonefile: /usr/pkg/etc/nsd/example.jp.zone

文法などをチェックします。

% nsd-checkconf -v  /usr/pkg/etc/nsd/nsd.conf
# Read file /usr/pkg/etc/nsd/nsd.conf: 1 patterns, 1 fixed-zones, 0 keys.
# Config settings.
server:
        debug-mode: no
        ip-transparent: no
        ip-freebind: no
        reuseport: no
        do-ip4: yes
        do-ip6: yes
        send-buffer-size: 0
        receive-buffer-size: 0
        hide-version: no
        hide-identity: no
        drop-updates: no
        tcp-reject-overflow: no
        database: "/var/nsd/nsd.db"
        #identity:
        #version:
        #nsid:
        logfile: "/var/log/nsd.log"
        log-only-syslog: no
        server-count: 1
        tcp-count: 100
        tcp-query-count: 0
        tcp-timeout: 120
        tcp-mss: 0
        outgoing-tcp-mss: 0
        ipv4-edns-size: 4096
        ipv6-edns-size: 4096
        pidfile: "/var/run/nsd/nsd.pid"
        port: "53"
        statistics: 0
        #chroot:
        username: "nsd"
        zonesdir: "/usr/pkg/etc/nsd"
        xfrdfile: "/var/nsd/nsd-xfrd.state"
        zonelistfile: "/var/nsd/zone.list"
        xfrdir: "/tmp"
        xfrd-reload-timeout: 1
        log-time-ascii: yes
        round-robin: no
        minimal-responses: no
        confine-to-zone: no
        refuse-any: no
        verbosity: 0
        zonefiles-check: yes
        zonefiles-write: 0
        #tls-service-key:
        #tls-service-pem:
        #tls-service-ocsp:
        tls-port: "853"

remote-control:
        control-enable: no
        control-port: 8952
        server-key-file: "/usr/pkg/etc/nsd/nsd_server.key"
        server-cert-file: "/usr/pkg/etc/nsd/nsd_server.pem"
        control-key-file: "/usr/pkg/etc/nsd/nsd_control.key"
        control-cert-file: "/usr/pkg/etc/nsd/nsd_control.pem"

zone:
        name: "example.jp"
        zonefile: "/usr/pkg/etc/nsd/example.jp.zone"

zone ファイルを書きます。

/usr/pkg/etc/nsd/example.jp.zone

$TTL 3600
$ORIGIN example.jp.
@         IN SOA ns miwarin.example.jp. (
            202011121048
            16384
            2048
            1048576
            86400
          )
          IN NS ns
          IN NS ns.example.com.
          IN MX host1
          IN A xxx.xxx.xxx.xxx

host1     IN A xxx.xxx.xxx.xxx
www       IN A xxx.xxx.xxx.xxx
mail      IN A xxx.xxx.xxx.xxx
ns        IN A xxx.xxx.xxx.xxx

文法チェックなどします

% nsd-checkzone example.jp. /usr/pkg/etc/nsd/example.jp.zone
zone example.jp. is ok

起動

rc ファイルをコピーしまうす。

% sudo cp /usr/pkg/share/examples/rc.d/nlnsd /etc/rc.d/

tinydns を止めて nsd を起動します。

% sudo /etc/rc.d/tinydns onestop
Stopping tinydns.
% sudo /etc/rc.d/nlnsd onestart
Starting nlnsd.

以上

参考

Discussion