Dnsmasqは「DNSマスカレードの略」の略で、小規模ネットワークで使用されるシンプルで軽量で使いやすいDNSフォワーダーです。 DNSキャッシュおよびDHCPサーバーとして構成でき、IPv4プロトコルとIPv6プロトコルの両方をサポートします。 DNSクエリを受信すると、キャッシュから応答するか、別のDNSサーバーに転送します。
Dnsmasqは次の3つのサブシステムで構成されています:
- DNSサブシステム: A、AAAA、CNAME、PTRなどのさまざまなレコードタイプをキャッシュするために使用されます。
- DHCPサブシステム: DHCPv4、DHCPv6、BOOTP、PXEをサポートします
- ルーター広告サブシステム: IPv6ホストの基本的な自動構成を提供します。スタンドアロンで使用することも、DHCPv6と組み合わせて使用することもできます。
このチュートリアルでは、Ubuntu20.04サーバーでDnsmasqを使用してローカルDNSサーバーをセットアップする方法を示します。
- Ubuntu20.04を実行しているサーバー。
- ルートパスワードがサーバーに設定されます。
まず、システムパッケージを最新バージョンに更新することをお勧めします。次のコマンドを実行して、すべてのパッケージを更新できます。
apt-get update -y
すべてのパッケージを更新した後、システムでSystemdで解決されたサービスを無効にする必要があります。 Systemd-resolvedサービスは、ローカルアプリケーションへのネットワーク名前解決に使用されます。
次のコマンドを実行して無効にできます:
systemctl disable --now systemd-resolved
サービスを無効にしたら、デフォルトのresolv.confファイルを削除し、カスタムDNSサーバーの詳細を使用して新しいファイルを作成する必要があります。
次のコマンドを使用して、デフォルトのresolv.confファイルを削除できます。
rm -rf /etc/resolv.conf
次に、次のコマンドを使用して、GoogleDNSサーバーをresolv.confファイルに追加します。
echo "nameserver 8.8.8.8" > /etc/resolv.conf
終了したら、次のステップに進むことができます。
Dnsmasqをインストール
デフォルトでは、DnsmasqはUbuntu20.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をローカル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
終了したら、ファイルを保存して閉じます。
次に、サーバーのIPアドレスをresolv.confファイルのプライマリネームサーバーとして追加する必要があります。次のコマンドで追加できます:
nano /etc/resolv.conf
「nameserver8.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))
DNSレコードをDnsmasqサーバーに追加
次に、/ 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
DnsmasqDNSサーバーを使用するようにリモートクライアントを構成する
次に、DnsmasqDNSサーバーをデフォルトのDNSサーバーとして使用するようにリモートクライアントを構成する必要があります。
まず、次のコマンドを使用してDNSツールをインストールします。
apt-get install dnsutils ldnsutils -y
インストールしたら、/ etc/resolv.confファイルとDnsmasqDNSサーバーエントリを編集する必要があります。
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 google.com | grep "Query time"
次の出力が表示されます。
;; Query time: 290 msec
次に、コマンドを再度実行して、キャッシュが機能しているかどうかを確認します。
drill google.com | grep "Query time"
クエリ時間が4ミリ秒に短縮されていることがわかります。
;; Query time: 4 msec
おめでとう!これで、DnsmasqがローカルDNSサーバーおよびUbuntu20.04として正常にインストールおよび構成されました。名前解決のためにローカルネットワークに簡単に実装できるようになったことを願っています。