3. 証明書とキーの生成
nsd-control のために証明書とキーを生成します。
> nsd-control-setup
以下のファイルが生成されます。
/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 サーバ証明書
4. 正引きファイル作成
正引き・逆引きのゾーンファイルの形式は 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. (
2018022701 ; 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. (
2018022701 ; 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
その他のホストの定義です。
プロバイダから与えられたアドレスを全部定義しておきましょう。与えられたアドレスの空間は全部定義する義務があります。
5. 逆引きファイル作成
逆引きファイル /var/nsd/zone/hogehoge.rev
;
$TTL 3600
@ IN SOA ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
2018022701 ; 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/*
6. nsd.conf 設定
/usr/local/etc/nsd/nsd.conf
というファイルが作成されていますので、これを編集します。
主なところのみ抜き書きしていますので、検索してください。
server:
ip-address: xxx.yyy.zzz.2 ← ポートを待ち受ける IP アドレス
IP アドレスが1つで
unbound と共存しないのであれば不要
chroot: "/var/nsd/" ← /var/nsd に chroot します
zonesdir: "/var/nsd/zone" ← ゾーンファイルを配置するディレクトリ名
zonelistfile: "/var/db/nsd/zone.list" ← ゾーンリストファイル名
database: "/var/db/nsd/nsd.db" ← データベースファイル名
logfile: "/var/log/nsd.log" ← ログファイルの出力先
pidfile: "/var/run/nsd/nsd.pid" ← pid ファイル名
xfrdfile: "/var/db/nsd/xfrd.state" ← まだよくわかりません
xfrdir: "/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
nsd の設定紹介サイトではゾーン名やゾーンファイル名をダブルコーテーションで囲んでいない例が多々ありますが、sample ではダブルコーテーションで囲んでいるので、それを使用しています。
なお、ここでは使用していませんが、自分に対してゾーン転送を行うコンテンツサーバが存在して、そのサーバからのゾーン転送を許可するには、以下のような記述が必要になります。
zone:
name: "ゾーン名"
zonefile: "ゾーンの定義ファイル(なくていいような気がする)"
allow-notify: IPアドレス NOKEY ← 自分に対して転送するサーバのアドレスです。
request-xfr: IPアドレス NOKEY
allow-axfr-fallback: yes
outgoing-interface:xxx.yyy.zzz.2 ← 待ち受けするアドレス
7. その他のディレクトリ作成
その他のディレクトリを作成します。
プロンプト略
mkdir -pv /var/nsd/var/db
mkdir -pv /var/nsd/var/run/nsd
chown -R nsd:nsd /var/nsd
/var/nsd/var/db は、データベース用ディレクトリです。
/var/nsd/var/run/nsd は、pid ファイル用ディレクトリです。
ここまで終わったら
> nsd-checkconf /usr/local/etc/nsd/nsd.conf
でエラーが出力されないことを確認します。
8. /etc/rc.conf 設定
/etc/rc.conf
に下記の行を追加します。
nsd_enable="YES"
nsd を起動します。
> service nsd start