DNS設定 · 3 min read · Sep 08, 2025

Debian 12でDnsmasqを使用してローカルDNSを設定する方法

Dnsmasqは、ローカル環境(LAN)用の小型で軽量なネットワークサービスです。DNS、DHCP、TFTPなどのネットワークサービスを提供します。Dnsmasqは、DNSフォワーダー、再帰DNSサーバー、およびDNSキャッシングシステムとして使用できます。また、/etc/hostsファイルからDNSコンテンツを読み込むことができ、ローカルホスト名のドメイン名を設定できます。

Dnsmasqは、ルーターやファイアウォールなどのリソースが限られたデバイスに適した、小さなメモリフットプリントを持つ軽量設計です。Dnsmasqは、Linux、BSD、Android、およびmacOSで実行できます。

このチュートリアルでは、Debian 12サーバーでDnsmasqを使用してローカルDNSサーバーをインストールおよび構成します。ローカルネットワーク用に使用できるローカルDNSサーバーを設定し、ローカルドメイン名を追加し、DNSキャッシュを有効にし、Dnsmasqを介してDHCPサーバーを有効にします。また、クライアントマシンを設定してローカルDNSサーバーを使用する方法も学びます。このチュートリアルを完了すると、ローカルドメイン名を介してすべてのアプリケーションにアクセスでき、キャッシュDNSを有効にしたため、DNSリクエストがより速くなります。

前提条件

このチュートリアルを完了するには、以下の要件が必要です。

  • Debian 12サーバー - この例では、ホスト名が ‘ dnsmasq-server ‘ で、IPアドレスが 192.168.5.20 のDebianサーバーを使用します。
  • sudo/root管理者権限を持つ非rootユーザー。

クライアントマシンには、DNS構成がすべてのディストリビューションで類似しているため、任意のLinuxディストリビューションを使用できます。

システムの準備

このステップでは、ローカルDNSサーバーとして使用されるDebianサーバーを準備します。パッケージインデックスを更新し、’ systemd-resolved ‘サービスを停止および無効にし、次に ‘ /etc/resolv.conf ‘ファイルを介して静的DNSリゾルバ構成を作成します。

Debianシステムでは、DNSリゾルバは ‘systemd-resolved’サービスによって管理され、D-BUSインターフェースを介してネットワーク名解決を提供します。DnsmasqなどのDNSサーバーソフトウェアを設定するには、’ systemd-resolved ‘サービスを無効にする必要があります。

始める前に、以下のaptコマンドを実行してDebianパッケージインデックスを更新およびリフレッシュします。

sudo apt update

次に、以下のコマンドを実行して ‘ systemd-resolved ‘サービスを停止および無効にします。Debianシステムでは、DNS構成はNetworkManagerとsystemd-resolvedサービスによって管理されています。

sudo systemctl disable --now systemd-resolved  
sudo systemctl stop systemd-resolved

次のコマンドを使用してDNSリゾルバ構成のリンクファイル ‘/etc/resolv.conf’ を削除します。

sudo unlink /etc/resolv.conf

その後、以下のnanoエディタコマンドを使用して新しいDNSリゾルバ構成ファイル ‘ /etc/resolv.conf ‘ を作成します。

sudo nano /etc/resolv.conf

ファイルに以下の行を追加します。これにより、CloudflareとGoogleのパブリックDNSがDebianサーバーのリゾルバとして追加されます。

nameserver 1.1.1.1  
nameserver 8.8.8.8

作業が完了したら、ファイルを保存してエディタを終了します。次のステップに進んで、Dnsmasqのインストールと構成を行います。

prepare the system

Dnsmasqのインストールと構成

このステップでは、Dnsmasqを使用してローカルDNSサーバーをインストールおよび設定します。DnsmasqをデフォルトのDNSポート 53 と内部IPアドレス ‘ 192.168.5.20 ‘ で実行するように設定します。また、Dnsmasqサービスのドメイン名を定義し、DNSキャッシュを有効にし、最後にDnsmasqを介してDHCPサーバーを有効にします。

デフォルトの ‘ dnsmasq ‘ パッケージはDebianリポジトリで利用可能です。以下のaptコマンドを実行してDnsmasqパッケージをインストールします。

sudo apt install dnsmasq

プロンプトが表示されたら、yを入力して確認し、ENTERを押して続行します。

install dnsmasq

Dnsmasqがインストールされたら、以下のsystemctlコマンドユーティリティを実行して ‘dnsmasq’サービスを確認し、サービスが有効で実行中であることを確認します。

sudo systemctl is-enabled dnsmasq  
sudo systemctl status dnsmasq

以下のような出力が得られます - dnsmasqサービスは有効で、起動時に自動的に実行されます。そして、dnsmasqサービスの現在の状態は実行中です。

verify dnsmasq

DnsmasqがDebianシステムで実行されている状態で、次に ‘/etc/dnsmasq.conf ‘ ファイルを介してDnsmasqの構成を開始します。

まず、以下のコマンドを実行してデフォルトのDnsmasq構成ファイルをバックアップします。

sudo cp /etc/dnsmasq.conf{,.orig}

次に、以下のnanoエディタコマンドを使用してDnsmasq構成ファイル ‘ /etc/dnsmasq.conf ‘ を開きます。

sudo nano /etc/dnsmasq.conf

ファイルに以下の行を追加します。

# dnsmasq run on UDP port 53  
# with IP address localhost and 192.168.5.20  
# and network interface eth1  
port=53  
listen-address=127.0.0.1,192.168.5.20  
interface=eth1  
  
# disable forwarding of non-routed address  
# disable forwarding names without the main domain.com  
# automatically append the domain part to simple names  
# disable dnsmasq to read /etc/resolv.conf file  
domain-needed  
bogus-priv  
expand-hosts  
no-resolv  
  
# upstream DNS server for non-local domain names  
# using Cloudflare and google public DNS  
server=1.1.1.1  
server=8.8.8.8  
  
# define the domain for dnsmasq  
domain=howtoforge.local  
address=/howtoforge.local/192.168.5.20  
  
# enable DNS Cache and adjust cache-size  
cache-size=1000  
  
# enable DHCP via dnsmasq  
# define lease db file  
# make the dhcp server as an authoritative  
dhcp-range=192.168.5.80,192.168.5.150,12h  
dhcp-leasefile=/var/lib/misc/dnsmasq.leases  
dhcp-authoritative

作業が完了したら、ファイルを保存してエディタを閉じます。

Dnsmasqで使用する詳細オプションは以下の通りです。

  • port: Dnsmasqを実行するポート。
  • listen-address: Dnsmasqを実行するIPアドレス。複数のIPアドレスを使用できます。
  • interface: Dnsmasqがバインドして実行されるインターフェース。
  • domain-needed: メインドメインアドレスがない名前の転送を無効にします。完全なローカルドメインを指定しない限り、’ mysql1 ‘ホストにはアクセスできません。
  • bogus-priv: 非ルーティングアドレスの転送を無効にします。
  • expand-hosts: 簡単な名前にローカルドメイン部分を自動的に追加します。
  • no-resolv: サーバー上の ‘/etc/resolv.conf’ ファイルを無視します。
  • server: 非ローカルアドレスまたはドメインに使用する上流DNSサーバーを定義します。この例では、CloudflareとGoogleのパブリックDNSサーバーを使用しています。
  • domain: Dnsmasqサーバーのドメイン名を定義します。この例では、Dnsmasqサーバーはローカルドメインhowtoforge.localを取得します。
  • address: Dnsmasqのドメイン名に対するIPアドレスを定義します。この例では、howtoforge.localドメインはIPアドレス 192.168.5.20 に解決されます。
  • cache-size: DnsmasqでDNSキャッシュを有効にします。サイズを調整してパフォーマンスと速度を向上させてください。
  • dhcp-range: Dnsmasqを介してDHCPサーバーを有効にします。ネットワークのIPアドレスプールとリース時間を調整します。
  • dhcp-leasefile: DHCPリースを保存するために使用されるファイルを定義します。
  • dhcp-authoritative: DHCPサーバーを権威あるものにします。

dnsmasq config

次に、以下のnanoエディタコマンドを使用して構成ファイル ‘/etc/hosts’ を開きます。内部アプリケーションのサブドメインを定義し、Dnsmasqドメイン名 ‘ howtoforge.local ‘ で自動的に構成されます。

sudo nano /etc/hosts

ファイルに以下の行を追加します。この例では、サブドメイン app1db1、および files を定義します。これらのサブドメインのルートドメインはDnsmasqサーバー自体 ‘ howtoforge.local ‘ です。

以下の行により、’ app1.howtoforge.local ‘ はIPアドレス ‘ 192.168.5.10 ‘ に解決され、サブドメイン ‘ db1.howtoforge.local ‘ はサーバーIPアドレス ‘ 192.168.5.25 ‘ にポイントされ、サブドメイン ‘files.howtoforge.local ‘ はIPアドレス ‘192.168.5.50 ‘ にポイントされます。

192.168.5.10 app1  
192.168.5.25 db1  
192.168.5.50 files 

作業が完了したら、ファイルを保存してエディタを終了します。

次に、以下のnanoエディタコマンドを使用して ‘ /etc/resolv.conf ‘ ファイルを開き、DnsmasqサーバーIPアドレスを ‘ nameserver ‘ として追加します。

sudo nano /etc/resolv.conf

ファイルの先頭に以下の行を追加します。DnsmasqサーバーのIPアドレスに変更してください。

nameserver 127.0.0.1  
nameserver 192.168.5.20

作業が完了したら、ファイルを保存してエディタを終了します。

次に、以下のdnsmasqコマンドを実行してDnsmasq構成を確認し、正しい形式の構成が得られていることを確認します。出力は ‘ dnsmasq - syntax check OK ‘ のようになります。

sudo dnsmasq --test

最後に、以下のsystemctlコマンドユーティリティを実行して ‘ dnsmasq ‘ サービスを再起動し、変更を適用します。

sudo systemctl restart dnsmasq

verify dnsmasq and configure it

この時点で、DebianシステムでDnsmasqを介してローカルDNSサーバーの構成が完了しました。また、ローカルドメイン名とサブドメインを構成し、DNSキャッシュを有効にし、Dnsmasqを介してDHCPサーバーを有効にしました。

次のステップでは、Dnsmasqサーバーのインストールと構成を確認します。

Dnsmasqインストールの確認

このステップでは、Dnsmasqサービスとシステム上のLISTENポートを確認して、Dnsmasqのインストールを確認します。次に、’/etc/hosts’ファイルを介して構成したローカルドメイン名とサブドメインを確認します。

以下のコマンドを実行して、Dnsmasqサービスがポート53で実行されていることを確認します。次に、systemctlコマンドユーティリティを介してDnsmasqサービスの状態を確認します。

ss -tulpn | grep 53  
sudo systemctl status dnsmasq

以下のような出力が得られます - Dnsmasqサービスはデフォルトのポート53で実行されており、有効で、起動時に自動的に実行されます。

verify dnsmasq service

次に、’/etc/hosts’ファイルを介してDnsmasqで構成したドメイン名とサブドメインを確認します。しかし、その前に、以下のaptコマンドを実行して、システムに ‘ dnsutils ‘ パッケージをインストールします。’dnsutils’パッケージは、DNSサーバー構成をテストするためのコマンドラインツールを提供します。

sudo apt install dnsutils

プロンプトが表示されたらyを入力し、ENTERを押してインストールを続行します。

dnsutils ‘ がインストールされたら、以下のdigコマンドを実行して、構成したドメイン名とサブドメインを確認します。

Dnsmasqのメインドメイン ‘ howtoforge.local ‘ を確認します。これはDnsmasqサーバーのIPアドレス ‘192.168.5.20’ にポイントされています。

dig howtoforge.local

testing with dig command

以下のdigコマンドを使用して、’/etc/hosts’ファイルを介して定義したサブドメインを確認します。

dig app1.howtoforge.local +short  
dig db1.howtoforge.local +short  
dig files.howtoforge.local +short

サブドメイン ‘ app1.howtoforge.local ‘ はIPアドレス ‘ 192.168.5.10 ‘ にポイントされ、サブドメイン ‘ db1.howtoforge.local ‘ はIPアドレス ‘ 192.168.5.25 ‘ にポイントされ、最後に ‘ files.howtoforge.local ‘ はIPアドレス ‘ 192.168.5.50 ‘ にポイントされます。

以下は、得られる出力の例です。

verify sub domains

これで、DnsmasqをローカルDNSサーバーとして構成し、テストが完了しました。次のステップでは、UFWファイアウォールを使用してDnsmasqを設定および保護します。

UFWファイアウォールの設定

次に、ローカルDNSサーバーのファイアウォールを設定します。UFWファイアウォールを介してDNSサーバーへのアクセスを制限することで、Dnsmasqのインストールを保護します。

以下のaptコマンドを実行して、DebianシステムにUFWファイアウォールをインストールします。

sudo apt install ufw -y

install ufw firewall

UFWをインストールした後、以下のコマンドを実行して、OpenSSHサービスとDNSポート 53 をUFWファイアウォールに追加します。この例では、Dnsmasqサーバーにアクセスできるネットワークのソースを指定します。これは、IPアドレス 192.168.5.0/24 のローカルネットワークです。

ローカルネットワークのIPアドレスを内部ネットワークのサブネットに変更してください。

sudo ufw allow OpenSSH  
sudo ufw allow from 192.168.5.0/24 to any port 53 proto udp

次に、以下のコマンドを実行してUFWファイアウォールを開始および有効にします。

sudo ufw enable

設定を求められたら、yを入力して確認し、ENTERを押して続行します。UFWファイアウォールは現在実行中で有効になっており、起動時に自動的に開始されます。

setup enable ufw

最後に、以下のコマンドを実行してUFWファイアウォールの状態を確認します。UFWファイアウォールが ‘active’ であり、OpenSSHサービスとDNSポート53がファイアウォールに追加されていることが表示されます。

sudo ufw status

verify ufw

UFWファイアウォールが構成されたので、ローカルDNSサーバーに接続するクライアントを追加できます。

クライアントの設定

このステップでは、Debianベースのディストリビューションを持つクライアントマシンを設定し、ホスト名を ‘ client ‘ にします。クライアントマシンにローカルDNSサーバーDnsmasqを追加します。

以下のコマンドを実行して、DNSリゾルバ構成ファイル ‘/etc/resolv.conf’ のリンクを削除します。次に、以下のnanoエディタコマンドを使用して新しいリゾルバ構成 ‘ /etc/resolv.conf ‘ を作成します。

sudo unlink /etc/resolv.conf  
sudo nano /etc/resolv.conf

ファイルに以下の行を入力します。DnsmasqサーバーのIPアドレスに変更してください。

nameserver 192.168.5.20

作業が完了したら、ファイルを保存してエディタを終了します。

次に、以下のコマンドを実行してクライアントマシンに ‘dnsutils’ パッケージをインストールします。

sudo apt install dnsutils

setup client

次に、以下のdigコマンドを実行してドメイン名 ‘ howtoforge.local ‘ を確認します。これはDnsmasqサーバーのIPアドレスにポイントされます。

dig howtoforge.local

以下は、得られる出力の例です。

verify domain from client

サブドメインについては、以下のdigコマンドを実行します。各サブドメインは、Dnsmasqサーバーの ‘/etc/hosts’ ファイルに定義されたIPアドレスにポイントされます。

dig app1.howtoforge.local +short  
dig db1.howtoforge.local +short  
dig files.howtoforge.local +short

以下は、クライアントマシンで得られる出力の例です。

verify sub domains

次に、DnsmasqローカルDNSサーバーを介してパブリックドメイン名にアクセスできることを確認する必要があります。これを確認するには、’ github.com ‘ のようなパブリックドメイン名をチェックします。

dig github.com

以下のような出力が得られます - 出力の下部には、リクエストが ‘ 192.168.5.20’ で実行されるDnsmasqローカルDNSサーバーによって応答されていることが表示されます。これを考慮すると、DnsmasqローカルDNSサーバーを介してパブリックドメイン名に正常に接続しました。

ensure dns is working

最後に、’drill’および’dig’コマンドを介してDNSキャッシュを確認します。’ drill ‘ コマンドは ‘ ldnsutils ‘ パッケージの一部であるため、以下のaptコマンドを実行してインストールします。

sudo apt install ldnsutils

install ldns

ldnsutilsがインストールされたら、以下のdrillコマンドを実行して、Dnsmasqサーバーで構成したDNSキャッシュを確認します。

drill duckduckgo.com | grep "Query time"  
drill duckduckgo.com | grep "Query time"

以下のような出力が得られます - 最初にリクエストを行ったとき、’ Query time ‘ は60msです。しかし、同じドメインを再度リクエストすると、クエリ時間は1msに短縮され、DNSリクエストがローカルDNSサーバーDnsmasqにキャッシュされていることが示されます。

verify dns cache

また、’ +stats ‘ オプションを使用してdigコマンドでDNSキャッシュを確認することもできます。

dig +noall +stats duckduckgo.com  
dig +noall +stats duckduckgo.com

これで、クライアントマシンの構成が完了し、’/etc/hosts’ファイルを介して定義したローカルドメイン名とサブドメインから、Dnsmasqで有効にしたDNSキャッシュまで、DnsmasqローカルDNSサーバーが完全に機能していることを確認しました。

結論

このチュートリアルでは、Dnsmasqを使用して独自のローカルDNSサーバーを作成しました。Debian 12サーバー上でDnsmasqを使用してローカル環境用のローカルDNSサーバーを設定しました。また、Dnsmasqの構成にはローカルドメイン名とサブドメインが含まれ、DNSキャッシュを有効にしてより迅速な再帰DNS応答を得ることができ、Dnsmasqを介してDHCPサーバーを有効にしました。

最後に、作成したローカルDNSサーバーを使用するためにクライアントマシンを追加および構成しました。この中で、digコマンドを使用してDNSサーバーのトラブルシューティングを行う方法や、LinuxシステムでDNSリゾルバを設定する方法も学びました。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。