2026年6月8日
2026年6月8日
NSD をアップグレードする手順|リリースノートの確認、バックアップ、セカンダリから順に更新して切り戻しに備える
NSD のアップグレードは、「今の版と入れ方を確認する → 間の版のリリースノートを読む → 設定・ゾーン・鍵・状態ファイルをバックアップする → 新しい版で設定を検査する → セカンダリから1台ずつ更新して応答とシリアルを確かめる」という順に進めると、複数台構成なら名前解決を止めずに更新でき、問題があっても元に戻せます。この記事では、パッケージで入れた場合とソースから入れた場合の両方について、具体的な確認コマンドと、うまくいかなかったときの切り戻し方まで説明します。
手順1:今のバージョンと入れ方を確認する
最初に、どの版がどの方法で入っているかを確かめます。これによって更新の手段と切り戻しの手段が決まります。
nsd -v
command -v nsd
# Debian / Ubuntu
dpkg -l | grep nsd
# RHEL 系
rpm -qi nsd
パッケージ管理の一覧に出てくればパッケージで入っています。出てこず、/usr/local/sbin などにある場合はソースから入れたものです。ソースから入れている場合は、前回ビルドしたディレクトリの config.log に configure のオプションが残っているので、新しい版も同じオプションでビルドできるように控えておきます。
あわせて、設定ファイルの場所と、そのサーバーがプライマリかセカンダリかを確認します。
nsd-checkconf -o zonesdir /etc/nsd/nsd.conf
nsd-control status
nsd-control zonestatus
zonestatus の出力に、各ゾーンの状態とシリアルが並びます。アップグレード後に比べるため、この出力を保存しておくと便利です。
手順2:リリースノートで変更点を確認する
NSD は NLnet Labs が開発しており、各版の変更点はリリースノートと ChangeLog にまとまっています。今の版から更新先の版まで、間の版も含めてすべて目を通し、次の点を探します。
- 廃止された設定項目や、既定値が変わった設定項目
- ファイルの置き場所や扱いの変更(たとえば新しい版では、ゾーンを保存するデータベースファイル nsd.db を使わない方向に扱いが変わっています。設定に database を書いている場合は、更新先での扱いを確認してください)
- 必要なライブラリ(OpenSSL、libevent など)の版の要件
- セキュリティ修正の内容(急いで更新する理由になります)
ディストリビューションの大きな版上げ(OS のメジャーアップグレード)に伴って NSD の版が一気に上がることもあります。その場合も、同じようにリリースノートを確認してから進めます。最新の版番号はここでは挙げません。公式サイトで確認してください(2026年10月現在)。
手順3:バックアップを取る
更新前に、次のものをまとめて保存します。
sudo tar czf /root/nsd-backup-$(date +%Y%m%d).tar.gz \
/etc/nsd \
/var/lib/nsd \
$(nsd-checkconf -o zonesdir /etc/nsd/nsd.conf)
保存しておきたい中身は次のとおりです。
- nsd.conf と、include している設定ファイル
- ゾーンファイル(プライマリでは元データそのものです)
- nsd-control 用の鍵と証明書(nsd_server.key、nsd_control.key など)。作り直すことはできますが、操作用のスクリプトや監視が使っている場合があります。
- ゾーン一覧ファイル(zonelistfile):
nsd-control addzoneで追加したゾーンは nsd.conf ではなくこのファイルに記録されます。ここを失うと、追加したゾーンが更新後に消えたように見えます。 - xfrd の状態ファイル:セカンダリでゾーン転送の状態を持っています。
パスはディストリビューションと設定によって違うので、nsd-checkconf -o zonelistfile /etc/nsd/nsd.conf や nsd-checkconf -o xfrdfile /etc/nsd/nsd.conf のように実際の値を確かめてから対象に含めてください。仮想マシンであれば、作業前にスナップショットも取っておくと切り戻しが簡単になります。
手順4:新しい版で設定を検査する
いきなり本番を更新せず、新しい版が今の設定を読めるかを先に確認します。検証用のサーバーに同じ設定とゾーンを置き、新しい版を入れて次を実行するのが理想です。
nsd-checkconf /etc/nsd/nsd.conf && echo "conf OK"
nsd-checkzone example.com /etc/nsd/zones/example.com.zone
nsd-checkconf が廃止された設定項目でエラーを出したら、リリースノートの記述に従って書き換えます。書き換えた設定は古い版では読めないことがあるので、切り戻しに備えて元の設定もバックアップに残しておきます。
手順5:セカンダリから1台ずつ更新する
複数台で運用している場合は、セカンダリを1台更新し、問題が無いことを確認してから次へ進みます。プライマリは最後にします。セカンダリが応答している間は、利用者側のリゾルバがほかのサーバーへ問い合わせを振り分けるため、1台ずつなら名前解決は止まりません。
パッケージで入れている場合
# Debian / Ubuntu
sudo apt update
sudo apt install --only-upgrade nsd
# RHEL 系
sudo dnf upgrade nsd
Debian 系では、パッケージの設定ファイルが変わっていると、手元で編集した nsd.conf をどうするか尋ねられます。通常は今の版(手元の設定)を残し、差分を見てから必要な変更だけを取り込みます。自動更新で意図せず版が上がるのを避けたい場合は、apt-mark hold nsd で固定し、計画した日に外して更新する運用もあります。
ソースから入れている場合
tar xzf nsd-x.y.z.tar.gz
cd nsd-x.y.z
# 前回の config.log に残っているオプションを付けて実行する
./configure --prefix=/usr/local
make
sudo make install
前回のビルドディレクトリは消さずに残しておくと、切り戻すときに make install をやり直すだけで済みます。
再起動する
プログラム本体を入れ替えたので、nsd-control reload ではなく再起動が必要です。
sudo systemctl restart nsd
sudo systemctl status nsd
手順6:更新後に確認する
再起動したら、次の順で確認します。
nsd -v
nsd-control status
nsd-control zonestatus
dig @192.0.2.53 example.com SOA +norec
journalctl -u nsd --since "10 minutes ago"
- nsd -v で新しい版になっていること。
- zonestatus を更新前に保存した出力と比べ、ゾーンの数と状態が変わっていないこと。
- dig の SOA で aa フラグ付きの応答が返り、シリアルがプライマリと一致していること。シリアルの意味については SOA レコードの解説記事も参考にしてください。
- ログ に設定やゾーンの読み込みエラーが出ていないこと。
セカンダリでは、プライマリでテスト用にシリアルを上げて NOTIFY を送り、ゾーン転送が成功してシリアルが追従するかも確認します。TCP での応答も dig +tcp で一度見ておくと、待ち受けの設定変更による見落としを防げます。外部から見て問題が無ければ、次のサーバーに進みます。
なお、設定で hide-version: yes にしていなければ、dig @サーバー version.bind CH TXT で外部から版が見えます。更新の確認には便利ですが、公開しておく必要が無ければ隠しておくのが一般的です。
うまくいかなかったときの切り戻し
更新後に起動しない、ゾーンが読めないといった問題が起き、すぐに直せない場合は元の版に戻します。
- パッケージの場合:
apt install nsd=元のバージョンのように版を指定して入れ直します。リポジトリに古い版が残っていない場合に備え、更新前に .deb や .rpm を手元に保存しておくと安心です。RHEL 系ではdnf history undoも選択肢です。 - ソースの場合:残しておいた前の版のディレクトリで
make installをやり直します。 - 設定:新しい版向けに書き換えた設定はバックアップの設定に戻します。
戻したら再起動し、手順6と同じ確認をします。原因はログとリリースノートを照らし合わせて調べ、検証環境で再現させてから改めて本番を更新します。
まとめ
- 今の版と入れ方を確認し、更新先までのリリースノートをすべて読みます。
- 設定、ゾーン、鍵、ゾーン一覧ファイル、状態ファイルをバックアップします。
- 新しい版の nsd-checkconf と nsd-checkzone で事前に検査します。
- セカンダリから1台ずつ更新し、再起動後に版・ゾーン状態・SOA シリアル・ログを確認します。
- 古いパッケージやビルドディレクトリを残し、切り戻せる状態で作業します。