0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-04-13

備忘録です。過去に作ったものなので写真等の資料は少なめです
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をいじっていく

こんな感じにした

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

example.com.zone
$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> 

最後にファイアウォール

/usr/local/etc/ipfw.rules
#!/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/上にファイルができた

nsd.conf
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とかの部分はだいぶ適当にやってるので、自分で調べて適宜変えてください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?