1. 概要

私たちが毎日知っていて使用しているインターネットの基本的な基盤は、IPアドレスの名前空間を介した2つ以上のネットワークデバイスの効果的で信頼性の高い通信です。 名前は数字よりもはるかに簡単に思い出せるため、 baeldung.com などの名前でインターネットアドレスにアクセスできるドメインネームシステム(DNS)が作成されました。

このチュートリアルでは、 DNS、特にローカルでインストール可能なDNSキャッシングツールを使用したLinuxでのDNSキャッシングについて詳しく説明します。

2. DNSキャッシングとは何ですか?

DNSキャッシュは、最近のDNSルックアップの一時データベースのようなもので、インターネットにWebサイトをロードする方法を見つけようとするときに、コンピューターがをすばやく参照できます。 最近の訪問と試行された訪問のすべての記録が保存されます。

コンピューターにWebサイトを読み込もうとすると、Webブラウザーは、入力したWebサイトの適切なIPアドレスをルーターに要求します。 すべてのルーターにはDNSサーバーアドレスストアがあり、ホスト名を適切なIPアドレスに変換して、Webサイトをロードできるようにします。

DNSキャッシュは、最近アクセスしたWebサイトのホスト名要求をインターセプトしてからインターネットに送信し、ローカルデータベースを参照するので便利です。 これにより、それぞれのIPアドレスがすでにキャッシュされているため、すでにアクセスしたWebサイトのロードにかかる時間が大幅に短縮されます。

3. systemd-resolvedを使用したDNSキャッシング

systemd-resolved は、システム管理ツールのsystemdスイートの一部であるローカルで利用可能なツールです。 systemd は、ほとんどすべての主要なLinuxディストリビューションですぐに利用できます。

ほとんどのLinuxディストリビューションにはsystemd-resolvedがインストールされていますが、通常はアクティブではありません。

systemd-resolved を使用して、起動時に起動するように設定する小さなローカルキャッシュDNSサーバーを作成して実行してみましょう。 さらに、DNSクエリを作成したキャッシングサーバーにリダイレクトするようにシステムの残りの部分を設定します。

3.1. systemd-resolvedがすでに実行されているかどうかを確認しています

デフォルトでは、Ubuntu19.04などのLinuxディストリビューションではsystemd-resolvedが実行されています。

それが私たちのシステムで実行されているかどうかを確認しましょう:

$ sudo resolvectl status

すでに実行されている場合は、コンソール出力に確認が表示されます。

Global
       LLMNR setting: no
MulticastDNS setting: yes
  DNSOverTLS setting: opportunistic
      DNSSEC setting: allow-downgrade

失敗したメッセージを受け取った場合は、systemd-resolvedを有効にして構成する必要があります。

3.2. systemd-resolvedを有効にする方法

systemd-resolvedサービスを開始しましょう。

$ sudo systemctl start systemd-resolved.service

また、システムの起動時にsystemd-resolvedが実行されるようにすることもできます

$ sudo systemctl enable systemd-resolved.service

3.3. 構成

systemd-resolved がドメインを解決するためにクエリするDNSサーバーを構成するには、systemd-resolved構成ファイルを編集し、必要なパブリックまたはプライベートDNSアドレスペアを含める必要があります。

この記事では、GoogleのパブリックDNSアドレスペアを使用します。これは無料で、DoTとDNSSECの両方をサポートしています。

  • 8.8.8.8
  • 8.8.4.4

メインのsystemd-resolved構成ファイルを開き、GoogleのパブリックDNSペアを追加しましょう。

$ sudo nano /etc/systemd/resolved.conf

DNS=8.8.8.8 8.8.4.4

これで、エディターを保存して終了できます。

最後に、入力したネームサーバーの使用を開始するには、systemd-resolvedサービスを再起動する必要があります。

構成することをお勧めします systemd-解決済み管理する 「/etc/resolv.conf」 シンボリックリンクを作成してファイル 「/run/systemd/resolve/stub-resolv.conf」。 これを実現するには、現在のファイルを削除または名前変更する必要があります 「/etc/resolv.conf」 ファイルを作成し、シンボリックリンクを作成してから、 systemd-解決済みサービス:

$ sudo mv /etc/resolv.conf /etc/resolv.conf.original

$ sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

$ sudo systemctl restart systemd-resolved.service

4. BIND9を使用したDNSキャッシング

Berkely Internet Name Domain(BIND 9)は、ローカルDNSのセットアップに使用できる強力なネームサーバープログラムです。 これは、最も人気があり、広く使用されているネームサーバープログラムの1つです。

4.1. インストール

bind9 をインストールする前に、まずシステムパッケージリポジトリを更新しましょう。 apt を使用する場合は、次を実行します。

$ sudo apt update
$ sudo apt install bind9 bind9utils -y

または、 yum を使用している場合は、次のコマンドを実行できます。

$ sudo yum update
$ sudo yum install bind9 bind9utils -y

これにより、bind9とそのユーティリティがインストールされます。

インストール後、名前付き systemd ユニットファイルを使用して、 bind9 サービスを開始、有効化、停止、およびリロードするために使用できるいくつかのコマンドにアクセスできます。

$ sudo systemctl start --now named
$ sudo systemctl enable --now named
$ sudo systemctl stop --now named
$ sudo systemctl restart --now named

4.2. テスト

dig を使用して、最初とそれ以降のドメインのロードにかかる時間を測定してみましょう。

$ dig +noall +stats baeldung.com

;; Query time: 23 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 01 11:19:05 EST 2022
;; MSG SIZE  rcvd: 56

上記の+noallおよび+stats オプションを使用して、出力を読みやすくしたことに注意してください。

上記のルックアップには合計23ミリ秒かかりました。 次に、上記のコマンドを再実行すると、次の出力が得られると期待できます。

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 01 11:20:01 EST 2022
;; MSG SIZE rcvd: 56

今回は、 b ind9 が最初の訪問時にすでにBaeldungのWebサイトをキャッシュしていたため、クエリ時間は0ミリ秒かかりました。

4.3. 構成

デフォルトの構成ファイルは次のとおりです。

  • / etc / bind –デフォルトのbind9構成ファイルパス
  • / var / cache / bind という名前のの作業ディレクトリ。これにはによって生成された一時ファイルが含まれます。
  • /etc/bind/named.conf bind9のプライマリ構成ファイル
  • / var / log / syslog bind9のデフォルトのログファイル

構成ファイルに変更を加えるときはいつでも、bind9サービスを再起動して変更を有効にする必要があります。

5. dnsmasqを使用したDNSキャッシング

dnsmasqは、DNSキャッシング機能を提供するLinuxユーティリティです。 軽量でフットプリントが小さいように設計されているため、リソースに制約のあるルーターに適しています。 ほとんどのLinuxディストリビューションで利用可能であり、パッケージマネージャーを介してインストールできます。

5.1. インストール

次のコマンドを入力して、 d nsmasqをインストールします。

$ sudo apt-get install dnsmasq

yum ユーザーの場合、以下のコマンドを使用してみましょう。

$ sudo yum install dnsmasq

インストール後、次のコマンドを使用してdnsmasqを起動および有効化できます。

$ sudo systemctl start dnsmasq
$ sudo systemctl enable dnsmasq

5.2. テスト

dig を使用して、 dnsmasq が機能しているかどうか、および既にアクセスしたWebサイトにクエリを実行するときにどれだけの時間を節約できるかをテストしてみましょう。

$ dig +noall +stats baeldung.com
;; Query time: 27 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 01 10:24:05 EST 2022
;; MSG SIZE  rcvd: 56

上記のルックアップには合計27ミリ秒かかりました。 コマンドを再実行すると、次の出力が得られると期待する必要があります。

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 01 10:24:05 EST 2022
;; MSG SIZE rcvd: 56

今回は、 dnsmasq が最初の訪問時にすでにBaeldungのWebサイトをキャッシュしていたため、クエリ時間は0ミリ秒かかりました。

再起動してdnsmasqキャッシュをクリアすることもできます

$ sudo systemctl restart dnsmasq

5.3. 構成

dnsmasq 構成ファイルは、“ /etc/dnsmasq.conf”ディレクトリにあります。 このファイルには、dnsmasqを希望どおりに機能させるために変更できる多くの構成が含まれています。

構成ファイルを編集するときはいつでも、 dnsmasq サービスを再起動して、行った変更を有効にする必要があります。

6. 結論

この記事では、DNSとDNSキャッシングの意味を見ていきました。 また、 systemd-resolved などのローカルで利用可能なツールを使用して、LinuxでのDNSキャッシングについても調査しました。

最後に、パッケージマネージャーから利用できるインストール可能なDNSツールとその利用方法について説明しました。