DNS設定 · 2 min read · Oct 01, 2025

Ubuntu 20.04でDnsmasqを使用してローカルDNSリゾルバを設定する方法

Dnsmasqは「DNSマスカレードの略」であり、小規模ネットワーク用のシンプルで軽量、使いやすいDNSフォワーダーです。DNSキャッシュおよびDHCPサーバーとして構成でき、IPv4およびIPv6プロトコルの両方をサポートしています。DNSクエリを受信すると、キャッシュから応答するか、異なるDNSサーバーに転送します。

Dnsmasqは3つのサブシステムで構成されています:

  • DNSサブシステム: A、AAAA、CNAME、PTRなどの異なるレコードタイプをキャッシュするために使用されます。
  • DHCPサブシステム: DHCPv4、DHCPv6、BOOTP、およびPXEをサポートします。
  • ルーター広告サブシステム: IPv6ホストの基本的な自動構成を提供します。単独で使用することも、DHCPv6と組み合わせて使用することもできます。

このチュートリアルでは、Ubuntu 20.04サーバーでDnsmasqを使用してローカルDNSサーバーを設定する方法を示します。

前提条件

  • Ubuntu 20.04を実行しているサーバー。
  • サーバーに設定されたrootパスワード。

始めに

まず、システムパッケージを最新バージョンに更新することをお勧めします。次のコマンドを実行してすべてのパッケージを更新できます。

apt-get update -y

すべてのパッケージを更新した後、システムのSystemd-resolvedサービスを無効にする必要があります。Systemd-resolvedサービスは、ローカルアプリケーションへのネットワーク名解決に使用されます。

次のコマンドを実行して無効にできます。

systemctl disable --now systemd-resolved

サービスが無効になったら、デフォルトのresolv.confファイルを削除し、カスタムDNSサーバーの詳細を含む新しいファイルを作成する必要があります。

次のコマンドを実行してデフォルトのresolv.confファイルを削除できます。

rm -rf /etc/resolv.conf

次に、次のコマンドを使用してresolv.confファイルにGoogle DNSサーバーを追加します。

echo "nameserver 8.8.8.8" > /etc/resolv.conf

完了したら、次のステップに進むことができます。

Dnsmasqのインストール

デフォルトでは、DnsmasqはUbuntu 20.04のデフォルトリポジトリにあります。次のコマンドを実行するだけでインストールできます。

apt-get install dnsmasq dnsutils ldnsutils -y

インストールが完了すると、Dnsmasqサービスは自動的に開始されます。次のコマンドを使用してDnsmasqのステータスを確認できます。

systemctl status dnsmasq

次の出力が得られるはずです。

dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-11-02 11:02:01 UTC; 15s ago
   Main PID: 17726 (dnsmasq)
      Tasks: 1 (limit: 2282)
     Memory: 868.0K
     CGroup: /system.slice/dnsmasq.service
             ??17726 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e>

Nov 02 11:02:12 ubuntu2004 systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Nov 02 11:02:12 ubuntu2004 dnsmasq[17705]: dnsmasq: syntax check OK.
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: started, version 2.80 cachesize 150
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: DNS service limited to local subnets
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfi>
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: reading /etc/resolv.conf
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: using nameserver 8.8.8.8#53
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: read /etc/hosts - 7 addresses
Nov 02 11:02:12 ubuntu2004 systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.

完了したら、次のステップに進むことができます。

Dnsmasqの設定

次に、DnsmasqをローカルDNSサーバーとして設定する必要があります。Dnsmasqのメイン設定ファイルを編集することで行えます。

nano /etc/dnsmasq.conf

次の行を変更します。

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1,your-server-ip
expand-hosts
domain=dns-example.com
cache-size=1000

完了したら、ファイルを保存して閉じます。

次に、resolv.confファイルにプライマリネームサーバーとしてサーバーのIPアドレスを追加する必要があります。次のコマンドを使用して追加できます。

nano /etc/resolv.conf

「nameserver 8.8.8.8」の行の上に次の行を追加します。

nameserver your-server-ip

完了したら、ファイルを保存して閉じます。次に、次のコマンドを使用して設定エラーがないかサーバーを確認します。

dnsmasq --test

すべてが正常であれば、次の出力が得られるはずです。

dnsmasq: syntax check OK.

最後に、変更を適用するためにDnsmasqサービスを再起動します。

systemctl restart dnsmasq

この時点で、Dnsmasqは開始され、ポート53でリッスンしています。次のコマンドを使用して確認できます。

ss -alnp | grep -i :53

次の出力が得られるはずです。

udp     UNCONN   0        0                                             0.0.0.0:53                                                0.0.0.0:*                      users:(("dnsmasq",pid=41051,fd=4))                                              
udp     UNCONN   0        0                                                [::]:53                                                   [::]:*                      users:(("dnsmasq",pid=41051,fd=6))                                              
tcp     LISTEN   0        32                                            0.0.0.0:53                                                0.0.0.0:*                      users:(("dnsmasq",pid=41051,fd=5))                                              
tcp     LISTEN   0        32                                               [::]:53                                                   [::]:*                      users:(("dnsmasq",pid=41051,fd=7))                                              

DnsmasqサーバーにDNSレコードを追加

次に、/etc/hostsファイルを編集し、ローカルDNSサーバーのエントリを追加する必要があります。

nano /etc/hosts

次の行を追加します。

your-server-ip host1.dns-example.com

完了したら、ファイルを保存して閉じます。

Dnsmasqサーバーの解決を確認

この時点で、Dnsmasqはインストールされ、設定されています。次はDNS解決を確認する時間です。

次のようにdigコマンドを使用してDNS解決を確認できます。

dig host1.dns-example.com +short

すべてが正常であれば、次の出力にサーバーのIPが表示されるはずです。

your-server-ip

次のコマンドを使用して外部DNS解決も確認できます。

dig howtoforge.com +short

次の出力が得られるはずです。

172.67.68.93
104.26.3.165
104.26.2.165

リモートクライアントをDnsmasq DNSサーバーを使用するように設定

次に、リモートクライアントを設定して、Dnsmasq DNSサーバーをデフォルトのDNSサーバーとして使用する必要があります。

まず、次のコマンドを使用してDNSツールをインストールします。

apt-get install dnsutils ldnsutils -y

インストールが完了したら、/etc/resolv.confファイルを編集し、Dnsmasq DNSサーバーのエントリを追加する必要があります。

nano /etc/resolv.conf

ファイルの先頭に次の行を追加します。

nameserver your-server-ip

完了したら、ファイルを保存して閉じます。次に、次のコマンドを使用してローカルDNS解決を確認します。

dig host1.dns-example.com

次の出力が得られるはずです。

; DiG 9.9.5-3ubuntu0.4-Ubuntu host1.dns-example.com
;; global options: +cmd
;; Got answer:
;; HEADER opcode: QUERY, status: NOERROR, id: 26401
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host1.dns-example.com. IN  A

;; ANSWER SECTION:
host1.dns-example.com.  0   IN  A   45.58.32.165

;; Query time: 301 msec
;; SERVER: 45.58.32.165#53(45.58.32.165)
;; WHEN: Mon Nov 02 16:49:37 IST 2020
;; MSG SIZE  rcvd: 66

次に、キャッシュのためにDNSサーバーを確認する必要があります。drillユーティリティを使用して確認できます。

まず、次のコマンドを実行します。

drill google.com | grep "Query time"

次の出力が得られるはずです。

;; Query time: 290 msec

次に、キャッシュが機能しているかどうかを確認するために再度コマンドを実行します。

drill google.com | grep "Query time"

クエリ時間が4ミリ秒に減少していることがわかるはずです。

;; Query time: 4 msec

結論

おめでとうございます!あなたは成功裏にDnsmasqをローカルDNSサーバーとしてインストールし、Ubuntu 20.04を設定しました。これで、名前解決のためにローカルネットワークに簡単に実装できることを願っています。

Share: X/Twitter LinkedIn

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

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