Ubuntu で dnsmasq を使用して DNS キャッシングをセットアップする方法

公開: 2022-10-19

DNSmasq を使用して、Linux ディストリビューションの DNS 要求をキャッシュできます。 ただし、少し難しい場合があります。

DNS キャッシュは、Web サイトのドメイン名を関連する IP アドレスに変換する DNS ルックアップ手順を高速化するために機能します。 ネットワーク上の複数のユーザーが同じ Web サイト アドレスにアクセスする場合、ローカル DNS キャッシュ サーバーを利用すると、Web の読み込みにかかる時間を短縮できます。

まず、DNS キャッシングとは何かを見てみましょう。

DNSキャッシングとは?

DNS は、公開されているすべてのオンライン サイトとそれに関連する IP アドレスを追跡するために、インターネットで使用されます。 電話帳に例えることができます。 DNS を使用すると、ネットワーク インフラストラクチャがインターネット サイトと対話するために必要な、各サイトの IP を記憶する必要がなくなります。

検索エンジンに Web ページを表示するように要求するときはいつでも、これが実際に舞台裏で行われます。

システムは多数の外部 DNS サーバーにアクセスできますが、問題は、DNS の中央レプリカを使用することで、転送と解決が高速化されることです。 これは、DNS キャッシングの出番です。

dnscache

要求を Web に送信する前に、DNS キャッシュは最近アクセスしたドメインや頻繁にアクセスしたドメインの ID 解決を処理し、手順をより迅速に処理します。

DNS サーバーは、IP アドレスをドメイン名に解決する必要があるときにアクセスされます。 これにより、特に Web サイトが同時に多数のリクエストを受信する場合、DNS サーバーに追加の負荷がかかる可能性があります。

DNS 要求と応答時間を短縮するために、DNS キャッシュが使用されます。 解決された IP アドレスは、ホストの詳細とともにローカルに保存されます。 新しい DNS クエリを開始するのではなく、次に IP またはドメイン名を解決する必要があるときに、結果が DNS キャッシュ メモリから取得されます。

DNS キャッシングは、Amazon EC2 インスタンスで断続的な DNS 解決の問題を修正するのにどのように役立ちますか?

Linux システムの大部分は、ローカル DNS キャッシュを使用しません。 これは、すべての DNS リクエストが、Amazon が提供する正式な DNS リゾルバーに直接送信されることを意味します。これには、一度に処理できるリクエストの数に制限があります。 DNS 解決の問題は、多くの要求がある場合に発生します。

システムにローカル DNS キャッシュを導入すると、DNS 解決エラーを防止しながら、CPU とネットワークの使用率を削減するのに役立ちます ローカル DNS キャッシュは、Amazon RDS や S3 などの外部 DNS リソースに対して行われたクエリに応答します。

DHCP プロトコルは、Amazon VPC に接続された Amazon EC2 インスタンスによる起動時に使用され、DNS サーバー アドレスを要求します。

dnsaw

Amazon VPC を使用して仮想プライベート クラウドを構築すると、Route 53 DNS Resolver は VPC 上のリゾルバーを効果的に利用して、ローカルの Amazon VPC Web アドレスおよびプライベートに管理されたゾーンのエントリで実行されている EC2 インスタンスの DNS リクエストに応答します。 リゾルバーは、すべての追加の Web アドレスについて、パブリック DNS サーバー全体で繰り返しルックアップを行います。

DNS キャッシュは、以前の DNS クエリの一時的な記録として機能し、オンライン Web サイトへのアクセスを試みる際にシステムが迅速に調べることができます。 既存および後続のすべてのセッションのログを保持します。 この DNS キャッシュにより、ドメインの解決が容易になり、Amazon EC2 Linux インスタンスでのエラーが防止されます。

多くのユーザーは通常、AWS にアクセスする際に Amazon の Route 53 サービスを DNS に使用します。 それは本当に使いやすく、ほとんど無料です。 ただし、ローカル DNS サーバーを使用するというユーザーの決定に影響を与える可能性のある理由はいくつかあります。

bind9 は依然としてローカル DNS キャッシュ サーバーをセットアップするための優れたオプションですが、dnsmasq は EC2 インスタンスとローカル マシンの両方にインストールして構成するのがはるかに簡単です。

dnsmasq とは何ですか?

DNSmasq は、DNS、DHCP、TFTP、および DNS キャッシングをサポートする Linux 関連のツールです。 コンパクトで軽量に作られているため、リソースの制約が少ないネットワークやファイアウォールに最適です。

インストールと構成は非常に簡単です。 サブネットワークに DNS と DHCP をセットアップするために、dnsmasq は柔軟で実用的なソリューションです。

DHCP によって割り当てられたこれらの識別子と関連する命令を、各サーバーまたは下層のコントローラーに対して設定することができます。 dnsmasq では、動的および静的 DHCP オプションの両方がサポートされています。 移植性があり、少なくとも 1,000 クライアントの DNS と DHCP を管理できます。

DNS クエリを受信すると、dnsmasq はローカル キャッシュから応答するか、権限のある DNS サーバーに送信します。 DHCP 構成でアドレスの DNS 要求に応答するだけでなく、 /etc/hostsファイルの内容をチェックして、パブリック DNS にリストされていないローカル ホスト名を識別します。

ブラウザの組み込み DNS キャッシュの代わりに dnsmasq ツールを使用すると、インターネット ブラウジングのパフォーマンスが大幅に向上します。 セットアップが非常に簡単で必要なディスク容量が非常に少ないため、リソースが制限された統合環境に最適です。

dnsmasqの特徴

  • 特定のドメイン名解決クエリを特定の権限のあるサーバーに送信するように構成することにより、dnsmasq を使用して内部 DNS サーバーを簡単に統合できます。
  • 構成済みのローカル DNS サーバーを使用することで、サーバーの負荷が軽減され、信頼性が向上します。
  • ファイアウォールが有効なエンドポイントの DNS 構成はかなり簡単で、ISP が採用する DNS とは無関係です。
  • コンピューターで DNS チェックを実行しているときに、インターネットに接続されているポートにアクセスできない場合、ルックアップ操作は即座に中断されます。
  • PPP (ポイント ツー ポイント プロトコル) または DHCP クエリを介して、dnsmasq は実際には、基盤となるドメイン解決サーバーから直接定期的にデータを収集するように構成できます。

インストール

dnsmasqユーティリティをインストールして構成する前に、 systemd-resolvedサービスをオフにする必要があります。

 systemctl stop systemd-resolved

再起動時に自動的に起動しないように、 mask属性を使用して非表示にすることもできます。

 systemctl mask systemd-resolved

dnsmasq のインストールは、 systemd-resolvedをオフにした後に実行する必要がある最初のアクションです。 DNSmasq は、ほぼすべての Linux ディストリビューションにプリインストールされています。 そうでない場合は、手動でインストールできます。 コマンド ターミナルを起動し、次のコマンドを入力して実行します。

 sudo apt-get install dnsmasq

yum ユーザーの場合は、次のコマンドを使用します。

 sudo yum install -y dnsmasq

このコマンドは、ツールを自動的にインストールし、バックグラウンドでdnsmasqを開始します。

dnsmapのインストール

インストールが正常に完了したら、次のコマンドを使用してdnsmasqのステータスを確認できます。

 systemctl status dnsmasq

ステータスが「アクティブ(実行中)」と表示されている場合は、インストールが完了し、ポート 53 に設定されていることを意味します。ステータスが「非アクティブ(デッド)」と表示されている場合は、Ubuntu マシンと dnsmasq の両方を再起動する必要があります。 これにより、エラーが修正されます。

dnsmasqステータス

構成

これで、Dnsmasq をローカル キャッシング DNS サーバーとしてマシンにセットアップする準備が整いました。 デフォルトの設定ファイルは/etc/dnsmasq.confにあります。 システムでdnsmasqユーティリティをセットアップするには、この構成ファイルを変更する必要があります。

このコマンドを使用して、構成ファイルを開いて編集します。

 nano /etc/dnsmasq.conf

構成ファイルは、ルート権限でのみ編集する必要があります。 コメントを含むファイル内のすべてをクリアし、この構成設定をコピーして貼り付けて保存するだけです。

 port=53 domain-needed bogus-priv listen-address=127.0.0.1 expand-hosts domain=geek-demo.com cache-size=1000

各パラメーターの意味を簡単に説明します。

  • ポート– Dnsmasq が DNS 要求を受信するために使用するポートを指定またはバインドします。
  • domain-needed – ドメイン名のみを上流の DNS サーバーに送信します。
  • bogus-priv – ドメインとポート転送を防ぎます
  • listen-address – ネームサーバーのアドレスを定義します。 通常、ローカル DNS サーバーをセットアップするために、localhost がデフォルトとして使用されます。
  • domain – dnsmasq が短い識別子に追加するドメインを構成します。
  • cache-size – ストレージで許可される最大 DNS キャッシュ サイズ。
dnsmasqhost

必要な変更をすべて実行したら、構成ファイルを保存して閉じます。 次のステップは、 /etc/resolv.confファイルを編集して、ローカル ホスト解決アドレスを追加することです。 以下のコマンドを使用して、nano エディターで開きます。

 nano /etc/resolv.conf

ここでは、システムがアドレス解決に使用するすべてのネームサーバーを見つけることができます。 そのリストに、ループバック アドレスも追加します。 「 nameserver 127.0.0.1 」を追加して、最初の行に保持します。

dnsresolve

設定ファイルを保存して終了します。 更新した設定を有効にするために、dnsmasq ユーティリティを再起動します。

 systemctl restart dnsmasq

ローカル DNS キャッシング サーバーのテスト

ローカル DNS サーバーをテストするのは簡単です。 コマンド ラインを開き、dig コマンドを使用して DNS キャッシュを確認します。 初めて dig コマンドを実行すると、結果は非常に一般的なものになるはずです。

 ┌──(rootkali)-[/home/writer] └─# dig geekflare.com 1 ; <<>> DiG 9.18.0-2-Debian <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 227 IN A 172.66.43.163 geekflare.com. 227 IN A 172.66.40.93 ;; Query time: 31 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:52:49 EDT 2022 ;; MSG SIZE rcvd: 74

ここで、上流のネームサーバーから詳細を問い合わせるには、問い合わせ時間が約 31 ミリ秒かかることに注意してください。 まったく同じ dig コマンドをもう一度実行すると、クエリ時間が大幅に短縮されていることがわかります。

 ┌──(rootkali)-[/home/writer] └─# dig geekflare.com 1 ; <<>> DiG 9.18.0-2-Debian <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 281 IN A 172.66.40.93 geekflare.com. 281 IN A 172.66.43.163 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:58:10 EDT 2022 ;; MSG SIZE rcvd: 74

ここで、クエリ時間は 0 ミリ秒です。 これは、最初の検索を実行した後、dnsmasq がデータを保存し、その後に実行されたすべての検索が、保存されたキャッシュの使用により瞬時に行われたためです。 保存された DNS キャッシュを削除する場合は、dnsmasq を再起動する必要があります。

まとめ

この記事では、ローカル DNS サーバーとして機能するように dnsmasq をセットアップおよび構成する方法を見てきました。 また、さまざまなオペレーティング システムで DNS サーバーを高速ブラウジング用に変更する方法についても学びたいと思われるかもしれません。