2026年6月11日

2026年6月11日

dnsmasq をアップグレードする手順|パッケージ更新・設定の検証・DHCPリースの引き継ぎと切り戻し

dnsmasq のアップグレードは、多くの場合ディストリビューションのパッケージを更新し、dnsmasq --test で設定を検証してから再起動するだけで終わります。ただし、dnsmasq は DNS キャッシュに加えて DHCP サーバーとしても使われていることが多く、NetworkManager や libvirt が自分専用の dnsmasq を起動している環境もあります。この記事では、更新前の確認、パッケージでの更新、ソースからのビルド、更新後の確認、切り戻しの方法を順に説明します。

dnsmasq の最新版やディストリビューションが配布する版は時期によって変わります(2026年10月現在の情報をもとにしています)。作業前には設定ファイルと DHCP のリースファイルをバックアップし、家庭や社内のネットワーク全体の DNS・DHCP を担っているサーバーなら、利用者の少ない時間帯を選んで作業します。

更新する理由と、版の確認

dnsmasq を更新するおもな理由は、脆弱性の修正です。dnsmasq ではこれまでに、キャッシュ汚染やメモリ破壊につながる脆弱性が何度か見つかり、修正版が出ています。外部からの問い合わせを受ける位置に置いているなら、更新を後回しにしないほうが安全です。

まず、今の版とビルド時のオプションを確認します。

dnsmasq --version

1行目に版番号、続く行に Compile time options: としてビルド時に有効になった機能(DHCP、DNSSEC、IPv6 など)が表示されます。更新後にも同じ機能が有効かを比べるため、この出力を保存しておきます。

ここで注意したいのは、Debian・Ubuntu・RHEL 系などのディストリビューションでは、版番号を上げずに、セキュリティ修正だけを古い版に取り込む(バックポートする) ことが多い点です。dnsmasq 本家の最新版より番号が古くても、修正が入っている場合があります。脆弱性への対応状況は、版番号ではなく各ディストリビューションのセキュリティ情報(Debian Security Tracker、Ubuntu の CVE ページ、Red Hat のセキュリティアドバイザリなど)で確認します。

どの dnsmasq が動いているかを確認する

同じサーバーで、複数の dnsmasq が別々の用途で動いていることがあります。

ps -ef | grep [d]nsmasq
  • 単独のサービスとして動いている dnsmasq:/etc/dnsmasq.conf を読む、いわゆる dnsmasq サービスです。この記事の主な対象です。
  • NetworkManager や libvirt が起動した dnsmasq:コマンドラインに NetworkManager や libvirt 用の設定ファイルが指定されています。これらはパッケージの更新で実行ファイルが入れ替わり、各サービスの再起動やネットワークの再接続で新しい版に切り替わります。
  • Pi-hole:Pi-hole は dnsmasq を組み込んだ独自のプログラム(FTL)を使っており、システムの dnsmasq パッケージとは別に Pi-hole 自身の更新手順で更新します。

Debian・Ubuntu では、実行ファイルを含む dnsmasq-base と、サービスとして動かすための dnsmasq パッケージに分かれています。NetworkManager や libvirt が使うのは前者です。

更新前のバックアップ

設定ファイルとリースファイルを保存します。

sudo tar czf /root/dnsmasq-backup-$(date +%Y%m%d).tar.gz \
  /etc/dnsmasq.conf /etc/dnsmasq.d
# リースファイルの場所はディストリビューションで異なる
# Debian / Ubuntu の例: /var/lib/misc/dnsmasq.leases
# RHEL 系の例:          /var/lib/dnsmasq/dnsmasq.leases
sudo cp -p /var/lib/misc/dnsmasq.leases /root/

リースファイルには、どの端末にどの IP アドレスを貸しているかが記録されています。dnsmasq は再起動時にこのファイルを読み直すので、通常の更新では貸し出し中のアドレスが引き継がれます。リースファイルの実際の場所は、設定の dhcp-leasefile か、ディストリビューションの既定値で確認します。

パッケージで更新する

ディストリビューションのパッケージを使っているなら、通常のパッケージ更新で dnsmasq だけを上げられます。

# Debian / Ubuntu
sudo apt update
apt list --upgradable 2>/dev/null | grep dnsmasq
sudo apt install --only-upgrade dnsmasq dnsmasq-base

# RHEL / AlmaLinux / Rocky Linux など
sudo dnf check-update dnsmasq
sudo dnf upgrade dnsmasq

更新の途中で、設定ファイルを新しい既定のものに置き換えるかを尋ねられることがあります。自分で編集した /etc/dnsmasq.conf を使っているなら、基本的には今の設定を残す選択をし、差分だけを確認して必要なものを取り込みます。

設定を検証してから再起動する

再起動の前に、新しい版で設定ファイルを読めるかを確認します。

dnsmasq --test
# 問題なければ "dnsmasq: syntax check OK." と表示される

dnsmasq は版によってオプションの追加や挙動の変更があり、古い設定がそのままでは通らない場合があります。エラーが出たら、表示されたオプション名を本家の CHANGELOG(配布物に含まれています)と man dnsmasq で確認し、新しい書き方に直します。CHANGELOG には挙動が変わった点も書かれているので、エラーが出なくても、今の版から新しい版までの分には目を通しておくと安心です。

検証が通ったら再起動します。

sudo systemctl restart dnsmasq
sudo systemctl status dnsmasq

再起動すると DNS のキャッシュは空になるため、直後はしばらく外部への問い合わせが増えます。

更新後に確認する

起動時のログに、新しい版番号とビルドオプションが出ているかを確認します。

journalctl -u dnsmasq -b --no-pager | tail -n 20

started, version 2.xx のような行と、compile time options: の行が出ていれば、新しい版で起動しています。更新前に保存した出力と比べ、DNSSEC や DHCP など必要な機能が抜けていないかも見ます。

続いて、DNS と DHCP の動作を確認します。

# 名前解決
dig @127.0.0.1 www.example.com A

# dnsmasq は version.bind の問い合わせに版番号を返す
dig @127.0.0.1 version.bind chaos txt +short

DHCP を使っている場合は、端末を1台つなぎ直してアドレスが配られるか、リースファイルに新しい行が追加されるかを確認します。ローカルの名前(/etc/hosts や address= で定義した名前)を使っているなら、それも引けるかを確かめます。

うまく動かないときの切り戻し

新しい版で問題が出た場合は、前の版に戻します。

# Debian / Ubuntu:入手できる版を確認して指定する
apt-cache policy dnsmasq
sudo apt install dnsmasq=<前の版> dnsmasq-base=<前の版>
sudo apt-mark hold dnsmasq dnsmasq-base   # 原因が分かるまで自動更新を止める

# RHEL 系
sudo dnf downgrade dnsmasq

前の版に戻せるのは、その版がリポジトリやパッケージのキャッシュに残っている場合だけです。重要なサーバーでは、更新前に今の版のパッケージファイルを手元に保存しておくと、戻せないという事態を避けられます。

戻したら、バックアップした設定ファイルを戻して dnsmasq --test を実行し、再起動します。自動更新を止めた場合は、原因を解決したあとに apt-mark unhold で解除するのを忘れないようにします。止めたままにすると、以後のセキュリティ修正も入らなくなります。

ソースからビルドしている場合

ディストリビューションの版では足りず、本家の tarball からビルドしている場合は、新しい版を展開して make し、make install で入れ替えます。DNSSEC などの機能はビルド時のオプション(COPTS で指定する -DHAVE_DNSSEC など)で有効にするため、前回と同じオプションを指定しているか、dnsmasq --version の出力で比べます。ソースからのビルドは自分で更新を追い続ける必要があるため、特別な理由がなければパッケージ版に戻すことも検討します。

まとめ

  • dnsmasq --version で版とビルドオプションを保存し、脆弱性対応はディストリビューションのセキュリティ情報で確認します。
  • どの dnsmasq が動いているか(単独サービス、NetworkManager・libvirt、Pi-hole)を確かめ、設定とリースファイルをバックアップします。
  • パッケージで更新し、dnsmasq --test で設定を検証してから再起動します。
  • ログの版番号、dig での名前解決、DHCP の払い出しを確認し、問題があれば前の版に戻します。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲