2. 証明書とキーの生成
「nsd-control」のために証明書とキーを生成します。
nsd-control-setup
下記のメッセージが表示されました。
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.vm.sing.ne.jp. root.vm.sing.ne.jp. (
2020111701 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.vm.sing.ne.jp.
IN NS ns.sing.ne.jp.
IN MX 10 ns.vm.sing.ne.jp.
ns IN A 192.168.100.171
www IN CNAME ns
rt IN A 192.168.100.1
pc01 IN A 192.168.100.3
pc02 IN A 192.168.100.4
pc03 IN A 192.168.100.5
pc04 IN A 192.168.100.6
解説
;
;(セミコロン)以降はコメントになります。
$TTL 3600
キャッシュの有効期限を秒単位で指定します。
@ IN SOA ns.vm.sing.ne.jp. root.vm.sing.ne.jp. (
2020111701 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
「@ IN SOA」でドメイン情報を記載するという意味です。
続いて、コンテンツサーバ名、管理者のメールアドレスになります。
「Serial」シリアル番号、なんでもいいのですが、伝統的に年月日サフィックスという番号をいれます。
記述を更新した場合、この値を更新しておけばリロードした際にゾーンの書き換えを行います。
Refresh ゾーン転送間隔を秒で指定。
Retry 転送の再試行時間を秒で指定。
Expire ゾーン情報を最新と確認できない場合の有効時間を秒で指定する。
Minimum キャッシュの有効期限を秒単位で指定します。最初のものとは違うらしい。
IN NS ns.vm.sing.ne.jp.
IN NS ns.sing.ne.jp.
「IN NS」で自分のネームサーバ名とプロバイダが提供するネームサーバ名を記述します。
名称の後ろに「.」(ドット)がつくものは、絶対名称を示します。
以降の行で、「ns」のみ書いてある名称は、「.」がついていません。これは相対名称で、その絶対名称は、後ろにそのゾーン名がつくことになります。
もともと、このファイルは、「vm.sing.ne.jp」を定義してあるものですから、「ns」は、「ns.vm.sing.ne.jp」という絶対名称を持つということになります。
IN MX 10 ns.vm.sing.ne.jp.
「IN MX」(mail server exchanger)と書いてある行は、メールサーバとして、「ns.vm.sing.ne.jp」を使用することを定義しています。
「10」と記述してあるのは、メールサーバの優先順位であり、複数のメールサーバを使用する場合は、「10」とか「20」とか複数行書いてその優先順位を分けます。
この例では、メールサーバは1台しか使用しません。その場合は、10 を入れます。
ns IN A 192.168.100.171
「IN A」の行は、「ns」のアドレスが「192.168.100.171」であると定義しています。
前に述べているように、「ns」の後ろが略されていて、実際には「ns.vm.sing.ne.jp」のことを定義しています。
www IN CNAME ns
「IN CNAME(canonical name)mail.vm.sing.ne.jp」は、「ns.vm.sing.ne.jp」の別名ですよという定義を行っています。
別名を定義した場合、「CNAME」の他の行に別名を出現させてはいけません。
現在は、別名を使うことは極力避けるようになっています。
rt IN A 192.168.100.1
pc01 IN A 192.168.100.3
pc02 IN A 192.168.100.4
pc03 IN A 192.168.100.5
pc04 IN A 192.168.100.6
その他のホストの定義です。
プロバイダから与えられたアドレスを全部定義しておきましょう。与えられたアドレスの空間は全部定義する義務があります。
4. 逆引きファイル作成
逆引きファイル /var/nsd/zone/hogehoge.rev
;
$TTL 3600
@ IN SOA ns.vm.sing.ne.jp. root.vm.sing.ne.jp. (
2020111701 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.vm.sing.ne.jp.
IN NS ns.sing.ne.jp.
1 IN PTR rt.vm.sing.ne.jp.
2 IN PTR ns.vm.sing.ne.jp.
3 IN PTR pc01.vm.sing.ne.jp.
4 IN PTR pc02.vm.sing.ne.jp.
5 IN PTR pc03.vm.sing.ne.jp.
6 IN PTR pc04.vm.sing.ne.jp.
「IN PTR(pointer)」は、アドレスを名称に変換するための記述です。
アドレスが省略形(相対アドレス)で記述されています。
「1、2、3 ・・・」というのは、行番号ではありません。正引きファイルのときがそうであったように、このファイルは、「192.168.100.0/24」を定義するものですから、「2」のアドレスは、192.168.100.2 を意味し、「ns.vm.sing.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: 192.168.100.171 ← ポートを待ち受ける 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: "vm.sing.ne.jp" ← 定義しているゾーン名
zonefile: "hogehoge.zone" ← ゾーンの定義ファイル
notify: p.r.o.v NOKEY ← 更新が発生した場合、このアドレスに通知する
notify-retry: 5 ← 通知送信時のリトライ回数
provide-xfr: p.r.o.v NOKEY ← ゾーンデータをこのアドレスに提供する
outgoing-interface: 192.168.100.171 ← 通知の送信にこのアドレスを使用する
zone:
name: "32/24.100.168.192.in-addr.arpa"
zonefile: "hogehoge.rev"
notify: p.r.o.v NOKEY
notify-retry: 5
provide-xfr: p.r.o.v NOKEY
outgoing-interface: 192.168.100.171
「p.r.o.v」の個所、実際には、転送を許可する「IP」アドレスを入力しますので、ご注意ください。
「nsd」の設定紹介サイトではゾーン名やゾーンファイル名をダブルコーテーションで囲んでいない例が多々ありますが。
「sample」ではダブルコーテーションで囲んでいるので、それを使用しています。
なお、ここでは使用していませんが、自分に対してゾーン転送を行うコンテンツサーバが存在して、そのサーバからのゾーン転送を許可するには、以下のような記述が必要になります。
zone:
name: "ゾーン名"
zonefile: "ゾーンの定義ファイル(なくていいような気がする)"
allow-notify: IPアドレス NOKEY ← 自分に対して転送するサーバのアドレスです。
request-xfr: IPアドレス NOKEY
allow-axfr-fallback: yes
outgoing-interface:192.168.100.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