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