🐈

FreeBSD で nsd (ルートサーバ) を立てる

2023/07/25に公開

この記事では、nsd をルートサーバとして動かすまでの作業内容を残しています。nsd をルートサーバとして動かすためには、--enable-root-server オプションをつけてソースコードからコンパイルする必要があります。FreeBSD の ports を使ってコンパイルしていきます。

ホスト(FreeBSD)に nsd を立てる

[root@vitothon /jails/bin/shell]# cd /usr/ports/dns/nsd/
[root@vitothon /usr/ports/dns/nsd]# make install

ここで、ROOT_SERVER の項目にチェックを入れるだけです。

コンパイルは数分で完了します。

次に nsd の conf を設定します。

[root@vitothon /usr/ports/dns/nsd]# cd /usr/local/etc/nsd/
[root@vitothon /usr/local/etc/nsd]# vi nsd.conf

server:
        ip-address: 192.168.56.103

remote-control:
        control-enable: yes
zone:
        name: "."
        zonefile: "root.zone"
zone:
        name: "root-servers.shuma"
        zonefile: "root-servers.shuma.zone"

ルートゾーンのゾーンファイルを用意します。

root.zone
.       86400   IN      SOA     a.root-servers.shuma    admin.shuma     2023072401 1800 900 86400 1200
.       86400   IN      NS      a.root-servers.shuma
a.root-servers.shuma.   86400   IN      A       192.168.56.103
hoge.   86400   IN      NS      ns1.hoge.
ns1.hoge.       86400   IN      A       10.0.1.1
root-servers.shuma.zone
root-servers.shuma.	86400	IN	SOA	a.root-servers.shuma.	admin.shuma	2023072401 1800 900 604800 1200
root-servers.shuma.	86400	IN	NS	a.root-servers.shuma.
a.root-servers.shuma.	86400	IN	A	192.168.56.103

nsd のセットアップをします。

[root@vitothon /usr/local/etc/nsd]# nsd-control-setup
setup in directory /usr/local/etc/nsd
Generating RSA private key, 3072 bit long modulus (2 primes)
............................................................................................++++
...................++++
e is 65537 (0x010001)
Generating RSA private key, 3072 bit long modulus (2 primes)
.........................................................++++
...........++++
e is 65537 (0x010001)
Signature ok
subject=CN = nsd-control
Getting CA Private Key
removing artifacts
Setup success. Certificates created. Enable in nsd.conf file to use

ルートゾーン nsd を起動します。

[root@vitothon /usr/local/etc/nsd]# echo 'nsd_enable="YES"' >> /etc/rc.conf
[root@vitothon /usr/local/etc/nsd]# /usr/local/etc/rc.d/nsd start
Starting nsd.
[2023-07-25 00:50:18.077] nsd[21210]: notice: nsd starting (NSD 4.4.0)

問い合わせてみます。

[root@vitothon /usr/local/etc/nsd]# dig . soa @192.168.56.103

; <<>> DiG 9.18.16 <<>> . soa @192.168.56.103
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1744
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;.				IN	SOA

;; ANSWER SECTION:
.			86400	IN	SOA	a.root-servers.shuma. admin.shuma. 2023072401 1800 900 86400 1200

;; AUTHORITY SECTION:
.			86400	IN	NS	a.root-servers.shuma.

;; ADDITIONAL SECTION:
a.root-servers.shuma.	86400	IN	A	192.168.56.103

;; Query time: 0 msec
;; SERVER: 192.168.56.103#53(192.168.56.103) (UDP)
;; WHEN: Tue Jul 25 00:52:32 JST 2023
;; MSG SIZE  rcvd: 118

よさそうですね。次回は、jail を使って仮想ネットワークを作り、ローカル環境のみで完結する(外に問い合わせない)名前解決をしたいと思います。

Discussion