Okada Hiroshi の blog

typo が多いです

ローカルで開発中のコンテンツも初期の段階から https (ssl) で配信する (その2) NSD のインストールと設定

4. NSD をインストールしました。

今回はマシンのリソースも少ないので DNSコンテンツサーバ(権威DNSサーバ) として軽量だと言われている NSD https://unbound.jp/nsd4/ https://www.nlnetlabs.nl/projects/nsd/ を使ってみました。

インストール自体は apt で簡単にインストールできます。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install nsd

今回 DNS をセットアップ中に自分自身の名前解決等ができないとエラー等がこったり反応が悪くなるので /etc/hosts に以下のエントリーを追記しました。

35.199.184.64 ns-local.toycode.com
127.0.1.1 ns-local

/etc/nsd/nsd.conf を次のようにしました。

server:
        do-ip4: yes
        do-ip6: no
        port: 53
        username: nsd
        zonesdir: "/etc/nsd"
        pidfile: "/run/nsd/nsd.pid"
        logfile: "/var/log/nsd.log"

zone:
        name: "local.toycode.com"
        zonefile: "local.toycode.com.zone"

/etc/nsd/local.toycode.com.zone を作成し、次のようにしました。

$TTL 1m
local.toycode.com. IN SOA ns-local.toycode.com. postmaster.toycode.com. (
  1  ; serial
  5m ; refresh
  2m ; retry
  6h ; expire
  1m ; minimum
  )

@ IN NS ns-local.toycode.com.

ns-local IN A 35.199.184.64 

a127-0-0-1 IN A 127.0.0.1

a192-168-1-1 IN A 192.168.1.1
a192-168-1-2 IN A 192.168.1.2
a192-168-1-3 IN A 192.168.1.3
a192-168-1-4 IN A 192.168.1.4
a192-168-1-5 IN A 192.168.1.5
a192-168-1-6 IN A 192.168.1.6
a192-168-1-7 IN A 192.168.1.7
a192-168-1-8 IN A 192.168.1.8
a192-168-1-9 IN A 192.168.1.9
a192-168-1-10 IN A 192.168.1.10
a192-168-1-11 IN A 192.168.1.11
a192-168-1-12 IN A 192.168.1.12
a192-168-1-13 IN A 192.168.1.13
以下略

TTL は後で修正が早く反映されるように極端に短い値にしています。ある程度たったら大きな値 (1dとか) に書き換える予定です。シリアルは後でスクリプト等で修正するかもしれないので、一般的な日付をベースにしたものにしていません。

使いそうなアドレスは全て登録しました、僕がよく利用するネットワークは 192.168.1.0/24 192.168.2.0/24 192.168.100.0/24 192.168.101.0/24 なので すべて登録しました。

NSD は BIND とちがって $GENERATE が無いので一々記述する必要があります。スクリプト言語等で生成しても良いでしょう。ぼくは vim を使っているので

良く使うアドレスは個別にわかりやすい名前を割り当てても良いとおもいます。

:for net in [1,2,100,101] | for host in range(1,254) | put='a192-168-' . net . '-' . host . ' IN A 192.168.' . net . '.' . host | endfor | endfor

で生成しました。

また port 53 がバッティングして NSD が起動できなかったので、systemd-resolved.service を止めました。そして resolve.conf を手動で書き換えて 8.8.8.8 を参照するようにしました。

$ sudo systemctl disable systemd-resolved.service 
$ sudo service systemd-resolved stop
$ sudo rm /etc/resolv.conf 
$ echo nameserver 8.8.8.8 | sudo tee /etc/resolv.conf 

この辺はちょっとハマりました、以上の設定で動いていますが正当なやり方かどうかはわかりません。

参考: dns - How to disable systemd-resolved in Ubuntu? - Ask Ubuntu

5. ちゃんと名前が引けているかどうか確認しました。

nsd の起動は $ sudo nsd-control start zone ファイルの再読込は(シリアルを増やして) $ sudo nsd-control reload です。

zone ファイルの編集が終わって読み込んだら以下のようなコマンドで手元のコンピュータで 名前が引けるか確認しました。

$ dig A a192-168-1-1.local.toycode.com +short
$ nslookup -type=A a192-168-1-1.local.toycode.com
$ getent hosts a192-168-1-3.local.toycode.com