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を設定しました。これで、名前解決のためにローカルネットワークに簡単に実装できることを願っています。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。