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

Rocky LinuxにDnsmasqを使用してローカルDNSリゾルバをインストールする方法

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

Dnsmasqは、ルーターやファイアウォールなどのリソースの少ないデバイスに適した小さなフットプリントで軽量に設計されています。Dnsmasqは低いシステム要件を持ち、リソースを少なく消費します。Linux、BSD、Android、macOSで実行できます。

このチュートリアルでは、Rocky Linux 9サーバーにDnsmasqを使用してローカルDNSサーバーをインストールおよび設定する方法を説明します。Dnsmasqをインストールし、ローカルDNSサーバーを設定し、ローカルドメイン名の有効化、/etc/hostsファイルを介したサブドメインの設定、DNSキャッシュの有効化などの追加機能を設定します。最後に、Dnsmasqを介してDHCPサーバーを有効にします。

また、クライアントマシンを設定して、ローカルDNSサーバーをプライマリDNSリゾルバとして使用する方法も学びます。

前提条件

始める前に、いくつかの前提条件があります。以下は前提条件のリストです:

  • Rocky Linux 9サーバー - この例では、ホスト名 ‘ dnsmasq-rocky ‘ とIPアドレス ‘ 192.168.5.50 ‘ を使用します。
  • sudo/root管理者権限を持つ非rootユーザー。
  • SELinuxが ‘ permissive ‘ モードで実行されています。

クライアントマシンには、任意のLinuxディストリビューションを使用できます。クライアントマシンとしてDebianベースまたはRHELベースのディストリビューションを使用できます。

システムの準備

RHELベースのオペレーティングシステムでは、デフォルトのDNSリゾルバ ‘/etc/resolv.conf’ はNetworkManagerサービスによって生成されます。Dnsmasqをインストールする前に、/etc/resolv.confファイルを介して静的DNSリゾルバを設定し、NetworkManagerサービスからDNSリゾルバを無効にします。

まず、以下のnanoエディタコマンドを使用してNetworkManager設定ファイル /etc/NetworkManager/NetworkManager.conf を開きます。

sudo nano /etc/NetworkManager/NetworkManager.conf

セクション ‘ [section] ‘ 内に ‘ dns=none ‘ の行を追加します。

[main]  
dns=none

ファイルを保存し、終了します。

次に、以下のnanoエディタコマンドを使用してDNSリゾルバ設定ファイル ‘/etc/resolv.conf’ を開きます。

sudo nano /etc/resolv.conf

すべての行を削除し、次の行に置き換えます。これにより、CloudflareとGoogleのパブリックDNSをメインDNSサーバーとして使用します。

nameserver 1.1.1.1  
nameserver 8.8.8.8

ファイルを保存し、終了します。

最後に、以下のsystemctlコマンドを実行してNetworkManagerを再起動し、変更を適用します。

sudo systemctl restart NetworkManager

システムの準備

これらの設定が完了すると、DNSリゾルバはNetworkManagerサービスによって変更されず、いつでもDNSリゾルバを追加または変更できます。

次のステップでは、Rocky LinuxでDnsmasqのインストールと構成を開始します。

Rocky LinuxにDnsmasqをインストールする

このステップでは、Rocky LinuxサーバーにDnsmasqパッケージをインストールします。次に、システムの起動時にDnsmasqサービスを開始および有効にします。

デフォルトでは、’ dnsmasq ‘ パッケージはRocky Linux AppStreamリポジトリで利用可能です。以下のdnfコマンドを実行して、’ dnsmasq ‘ パッケージに関する情報を取得します。

sudo dnf info dnsmasq

この執筆時点で、Dnsmasq v2.85はRocky Linux 9で利用可能です。

dnsmasq情報

次に、以下のコマンドを実行してDnsmasqをインストールします。確認を求められたらyを入力し、ENTERを押して続行します。

sudo dnf install dnsmasq dnsmasq-utils

Dnsmasqのインストールが開始されるはずです。

Dnsmasqをインストールした後、以下のsystemctlコマンドを実行して、’ dnsmasq ‘ サービスを開始および有効にします。以下のコマンドを実行すると、’ dnsmasq ‘ サービスは現在実行中で有効になり、起動時に自動的に開始されます。

sudo systemctl start dnsmasq  
sudo systemctl enable dnsmasq

以下のsystemctlコマンドユーティリティを使用して、’ dnsmasq ‘ サービスを確認します。

sudo systemctl status dnsmasq

次のような出力が得られます - ‘ dnsmasq ‘ サービスは現在実行中で、有効であり、起動時に自動的に実行されます。

dnsmasqの確認

Dnsmasqがインストールされ、実行されているので、次にDnsmasqをローカルDNSサーバーとして実行するための構成を開始します。

Dnsmasqの構成

このステップでは、DnsmasqをローカルDNSサーバーとして設定し、キャッシュDNS、DHCPサーバーを有効にし、ローカルアプリケーションのためのドメイン名とサブドメインを構成します。これにより、アプリケーションは ‘ db1.howtoforge.local ‘、’ app.howtoforge.local ‘ などのローカルドメイン名/サブドメインを介してアクセス可能になります。

まず、以下のコマンドを実行してデフォルトのDnsmasq設定ファイルを ‘/etc/dnsmasq.conf.orig’ にコピーし、次に以下のnanoエディタコマンドを使用して元のDnsmasq設定ファイル ‘/etc/dnsmasq.conf’ を開きます。

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

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

# dnsmasqはUDPポート53で実行されます  
# IPアドレスlocalhostと192.168.5.50で  
# ネットワークインターフェースeth1  
port=53  
listen-address=127.0.0.1,192.168.5.50  
interface=eth1  
  
# 非ルーティングアドレスの転送を無効にする  
# メインドメイン.comのない名前の転送を無効にする  
# 簡単な名前にドメイン部分を自動的に追加する  
# dnsmasqが/etc/resolv.confファイルを読み込まないようにする  
domain-needed  
bogus-priv  
expand-hosts  
no-resolv  
  
# 非ローカルドメインの上流DNSサーバー  
# CloudflareとGoogleのパブリックDNSを使用  
server=1.1.1.1  
server=8.8.8.8  
  
# dnsmasqのドメインを定義する  
domain=howtoforge.local  
address=/howtoforge.local/192.168.5.50  
  
# DNSキャッシュを有効にし、キャッシュサイズを調整する  
cache-size=10000  
  
# dnsmasqを介してdhcpを有効にする  
# リースdbファイルを定義する  
# dhcpサーバーを権威あるものにする  
dhcp-range=192.168.5.100,192.168.5.150,12h  
dhcp-leasefile=/var/lib/dnsmasq/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.50に解決されます。
  • cache-size: DnsmasqでDNSキャッシュを有効にします。サイズを調整して、パフォーマンスと速度を向上させてください。
  • dhcp-range: Dnsmasqを介してDHCPサーバーを有効にします。ネットワークのIPアドレスプールとリース時間を調整します。
  • dhcp-leasefile: DHCPリースを保存するために使用されるファイルを定義します。
  • dhcp-authoritative: DHCPサーバーを権威あるものにします。

dnsmasqの設定

次に、以下のnanoエディタコマンドを使用して ‘ /etc/hosts ‘ ファイルを開きます。ローカル環境のアプリケーション用にいくつかのサブドメインを定義します。

sudo nano /etc/hosts

ファイルに以下の行を追加します。この例では、3つのサブドメイン wikimysql、および files を作成します。各サブドメインはDnsmasqサーバーのメインドメイン ‘howtoforge.local’ に従い、特定のIPアドレスを指します。

サブドメイン wiki.howtoforge.local はIPアドレス ‘ 192.168.5.10 ‘ に、サブドメイン ‘ mysql.howtoforge.local ‘ はIPアドレス ‘ 192.168.5.25 ‘ に、そして ‘ files.howtoforge.local ‘ はIPアドレス ‘ 192.168.5.30 ‘ に指します。

192.168.5.10 wiki  
192.168.5.25 mysql  
192.168.5.30 files 

ファイルを保存し、終了します。

次に、以下のnanoエディタコマンドを使用してDNSリゾルバ設定ファイル ‘ /etc/resolv.conf ‘ を開きます。

sudo nano /etc/resolv.conf

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

nameserver 127.0.0.1  
nameserver 192.168.5.50

ファイルを保存し、終了します。

次に、以下のコマンドを実行してDnsmasqの設定を確認し、適切な設定があることを確認します。’ dnsmasq: syntax check OK ‘ のような出力が得られます。

sudo dnsmasq --test

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

sudo systemctl restart dnsmasq

dnsmasqの設定

この時点で、Rocky Linuxシステム上でDnsmasqをローカルDNSサーバーとして構成する作業が完了しました。また、Dnsmasqサーバーのドメイン名と、’/etc/hosts’ファイルを介したいくつかのサブドメインを構成しました。最後に、Dnsmasqを介してDNSキャッシュとDHCPサーバーを有効にしました。

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

Dnsmasqインストールの確認

Dnsmasqの設定が完了したので、Dnsmasqサービス自体を確認します。Dnsmasqがデフォルトのポート50で実行されていることを確認し、サービスが実行中であることを確認します。次に、’ dns-utils ‘ パッケージを介して作成したローカルドメイン名とサブドメインを確認します。

以下のコマンドを実行して、システム上のオープンポートを確認します。次に、以下のsystemctlコマンドユーティリティを使用して ‘ dnsmasq ‘ サービスを確認します。

ss -tulpn | grep 53  
sudo systemctl status dnsmasq

次のような出力が得られます - Dnsmasqはデフォルトのポート53で実行されており、サービスの状態は現在実行中です。また、自動的に起動時に開始されるように有効になっています。

dnsmasqの確認

次に、以下のdnfコマンドを実行して、’bind-utils’パッケージをRocky Linuxサーバーにインストールします。このパッケージは、DNSサーバーのテストとトラブルシューティングのための複数のコマンドラインツールを提供します。

sudo dnf install bind-utils

確認を求められたらyを入力し、ENTERを押して続行します。

bind-utilsのインストール

次に、以下のdigコマンドを実行して、Dnsmasqサーバーのドメイン名 ‘ howtoforge.local ‘ を確認します。’ howtoforge.local ‘ がサーバーのIPアドレス ‘ 192.168.5.50 ‘ に指されていることを確認します。

dig howtoforge.local

ドメイン名の確認

最後に、以下のコマンドを実行して、’/etc/hosts’ファイルを介して定義したサブドメインを確認します。

dig wiki.howtoforge.local +short  
dig mysql.howtoforge.local +short  
dig files.howtoforge.local +short

次のような出力が得られます - サブドメイン wiki.howtoforge.local はIPアドレス 192.168.5.10 に指され、サブドメイン mysql.howtoforge.local はIPアドレス 192.168.5.25 に指され、最後にサブドメイン files.howtoforge.local はサーバーのIPアドレス 192.168.5.30 に指されます。

サブドメインの確認

これらの結果が得られたことで、DnsmasqをローカルDNSサーバーとして構成する作業が完了しました。次のステップでは、Firewalldを介してDNSポートを保護します。

Firewalldの設定

このステップでは、firewalldを設定してDNSサービスポートを開き、内部ネットワークのIPアドレスをfirewalldに追加して、DNSサービスポートにアクセスできる主要なソースとして設定します。

以下のfirewall-cmdコマンドを実行して、firewalldにDNSサービスを追加します。次に、内部ネットワークのIPアドレスをソースとして追加します。

sudo firewall-cmd --add-service=dns  
sudo firewall-cmd --add-source=192.168.5.0/24

次に、以下のコマンドを実行して、作成した一時ルールを保存し、firewalldを再読み込みして変更を適用します。

sudo firewall-cmd --runtime-to-permanent  
sudo firewall-cmd --reload

firewalldの設定

以下のコマンドを使用してfirewalldを確認します。DNSサービスがfirewalldに追加され、ネットワークのソースIPアドレスもfirewalldに追加されていることを確認します。

sudo firewall-cmd --list-all

出力:

firewalldの確認

クライアントの設定(DebianベースまたはRHELベース)

このステップでは、Dnsmasqを介して作成したローカルDNSサーバーを使用するために、DebianベースおよびRHELベースのディストリビューションの両方を設定する方法を学びます。

RHELベースのディストリビューションの場合

以下のnanoエディタコマンドを使用して、NetworkManagerの新しい設定ファイル ‘ /etc/NetworkManager/conf.d/dns-servers.conf ‘ を追加します。

sudo nano /etc/NetworkManager/conf.d/dns-servers.conf

ファイルに以下の行を追加し、DnsmasqサービスのIPアドレスに変更してください。この設定により、クライアントのデフォルトDNSリゾルバをDnsmasqサーバーのIPアドレスを使用して設定します。これにより、DNSリゾルバ設定 ‘ /etc/resolv.conf ‘ が自動的に書き込まれます。

[global-dns-domain-*]  
servers=192.168.5.50

ファイルを保存し、終了します。

次に、以下のsystemctlコマンドを実行してNetworkManagerサービスを再起動し、変更を適用します。

sudo systemctl restart NetworkManager

設定を確認するために ‘/etc/resolv.conf’ ファイルを表示できます。デフォルトのネームサーバーがローカルDnsmasqサーバーのIPアドレス 192.168.5.50 であることが確認できます。

cat /etc/resolv.conf

クライアントマシンの設定

次に、以下のdnfコマンドを実行して、システムに ‘bind-utils’ パッケージをインストールします。

sudo dnf install bind-utils

bind-utilsのインストール

Debianベースのディストリビューションの場合

Debianベースのオペレーティングシステムを使用している場合、DNSリゾルバを手動で設定し、特にUbuntuシステムでは ‘systemd-resolved’ サービスを無効にすることができます。

以下のコマンドを実行して、systemd-resolvedサービスを停止し、無効にします。

sudo systemctl disable --now systemd-resolved

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

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

ファイルに以下の行を追加し、DnsmasqサーバーのIPアドレスに変更します。

nameserver 192.168.5.50

ファイルを保存し、終了します。

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

sudo apt install dnsutils

bind-utils ‘ または ‘ dns-utils ‘ がインストールされたら、以下のdigコマンドを使用してDnsmasqの設定を確認できます。

Dnsmasqサーバーのドメイン名 ‘ howtoforge.local ‘ を以下のdigコマンドで確認します。’ howtoforge.local ‘ がDnsmasqサーバーのIPアドレス 192.168.5.50 に指されていることを確認します。

dig howtoforge.local

クライアントからの確認

次に、以下のコマンドを使用して、’/etc/hosts’ファイルを介して構成したサブドメインを確認します。各サブドメインが、’/etc/hosts’ファイルで構成した特定のIPアドレスに指されていることを確認します。

dig wiki.howtoforge.local +short  
dig mysql.howtoforge.local +short  
dig files.howtoforge.local +short

次のような出力が得られます - サブドメイン wiki.howtoforge.local はIPアドレス 192.168.5.10 に指され、サブドメイン mysql.howtoforge.local はIPアドレス 192.168.5.25 に指され、最後にサブドメイン files.howtoforge.local はサーバーのIPアドレス 192.168.5.30 に指されます。

サブドメインの確認

これにより、ローカルドメイン名とサブドメインが正常に構成されました。では、Github.comなどのパブリックドメイン名はどうでしょうか?

以下のコマンドを実行して、クライアントマシンからインターネットドメイン名を確認します。これにより、DnsmasqサーバーでローカルDNSが解決されていても、インターネットに接続できることが確認できます。

dig github.com

次のような出力が得られます - github.comへのdigクエリは、IPアドレス 192.168.5.50 で実行されているローカルDNSサーバーを介して接続されています。

インターネットのDNS確認

最後に、以下のdigコマンドを使用してDNSキャッシュ設定を確認します。これにより、ターゲットドメイン名へのクエリ時間を含む実行されたクエリの統計が表示されます。

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

次のような出力が得られます - 最初のクエリは ‘ Query time ‘ が63msです。しかし、2回目と3回目のクエリでは、クエリ時間は2msであり、同じドメイン名へのクエリがDnsmasqローカルDNSサーバーを介してキャッシュされていることを意味します。

DNSキャッシュの確認

結論

このチュートリアルでは、Dnsmasqを使用して独自のローカルDNSサーバーを作成しました。Rocky Linux 9サーバー上でDnsmasqを使用してローカル環境用のDNSサーバーを設定しました。また、Dnsmasqの構成にはローカルドメイン名とサブドメインが含まれ、DNSキャッシュを有効にして高速化し、Dnsmasqを介してDHCPサーバーも有効にしました。

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

Share: X/Twitter LinkedIn

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

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