FreeBSD 10.2 RELEASE - nsd・unbound - nsd


クラウディア 

 本項の設定では、プロバイダへのゾーン転送が行われません。「トップページ」より最新リリースの DNS サーバの記事をご参照ください。

1. ports
2. 前提条件
3. ディレクトリの作成
4. 正引き・逆引きゾーン設定
6. nsd.conf 設定
7. /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.jpns.local.hogehoge.ne.jp

3. ディレクトリの作成

 セキュリティを考慮して /var/nsd に chroot して使用します。

> 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
> 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

@   IN  SOA ns.local.hogehoge.ne.jp. root.local.hogehoge.ne.jp.  (
                2014091201  ; Serial
                3600        ; Refresh
                900         ; Retry
                3600000     ; Expire
                3600 )      ; Minimum
    IN  NS  ns.local.hogehoge.ne.jp.
	↑
	IN NSname server)と書いてある行は、DNS コンテンツサーバとして使用するサーバとして
	ns.hogehoge.ne.jp を使用することを定義しています。

    IN  NS  セカンダリ.ne.jp.
    ↑
	プロバイダから提供された DNS サーバを記述します。

    IN  MX  10 ns.local.hogehoge.ne.jp.
    ↑
	IN MXmail server exchanger)と書いてある行は、
	メールサーバとして、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.local.hogehoge.ne.jp. root.local.hogehoge.ne.jp  (
        2014091201  ; Serial
        3600        ; Refresh
        900         ; Retry
        3600000     ; Expire
        3600 )      ; Minimum
    IN  NS  ns.local.hogehoge.ne.jp.
    IN  NS  セカンダリ.ne.jp.
    IN  MX  10 ns.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 ns.hogehoge.ne.jp.

mail    IN  CNAME    ns
		↑
		IN CNAMEcanonical namemail.hogehoge.ne.jpns.hogehoge.ne.jp の
		別名ですよという定義を行っています。
		別名を定義した場合、CNAME の他の行に同じ名前を出現させてはいけません。

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 でシリアル値が大きくなったものをロードしなおしていました。
		nsdreload のみできるかどうかを含めて、現在調査中です。

        3600    ; Refresh
        900 ; Retry
        3600000 ; Expire
        3600 )  ; Minimum
    IN  NS  ns.hogehoge.ne.jp.
    IN  NS  セカンダリ.ne.jp.
    IN  MX  10 ns.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 というコマンドが用意されていますが、今のところ、文法的な間違いがあってもエラーが出力されないので、コマンドの機能に不備があるのか、使い方が悪いのか、現在調査中です。

6. nsd.conf 設定

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

server:
        ip-address: 192.168.0.2      ←	ポートを待ち受ける IP アドレス
                                        IP アドレスが1つで unbound と共存しないのであれば不要
        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.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 というコマンドが用意されていますが、ファイルの有無以外は、文法的な間違いがあってもエラーが出力されないので、コマンドの機能に不備があるのか、使い方が悪いのか、現在調査中です。

7. /etc/rc.conf 設定

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

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

> /usr/local/etc/rc.d/nsd start
 定義内容の確認は、次節で行います。

earthcar(アースカー)