2026年6月11日
2026年6月11日
MaraDNS をアップグレードする手順|バックアップ・新しい版の試験・切り替えと切り戻し、古い版からの注意点
MaraDNS のアップグレードは、「設定とゾーンファイルを控える → 新しい版を別のアドレスで動かして今の設定を読めるか試す → 短い停止で入れ替える → 古いバイナリで切り戻せるようにしておく」の順で進めると安全です。MaraDNS は権威DNSの maradns と再帰DNSの Deadwood が別のプログラムなので、どちらを使っているかで確認する範囲が変わります。この記事では、現状の確認から、パッケージとソースそれぞれの更新方法、古い版(1.x 系)から上げるときの注意点までを説明します。
MaraDNS の構成と、アップグレードで影響を受ける部分
MaraDNS は Sam Trenholme 氏が開発している小さな DNS サーバーで、現在の版では次のプログラムに分かれています。
- maradns:権威DNS。設定は
/etc/mararc、ゾーンは csv2 形式のファイル(db.example.comなど)。 - Deadwood:再帰DNS(キャッシュDNS)。設定は
/etc/dwood3rc。 - zoneserver:ゾーン転送や TCP での問い合わせに答える補助のプログラム。
古い 1.x 系では maradns 自身が再帰問い合わせも受け持っていましたが、2.0 以降はその役目が Deadwood に移っています。2.x や 3.x の範囲で上げる場合は設定の互換性は比較的保たれていますが、1.x から上げる場合は構成そのものを見直す必要があります(後述)。
公式サイト(maradns.samiam.org)で、最新の版と変更履歴を確認できます。開発は作者1人を中心に続いており、新機能よりも不具合や安全性の修正が中心の、保守を主とした段階にあります(2026年10月現在)。今後も長く使う予定なら、変更履歴の更新頻度もあわせて見ておくと判断の材料になります。
現状を確認してバックアップを取る
まず、どの方法で入れたか(パッケージかソースか)と、いまの版を確かめます。
# パッケージで入れた場合
dpkg -l | grep -i -E 'maradns|deadwood' # Debian・Ubuntu 系
rpm -qa | grep -i -E 'maradns|deadwood' # RHEL 系
# ソースから入れた場合は、置き場所と起動方法を確認する
command -v maradns Deadwood zoneserver
systemctl list-units --all | grep -i -E 'maradns|deadwood|zoneserver'
パッケージで見つからず、/usr/local/sbin などにバイナリがあればソースから入れたものです。展開したソースのディレクトリが残っていれば、ディレクトリ名から版が分かります。起動時のログに版が出る場合もあります。
次に、設定・ゾーン・起動スクリプトをまとめて控えます。
sudo tar czf ~/maradns-backup-$(date +%Y%m%d).tar.gz \
/etc/mararc /etc/dwood3rc /etc/maradns \
/etc/systemd/system/*maradns* /etc/systemd/system/*deadwood* 2>/dev/null
# 今のバイナリも切り戻し用に残す(ソースから入れた場合)
sudo cp -p /usr/local/sbin/maradns /usr/local/sbin/maradns.old
sudo cp -p /usr/local/sbin/Deadwood /usr/local/sbin/Deadwood.old
ゾーンファイルの置き場所は mararc の chroot_dir と csv2 の指定で決まります。上の例の /etc/maradns と違う場合は、実際の場所に合わせてください。あわせて、今の答えを記録しておきます。アップグレード後に同じ問い合わせをして比べるためです。
# 主要な名前の答えを記録しておく(names.txt は「名前 種類」を1行ずつ)
while read -r name type; do
echo "$name $type $(dig @192.0.2.53 "$name" "$type" +norec +short | sort | tr '\n' ' ')"
done < names.txt > before.txt
パッケージで入れている場合
ディストリビューションのパッケージで入れているなら、通常の更新で上がります。パッケージ名は maradns 本体と Deadwood などに分かれていることがあるので、関係するものをまとめて更新します。
sudo apt update
apt list --upgradable 2>/dev/null | grep -i maradns
sudo apt install --only-upgrade maradns maradns-deadwood
パッケージ名は一例です。前の手順の dpkg -l で表示された名前に合わせてください。設定ファイルの扱いを尋ねられたら、基本は今の設定を残す選択をし、新しい既定の設定ファイルとの違いは後で見比べます。ディストリのパッケージは公式の最新版より古いことが多いので、必要な修正が含まれているかを変更履歴で確かめます。
ソースから入れている場合
新しい版を取得して試す
公式サイトから新しい版のアーカイブを取得し、公開されている署名やハッシュ値で確かめてから展開します。ビルドは作業用のディレクトリで行い、すぐには make install しません。
cd ~/src
tar xf maradns-X.Y.ZZZZ.tar.xz # 実際のファイル名に置き換える
cd maradns-X.Y.ZZZZ
./configure
make
ビルドできたら、今の設定を新しいバイナリで読めるかを、本番とは別のアドレスで試します。mararc のコピーを作り、待ち受けのアドレスだけを変えて起動します。
sudo cp /etc/mararc /tmp/mararc.test
# /tmp/mararc.test の ipv4_bind_addresses を "127.0.0.2" に書き換える
sudo ./server/maradns -f /tmp/mararc.test
# 別の端末から試す
dig @127.0.0.2 www.example.com A +norec
ビルド後のバイナリの場所(上の例の ./server/maradns)は版によって違うことがあるので、ビルドの出力やソースの説明書きで確認してください。起動時にエラーが出たら、多くは mararc の書き方の問題です。メッセージに出た変数名を、新しい版の文書で確認します。Deadwood も同じように dwood3rc のコピーで bind_address を変えて試せます。
入れ替える
試験で問題がなければ、本番のバイナリを入れ替えます。make install が何をどこに置くかは版の Makefile やインストール手順の説明で確認し、起動スクリプトや設定ファイルを上書きしないかを先に見ておきます。
sudo systemctl stop maradns deadwood # 実際のサービス名に合わせる
sudo make install
sudo systemctl start maradns deadwood
sudo systemctl status maradns deadwood
止めてから起動するまでの間は応答が止まります。セカンダリがある構成なら、1台ずつ順番に作業すると外から見た停止を避けられます。
アップグレード後の確認
切り替え前に記録した答えと比べ、差分がないかを見ます。
while read -r name type; do
echo "$name $type $(dig @192.0.2.53 "$name" "$type" +norec +short | sort | tr '\n' ' ')"
done < names.txt > after.txt
diff before.txt after.txt
あわせて次の点も確認します。
- 存在しない名前で NXDOMAIN が返るか。
- Deadwood を使っているなら、許可したクライアントから外部の名前(
dig @Deadwoodのアドレス www.example.org)が引けるか、許可していない場所からは答えないか。 - ログにエラーが出ていないか(
journalctl -u maradnsなど)。 - zoneserver でセカンダリにゾーンを配っているなら、セカンダリが転送を受け取れるか。
古い 1.x 系から上げるときの注意点
1.x 系から 2.x 以降に上げる場合、もっとも大きな変化は再帰問い合わせの扱いです。1.x の mararc に recursive_acl を書いて maradns に再帰をさせていた構成は、そのままでは動きません。
- 再帰の役目は Deadwood に移し、許可するクライアントは dwood3rc の
recursive_aclに書きます。上流の DNS を使う場合はupstream_servers、ルートから自分で引く場合はroot_serversを指定します。 - maradns と Deadwood は、同じアドレスの53番を同時には使えません。権威と再帰でアドレスを分けるか、どちらか一方だけを外に見せる構成にします。
- 古いゾーン形式(csv1)で書いたゾーンは、csv2 形式に書き直します。新しい版でどこまで古い形式を読めるかは、その版の文書で確かめてください。
構成が大きく変わるので、1.x からの移行は本番の上で直接行わず、別のサーバーで新しい構成を組んでから切り替える方法が向いています。
切り戻し
新しい版で問題が出たら、パッケージの場合は前の版を指定して入れ直します(apt install maradns=前の版 など。リポジトリに古い版が残っていない場合もあるので、事前に .deb を控えておくと確実性が上がります)。ソースの場合は、控えておいた .old のバイナリを元の名前に戻して再起動します。設定ファイルを新しい版に合わせて書き換えていたら、バックアップの tar から戻します。
まとめ
- maradns(権威)・Deadwood(再帰)・zoneserver のどれを使っているかを確かめてから作業します。
- 設定・ゾーン・起動スクリプトとバイナリを控え、主要な名前の答えを記録しておきます。
- ソースから上げる場合は、別のアドレスで今の設定を新しいバイナリに読ませて試してから入れ替えます。
- 1.x 系からは、再帰を Deadwood に移す構成の見直しが要ります。
- 切り替え後は答えの差分・NXDOMAIN・再帰の可否・ログ・ゾーン転送を確認します。