2. 証明書とキーの生成
「nsd-control」のために証明書とキーを生成します。
$ 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
(なんだか、以前よりメッセージの行数が短いのが気にかかる)
以下のファイルが生成されます。
/usr/local/etc/nsd/nsd_control.key クライアントキー
/usr/local/etc/nsd/nsd_control.pem クライアント証明書
/usr/local/etc/nsd/nsd_server.key サーバキー
/usr/local/etc/nsd/nsd_server.pem サーバ証明書
(ファイルは、ちゃんと出来ていたので、ひと安心)
3. 正引きファイル作成
正引き・逆引きのゾーンファイルの形式は「bind9」と同じになります。
ゾーンファイル用のディレクトリを生成して (ここでは「/var/nsd」に「chroot」する設定で記述しています)
mkdir -pv /var/nsd/zone
正引きファイルと逆引きファイルを作成します。
正引きファイル /var/nsd/zone/hogehoge.zone
;
$TTL 3600
@ IN SOA ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
2020111701 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.hogehoge.ne.jp.
IN NS ns.プロバイダ.jp.
IN MX 10 ns.hogehoge.ne.jp.
ns IN A xxx.yyy.zzz.2
www IN CNAME ns
rt IN A xxx.yyy.zzz.1
pc01 IN A xxx.yyy.zzz.3
pc02 IN A xxx.yyy.zzz.4
pc03 IN A xxx.yyy.zzz.5
pc04 IN A xxx.yyy.zzz.6
解説
;
;(セミコロン)以降はコメントになります。
$TTL 3600
キャッシュの有効期限を秒単位で指定します。
@ IN SOA ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
2020111701 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
@ IN SOA でドメイン情報を記載するという意味です。
続いて、コンテンツサーバ名、管理者のメールアドレスになります。
Serial シリアル番号、なんでもいいのですが、伝統的に年月日サフィックスという番号をいれます。
記述を更新した場合、この値を更新しておけばリロードした際にゾーンの書き換えを行います。
Refresh ゾーン転送間隔を秒で指定。
Retry 転送の再試行時間を秒で指定。
Expire ゾーン情報を最新と確認できない場合の有効時間を秒で指定する。
Minimum キャッシュの有効期限を秒単位で指定します。最初のものとは違うらしい。
IN NS ns.hogehoge.ne.jp.
IN NS ns.プロバイダ.jp.
IN NS で自分のネームサーバ名とプロバイダが提供するネームサーバ名を記述します。
名称の後ろに .(ドット)がつくものは、絶対名称を示します。
以降の行で、ns のみ書いてある名称は、. がついていません。これは相対名称で、その絶対名称は、後ろにそのゾーン名がつくことになります。
もともと、このファイルは、hogehoge.ne.jp を定義してあるものですから ns は、ns.hogehoge.ne.jp という絶対名称を持つということになります。
IN MX 10 ns.hogehoge.ne.jp.
IN MX(mail server exchanger)と書いてある行は、メールサーバとして、ns.hogehoge.ne.jp を使用することを定義しています。
10 と記述してあるのは、メールサーバの優先順位であり、複数のメールサーバを使用する場合は、10 とか 20 とか複数行書いてその優先順位を分けます。
この例では、メールサーバは1台しか使用しません。その場合は、10 を入れます。
ns IN A xxx.yyy.zzz.2
IN A の行は、ns の アドレスが xxx.yyy.zzz.2 であると定義しています。
前に述べているように、ns の後ろが略されていて、実際には ns.hogehoge.ne.jp のことを定義しています。
www IN CNAME ns
IN CNAME(canonical name)mail.hogehoge.ne.jp は、ns.hogehoge.ne.jp の別名ですよという定義を行っています。
別名を定義した場合、CNAME の他の行に別名を出現させてはいけません。
現在は、別名を使うことは極力避けるようになっています。
rt IN A xxx.yyy.zzz.1
pc01 IN A xxx.yyy.zzz.3
pc02 IN A xxx.yyy.zzz.4
pc03 IN A xxx.yyy.zzz.5
pc04 IN A xxx.yyy.zzz.6
その他のホストの定義です。
プロバイダから与えられたアドレスを全部定義しておきましょう。与えられたアドレスの空間は全部定義する義務があります。
4. 逆引きファイル作成
逆引きファイル /var/nsd/zone/hogehoge.rev
;
$TTL 3600
@ IN SOA ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
2020111701 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.hogehoge.ne.jp.
IN NS ns.プロバイダ.jp.
1 IN PTR rt.hogehoge.ne.jp.
2 IN PTR ns.hogehoge.ne.jp.
3 IN PTR pc01.hogehoge.ne.jp.
4 IN PTR pc02.hogehoge.ne.jp.
5 IN PTR pc03.hogehoge.ne.jp.
6 IN PTR pc04.hogehoge.ne.jp.
IN PTR(pointer) は、アドレスを名称に変換するための記述です。
アドレスが省略形(相対アドレス)で記述されています。
1、2、3 ・・・というのは、行番号ではありません。正引きファイルのときがそうであったように、このファイルは、xxx.yyy.zzz.0/29 を定義するものですから、2 のアドレスは、xxx.yyy.zzz.2 を意味し、 ns.hogehoge.ne.jp であることを定義しています。
ゾーンファイルのチェックを行うコマンドとして nsd-checkzone というコマンドが用意されていますが、今のところ、文法的な間違いがあってもエラーが出力されないので、コマンドの機能に不備があるのか、使い方が悪いのか、現在調査中です。
すべて編集し終わったら、権限を設定します。
chown -R nsd:nsd /var/nsd/zone
chmod 600 /var/nsd/zone/*
5. nsd.conf 設定
コンフィグレーションファイルを編集します。
vi /usr/local/etc/nsd/nsd.conf
主なところのみ抜き書きしていますので、検索してください。
server:
ip-address: xxx.yyy.zzz.2 ← ポートを待ち受ける IP アドレス
IP アドレスが1つで
unbound と共存しないのであれば不要
verbosity: 2 ← ログの出力をいささか冗長にしています
不要であればコメントアウトします
chroot: "/var/nsd/" ← /var/nsd に chroot します
zonesdir: "/var/nsd/zone" ← ゾーンファイルを配置するディレクトリ名
zonelistfile: "/var/nsd/var/db/nsd/zone.list" ← ゾーンリストファイル名
database: "/var/nsd/var/db/nsd/nsd.db" ← データベースファイル名
logfile: "/var/log/nsd/nsd.log" ← ログファイルの出力先
pidfile: "/var/nsd/var/run/nsd/nsd.pid" ← pid ファイル名
xfrdfile: "/var/nsd/var/db/nsd/xfrd.state" ← よくわかりません
xfrdir: "/var/nsd/tmp" ← よくわかりません
remote-control:
control-enable: yes
server-key-file: "/usr/local/etc/nsd/nsd_server.key"
server-cert-file: "/usr/local/etc/nsd/nsd_server.pem"
control-key-file: "/usr/local/etc/nsd/nsd_control.key"
control-cert-file: "/usr/local/etc/nsd/nsd_control.pem"
zone:
name: "hogehoge.ne.jp" ← 定義しているゾーン名
zonefile: "hogehoge.zone" ← ゾーンの定義ファイル
notify: p.r.o.v NOKEY ← 更新が発生した場合、このアドレスに通知する
notify-retry: 5 ← 通知送信時のリトライ回数
provide-xfr: p.r.o.v NOKEY ← ゾーンデータをこのアドレスに提供する
outgoing-interface: xxx.yyy.zzz.2 ← 通知の送信にこのアドレスを使用する
zone:
name: "32/29.zzz.yyy.xxx.in-addr.arpa"
zonefile: "hogehoge.rev"
notify: p.r.o.v NOKEY
notify-retry: 5
provide-xfr: p.r.o.v NOKEY
outgoing-interface: xxx.yyy.zzz.2
「p.r.o.v」の個所、実際には、転送を許可する「IP」アドレスを入力しますので、ご注意ください。
「nsd」の設定紹介サイトではゾーン名やゾーンファイル名をダブルコーテーションで囲んでいない例が多々ありますが。
「sample」ではダブルコーテーションで囲んでいるので、それを使用しています。
なお、ここでは使用していませんが、自分に対してゾーン転送を行うコンテンツサーバが存在して、そのサーバからのゾーン転送を許可するには、以下のような記述が必要になります。
zone:
name: "ゾーン名"
zonefile: "ゾーンの定義ファイル(なくていいような気がする)"
allow-notify: IPアドレス NOKEY ← 自分に対して転送するサーバのアドレスです。
request-xfr: IPアドレス NOKEY
allow-axfr-fallback: yes
outgoing-interface:xxx.yyy.zzz.2 ← 待ち受けするアドレス
6. その他のディレクトリ作成
その他のディレクトリを作成します。
mkdir -pv /var/nsd/tmp
mkdir -pv /var/nsd/var/db/nsd
mkdir -pv /var/nsd/var/run/nsd
chown -R nsd:nsd /var/nsd
mkdir -pv /var/log/nsd
chown -R nsd:nsd /var/log/nsd
「/var/nsd/var/db」は、データベース用ディレクトリです。
「/var/nsd/var/run/nsd」は、「pid」ファイル用ディレクトリです。
ここまで終わったら
nsd-checkconf /usr/local/etc/nsd/nsd.conf
でエラーが出力されないことを確認します。
7. /etc/rc.conf 設定
/etc/rc.conf
で、「nsd_enable="YES"」を設定します。
service nsd enable
「nsd」を起動します。
service nsd start