NSD

ネームサーバとしてはBINDが有名ですが、欲しいのはDNSコンテツサーバーだけなのでシンプルなNSD(そのまんまName Server Daemonの略)を入れます。
また、プライマリ(マスター)とセカンダリ(スレーブ)を用意して、マスターだけ変更すれば自動反映されるようにします。

プライマリDNSのインストール

  1. パッケージ名はnsdです。説明入りのサンプル設定ファイルは/usr/share/docにあります。
    # apt install nsd
  2. /etc/nsd/nsd.confを編集します。本当はconf.dも使えるようですが、ほとんど書くこともないので直接書いてしまいます。
    設定の詳細はコメントか、nsd.conf(5)のマニュアルを確認してください。
    ※今回はゾーンファイルを/etc/nsd3/primary/*.zoneというファイル名で保管しています。
    # WARNING: The glob style doesn't work yet...
    # include: "/etc/nsd/nsd.conf.d/*.conf"
    
    server:
            zonesdir: "/etc/nsd/primary"
    
    pattern:
            name: "myzones"
            zonefile: "%s.zone"
    
    zone:
            name: "example.net"
            include-pattern: "myzones"
  3. nsd.confの内容に合わせて、/etc/nsd3/primaryの中にドメインごとにゾーンファイルを用意します。だいたい下のような見た目になります。(書き方の解説は適宜検索してください。)
    $ORIGIN example.net.
    $TTL 86400
    
    @       IN      SOA     ns1     root.example.net. (
                                    2016010101      ; Serial
                                    86400           ; Refresh
                                    900             ; Retry
                                    604800          ; Expire
                                    3600            ; Negative cache TTL
                                    )
    
    @       IN      NS      ns1.example.net.
    @       IN      NS      ns2.example.net.
    
    @       IN      MX      10 ns1
    lists   IN      MX      10 ns1
    
    @       IN      A       xxx.xxx.xx.x
    @       IN      AAAA    2401:xxxx:xxx:xxxx:xxx:xxx:xxx:xx
    ns1     IN      A       xxx.xxx.xxx.1
    ns2     IN      A       xxx.xxx.xxx.2
    
    @       IN      TXT     "v=spf1 mx ~all"
    lists   IN      TXT     "v=spf1 mx ~all"
    
    postfix._domainkey      IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; "
              "p=省略" )  ; ----- DKIM key postfix for example.net
    _adsp._domainkey        IN      TXT     "dkim=unknown"
  4. confファイルを修正したので、NSDを再起動します。
    # service nsd restart
  5. localhostに対してDNS問い合わせを行い、設定した通りの結果が返ってくるかテストします。
    $ dig example.net @localhost
    $ dig example.net mx @localhost
    $ dig example.net txt @locahost
    $ dig postfix._domainkey @localhost

セカンダリDNSの設定

セカンダリサーバーへは、プライマリからゾーン転送します。転送はそれぞれが相手方のサーバーIPを確認し、かつTSIGにより認証された時のみ許可するよ うにします。

インストール

  1. インストール自体はプライマリもセカンダリも変わりません。
    # apt install nsd

鍵の作成

  1. 鍵の作成には、BINDのコマンドを使います。BINDそのものを入れなくても良いように、コマンドだけをパッケージ化したものがあるのでそれを使います。
    # apt install bind9utils
  2. それぞれのサーバーで使用する共通鍵を作成します。
    # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST tsigkey
  3. 生成されたKtsigkey.+157+35038.privateの中のKey: xxxxxを使います。
    Private-key-format: v1.3
    Algorithm: 157 (HMAC_MD5)
    Key: c+0vYjzV6094mWo3HuO2GA==
    Bits: AAA=

プライマリサーバーの設定

  1. /etc/nsd3/nsd.confに、鍵の情報とゾーン転送先サーバーの情報を追加します。keyの欄に追加するのは、privateにあるほうのKey: に書いてある文字列です。
    server:
            zonesdir: "/etc/nsd/primary"
    
    key:
            name: "sec1_key"
            algorithm: hmac-sha256
            secret: "xxxxx"
    
    pattern:
            name: "myzones"
            zonefile: "%s.zone"
            notify: xxx.xxx.xxx.xxx sec1_key
            provide-xfr: xxx.xxx.xxx.xxx sec1_key
    
  2. プライマリサーバー側はこれだけですので、NSDを再起動します。
    # service nsd restart

セカンダリサーバーの設定

  1. ゾーン転送するのでゾーンファイルは作りませんが、設定ファイル上ゾーンファイルの場所が必要になるのでディレクトリを作成します。(書き出しを指示 した場合は、ゾーン転送されたファイルを書き出す先になります。)
    # mkdir /etc/nsd/secondary
    # chown nsd:nsd /etc/nsd/secondary
  2. /etc/nsd3/nsd.confを編集し、ゾーン転送を受け取る設定にします。
    server:
            zonesdir: "/etc/nsd/secondary"
    
    key:
            name: "sec1_key"
            algorithm: hmac-sha256
            secret: "xxxxx"
    
    pattern:
            name: "slavezones"
            zonefile: "%s.zone"
            allow-notify: xxx.xxx.xxx.xxx sec1_key
            request-xfr: AXFR xxx.xxx.xxx.xxx sec1_key
    
    zone:
            name: "example.net"
            include-pattern: "slavezones"
    
  3. NSDを再起動すれば、自動的にマスターからzone情報を受けとります。
    # service nsd restart
  4. これで、syslogにアップデートした旨が表示され、digの結果セカンダリサーバーからも正常な応答があれば完了です。

目次へ戻る