FreeBSD 9.3 RELEASE - DNS サーバ unbound・nsd - nsd

 クラウディア
 本項の設定では、プロバイダへのゾーン転送が行われません。「トップページ」より最新リリースの DNS サーバの記事をご参照ください。
1. ports
2. 前提条件
3. ディレクトリの作成
4. 正引き・逆引きゾーン設定
5. nsd.conf 設定
6. /etc/rc.conf 設定

1. ports

    /usr/ports/dns/nsd

2. 前提条件

 以下の環境で設定を行うものとします。
 項目   ローカル   グローバル 
ネットワークアドレス 192.168.0.0/24 xxx.yyy.zzz.0/29
ルータアドレス 192.168.0.1 xxx.yyy.zzz.1
サーバアドレス 192.168.0.2 xxx.yyy.zzz.2
ドメイン名 hogehoge.ne.jp local.hogehoge.ne.jp
サーバ名 ns.hogehoge.ne.jp ns.local.hogehoge.ne.jp
 セキュリティを考慮して /var/nsd に「chroot」して使用します。

3. ディレクトリの作成


> mkdir /var/nsd
> mkdir /var/nsd/var
> mkdir /var/nsd/var/db
> mkdir /var/nsd/var/db/nsd
> mkdir /var/nsd/var/nsd
> mkdir /var/nsd/var/run
> mkdir /var/nsd/var/run/nsd
> mkdir /var/nsd/tmp
> mkdir /var/nsd/zone
> cp    /var/db/nsd/nsd.db /var/nsd/var/db/nsd/nsd.db
> cd    /var
> chown -R nsd:nsd nsd

4. 正引き・逆引きゾーン設定

 正引き・逆引きのゾーンファイルの形式は BIND と同じになります。以下のファイルを作成します。
ローカルアドレス正引きファイル      /var/nsd/zone/local.zone
ローカルアドレス逆引きファイル      /var/nsd/zone/local.rev
グローバルアドレス正引きファイル    /var/nsd/zone/hogehoge.zone
グローバルアドレス逆引きファイル    /var/nsd/zone/hogehoge.rev
 /var/nsd/zone/local.zone

;   local.zone			←	セミコロンで始まる行はコメント行です

$TTL    3600			←	通常、DNSサーバは名前解決がうまくいった場合、
							その情報をキャッシュしておいて一定時間は再度問い合わせを行わず、
							キャッシュにある情報でクライアントからの問いに答えます。
							TTL はキャッシュしておく時間で、秒単位で定義します。
							3600 の場合は、1時間はキャッシュしておくことになります。

@   IN  SOA ns.hogehoge.ne.jp. root.hogehoge.ne.jp.  (
                2014091201  ; Serial
                3600        ; Refresh
                900         ; Retry
                3600000     ; Expire
                3600 )      ; Minimum
    IN  NS  ns.hogehoge.ne.jp.
    IN  NS  セカンダリ.ne.jp.		←	プロバイダから提供された DNS コンテンツサーバを記述します。
    IN  MX  10 mail.hogehoge.ne.jp.	←	メールサーバとして「mail.hogehoge.ne.jp」を使用することを
    									定義しています。
										10 と記述してあるのは、メールサーバの優先順位であり、
										複数のメールサーバを使用する場合は、10 とか 20 とか
										複数行書いてその優先順位を分けます。
										この例では、メールサーバは1台しか使用しません。
										その場合は、10 を入れておきます。

ns      IN  A   192.168.0.2			←	IN Aaddress)は、ns はアドレスとして、
										192.168.0.2 を使用するという意味です。
 以降のファイルでも同様ですが、名称の最後に「.」(ドット)がつくものとつかないものがあります。  ゾーンを定義するファイル内での名称は最後に「.」がつけば絶対名称であり、つかなければ相対名称という意味があります。下位の行で、ns のみ書いてある名称は、「.」がついていません。これは相対名称で、その絶対名称は、後ろにそのゾーン名がつくことになります。もともと、named.conf でこのファイルは、local.hogehoge.ne.jp を定義してあるものですから ns は、ns.local.hogehoge.ne.jp という絶対名称を持つということになります。  /var/nsd/zone/local.rev

$TTL    3600

@   IN  SOA ns.hogehoge.ne.jp. root.hogehoge.ne.jp  (
        2014091201  ; Serial
        3600        ; Refresh
        900         ; Retry
        3600000     ; Expire
        3600 )      ; Minimum
    IN  NS  ns.hogehoge.ne.jp.
    IN  NS  セカンダリ.ne.jp.
    IN  MX  10 mail.hogehoge.ne.jp.

2   IN  PTR ns.local.hogehoge.ne.jp.
	↑
	IN PTRpointer)アドレスを名称に変換するための記述です。
	アドレスが省略形(相対アドレス)で記述されています。1、2、3 ・・・というのは、行番号ではありません。
	正引きファイルのときがそうであったように、このファイルは、192.168.0 を定義するものですから、
	192.168.0.2 のアドレスは ns.local.hogehoge.ne.jp であることを定義しています
 /var/nsd/zone/hogehoge.zone

$TTL    3600

@   IN  SOA ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
        2014091201  ; Serial
        3600        ; Refresh
        900         ; Retry
        3600000     ; Expire
        3600 )      ; Minimum
    IN  NS  ns.hogehoge.ne.jp.
    IN  NS  "セカンダリ".ne.jp.
    IN  MX  10 mail.hogehoge.ne.jp.

mail    IN  CNAME    ns
		↑
		IN CNAMEcanonical namemail.hogehoge.ne.jpns.hogehoge.ne.jp の別名ですよ
		という定義を行っています。
		ただし、WEB 上のバーチャルドメインはともかく DNS コンテンツサーバでは、
		別名を定義するのは、現在はルール違反となっているようです。

ns      IN  A   xxx.yyy.zzz.2
 /var/nsd/zone/hogehoge.rev

$TTL    3600

@   IN  SOA ns.hogehoge.ne.jp. root.hogehoge.ne.jp. (
        2014091201  ; Serial
        ↑
		BIND では、シリアル値を更新すると reload でシリアル値が大きくなったものをロードしなおしていました。
		nsd で reload のみできるかどうかを含めて、現在調査中です。

        3600    ; Refresh
        900 ; Retry
        3600000 ; Expire
        3600 )  ; Minimum
    IN  NS  ns.hogehoge.ne.jp.
    IN  NS  
セカンダリ
.ne.jp. IN MX 10 mail.hogehoge.ne.jp. 2 IN PTR ns.hogehoge.ne.jp.
 グローバルアドレス定義ファイルとローカルアドレス定義ファイルで異なるのは、ローカルの場合自分で使用するアドレスだけ定義しておけばよいということです。この例では省略していますが、グローバルアドレスは、プロバイダから与えられたアドレスを全部定義しておきましょう。与えられたグローバルアドレスの空間は全部定義する義務があります。  xxx.zzz.yyy.0/29 の場合、ネットワークアドレスである xxx.yyy.zzz.0 とブロードキャストアドレスである xxx.yyy.zzz.7 は定義できません  ゾーンファイルのチェックを行うコマンドとして nsd-checkzone というコマンドが用意されていますが、今のところ、文法的な間違いがあってもエラーが出力されないので、コマンドの機能に不備があるのか、使い方が悪いのか、現在調査中です。

5. nsd.conf 設定

 インストール後、/usr/local/etc/nsd/nsd.conf.sample というファイルができていますので、これを nsd.conf にコピーして編集します。

server:
        chroot: "/var/nsd"                            ← /var/nsd への chroot
        zonesdir: "/var/nsd/nsd"                      ← ゾーンファイルを配置するディレクトリ名
        zonelistfile: "/var/nsd/var/db/nsd/zone.list" ← ゾーンリストファイル名
        database: "/var/nsd/var/db/nsd/nsd.db"        ← データベースファイル名
        logfile: "/var/log/nsd.log"                   ← ログファイルの出力先
        pidfile: "/var/nsd/var/run/nsd/nsd.pid"       ← pid ファイル名
        xfrdfile: "/var/nsd/var/db/nsd/xfrd.state"    ← まだよくわかりません
        xfrdir: "/var/nsd/tmp"                        ← まだよくわかりません

zone:
        name: "local.hogehoge.ne.jp"                  ← 定義しているゾーン名
        zonefile: "local.zone"                        ← ゾーンの定義ファイル

zone:
        name: "0.168.192.in-addr.arpa"
        zonefile: "local.rev"

zone:
        name: "hogehoge.ne.jp"
        zonefile: "hogehoge.zone"

zone:
        name: "31/0.zzz.yyy.xxx.in-addr.arpa"
        zonefile: "hogehoge.rev"

 nsd の設定紹介サイトではゾーン名やゾーンファイル名をダブルクォーテーションで囲んでいない例が多々ありますが、sample では囲んでいるので、あえて、囲んでいます。  
定義ファイルのチェックを行うコマンドとして nsd-checkconf というコマンドが用意されていますが、nsd-checkconf と同様。ファイルの有無以外は、文法的な間違いがあってもエラーが出力されないので、コマンドの機能に不備があるのか、使い方が悪いのか、現在調査中です。

6. /etc/rc.conf 設定

 /etc/rc.conf に1行を追加します。

nsd_enable="YES"
 nsd を起動します。

/usr/local/etc/rc.d/nsd start
 定義内容の確認は、次節で行います。
earthcar(アースカー)
U-NEXT
5G CONNECT
薬屋の独り言
葬送のフリーレン Prime Video