備忘録です。
過去に作ったものなので写真等の資料は少なめです
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とかの部分はだいぶ適当にやってるので、自分で調べて適宜変えてください