NSDをFreeBSDとUbuntu上に建ててみた | 技術ブログ

NSDをFreeBSDとUbuntu上に建ててみた

NSDでDNSをたててみた

備忘録です。
過去に作ったものなので写真等の資料は少なめです nsd.confとかの説明はほかのサイト見たほうがいいです いちばんは公式

構築環境

プライマリ:FreeBSD

  • Proriant DL380 Gen9上のproxmoxにインストール
  • ファイアウォール:ipfw

セカンダリ:Ubuntu

  • サクラのVPS上にインストール
  • ファイアウォール:ufw

権威DNSの実装には双方でNSDを使用 IP等については<○○のIP>みたいな感じで書いていきます ドメインはお名前で作ったものを使用。ここではexample.comと表記。ホスト登録をお忘れなく

プライマリの実装

まずはFreeBSDにNSDを入れるところから。こちらの作業はすべてrootでやってます

pkg install nsd

自分の場合NSDのコンフィグ等のファイルは/usr/local/etc/nsd/上に作られた 早速nsd.confをいじっていく

こんな感じにした

server:
        server-count: 4
        ip-address: <プライマリのIP>
        do-ip4: yes
        do-ip6: no
        port: 53
        username: nsd
        hide-version: yes
        hide-identity: yes
        zonesdir: "/usr/local/etc/nsd/zones"
        zonefiles-check: yes
        logfile: "/usr/local/etc/nsd/nsd.log"
        pidfile: "/usr/local/etc/nsd/nsd.pid"
        verbosity: 2

remote-control:
        control-enable: yes
        control-interface: 127.0.0.1
        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"

pattern:
        name: "myzones"
        zonefile: "%s.zone"
        outgoing-interface: <プライマリのIP>

zone:
        name: example.com
        zonefile: example.com.zone
        allow-notify: <セカンダリのIP> NOKEY
        notify: <セカンダリのIP> NOKEY
        notify-retry: 5
        provide-xfr: <セカンダリのIP> NOKEY

verify:

お次にzoneファイル。ここにゾーンの情報を書き込んでいく、このファイルはnsd内のzonesフォルダ内に作成した。修正したときはSOAレコードのserialを書き直すことを忘れずに(2敗)

$TTL 3600 IN SOA ns1.example.com. root.example.com. ( 
        202503231 ;Serial Number 
        7200      ;Refresh
        3600      ;Retry 
        1209600   ;Expire
        3600      ;TTL
) 

    IN NS ns1.example.com. 
    IN NS ns2.example.com. 

ns1 IN A <プライマリのIP>
ns2 IN A <セカンダリのIP> 

最後にファイアウォール

#!/bin/bash

IPF="ipfw -q add" 
ipfw -q -f flush 

#loopback 
$IPF 10 allow all from any to any via lo0 
$IPF 20 deny all from any to 127.0.0.0/8 
$IPF 30 deny all from 127.0.0.0/8 to any 
$IPF 40 deny top from any to any frag 

#statefull 
SIPF 50 check-state 
$IPF 60 allow tcp from any to any established 
$IPF 70 allow all from any to any out keep-state 
$IPF 80 allow icmp from any to any 

$IPF 90 allow tcp from any to <プライマリのIP> <sshのポート> in 
$IPF 100 allow tcp from any to <プライマリのIP> <sshのポート> out 
$IPF 110 allow tcp from any to <プライマリのIP> in 
$IPF 115 allow udp from any to <プライマリのIP> in 
$IPF 120 allow tcp from any to <プライマリのIP> out 
$IPF 125 allow udp from any to <プライマリのIP> out

(rc.confももちろん書かないといけないけど、nsd系の記事調べたら大体書いてあった&それ参照したら動けたので省略)

とりあえずこっちは終わり。

セカンダリの実装

こっちはubuntuだけどさっきとやることはほぼ同じ。 ユーザー権限で作業してますが、適宜sudoで操作してます。

ここでは/etc/nsd/上にファイルができた

server:
        server-count: 4
        ip-address: <セカンダリのIP>
        do-ip4: yes
        do-ip6: no
        port: 53
        username: nsd
        hide-version: yes
        zonesdir: "/etc/nsd/zones"
        zonefiles-check: yes
        logfile: "/var/log/nsd.log"
        pidfile: "/run/nsd/nsd.pid"
        verbosity: 2

remote-control:
        control-enable: yes
        control-interface: 127.0.0.1
        server-key-file: "/etc/nsd/nsd_server.key"
        server-cert-file: "/etc/nsd/nsd_server.pem"
        control-key-file: "/etc/nsd/nsd_control.key"
        control-cert-file: "/etc/nsd/nsd_control.pem"

pattern:
        name: "myzones"
        zonefile: "%s.zone"
        outgoing-interface: <セカンダリのIP>

zone:
        name: example.com
        zonefile: example.com.zone
        allow-notify: <プライマリのIP> NOKEY
        notify: <プライマリのIP> NOKEY
        request-xfr: <プライマリのIP> NOKEY

verify:

セカンダリではゾーンファイルを書く必要がない

ufw

80                         ALLOW       Anywhere
64297/tcp                  ALLOW       Anywhere
53/udp                     ALLOW       Anywhere
Anywhere on lo             ALLOW       Anywhere
Anywhere                   DENY        127.0.0.0/8
53/tcp                     ALLOW       Anywhere
53                         ALLOW       127.0.0.1
53                         ALLOW       <プライマリのIP>
80 (v6)                    ALLOW       Anywhere (v6)
64297/tcp (v6)             ALLOW       Anywhere (v6)
53/udp (v6)                ALLOW       Anywhere (v6)
Anywhere (v6) on lo        ALLOW       Anywhere (v6)
53/tcp (v6)                ALLOW       Anywhere (v6)

どれがnsdを作るときに追加したものか忘れてしまった... まあ問題なく動いているので後々に修正する これで設定は終わり

logみてエラー吐いてなければ多分OK さいごにdig

dig <プライマリのIP> -t ns example.com +norec

nsの部分が設定通りに返ってきてるかを確認 TTLとかの部分はだいぶ適当にやってるので、自分で調べて適宜変えてください

この記事の著者

管理者

このサイトの管理者です。技術的な内容から運営に関する情報まで、幅広いトピックについて発信しています。