重要なポイント
「resolvectl flash-caches」コマンドを使用して、systemd ベースの Linux コンピューター上の DNS キャッシュをフラッシュできます。 dnsmasq を使用する場合は、代わりに「sudo killall -HUP dnsmasq」を使用して DNS をクリアできます。
Linux デバイスでのインターネット ブラウジング エクスペリエンスは遅いですか、それともアクセスしている Web サイトが古いですか、あるいはまったく間違った Web サイトですか? Linux での DNS キャッシュのフラッシュと、本当に必要かどうかを判断する方法について説明します。
DNSキャッシュとは何ですか?
ドメイン ネーム サービスは 、名前を数字に変換するちょっとした魔法です。デバイスのネットワーク名と Web サイト名を取得し、それらの IP アドレスを検索します。これにより、ネットワークは IP アドレスを使用して、トラフィックをそれらのデバイスまたはサイトに正しくルーティングできるようになります。
リクエストと呼ばれるこれらの検索は、 即座に行われるわけではありません 。限られた短い時間が関係します。インターネット DNS 要求では、プリカーサー DNS サーバー、ルート ネーム サーバー、トップレベル ドメイン サーバー、および権威ネーム サーバーへのクエリが必要になる場合があります。 DNS リクエストは高速ですが、さらに高速化するために、最近の DNS リクエストに対する応答は DNS プリカーサー サーバーにキャッシュされます。
DNS リクエストに対する応答がプリカーサー サーバーのキャッシュで見つかった場合、それ以上サーバーに接続する必要はありません。回答はプリカーサー サーバーのキャッシュから返されます。同様に、自宅のブロードバンド ルーターによって小さなキャッシュが維持されます。ネットワーク デバイス名を使用してローカル ネットワーク デバイスを要求すると、ルーターは IP アドレスを提供します。また、外部 DNS サーバーから受信した応答をキャッシュすることもあります。
通常、ネットワークと Linux コンピューターは、インターネット サービス プロバイダーまたは OpenDNS や Google DNS などの無料サービスによって提供される外部 DNS サービスを使用するように構成されています。 一部の人が独自の DNS サーバーを実行している のには十分な理由がありますが、ほとんどの人は実行しません。ただし、Linux コンピューターは、DNS サーバーを実行していない場合でも、オプションで DNS 要求の結果をキャッシュできます。
キャッシュされたデータを使用する場合の問題点は、キャッシュされた詳細がキャッシュされてから変更されていないという前提にすべてが基づいていることです。詳細が変更された場合、受け取った情報は古くなります。
キャッシュ エントリまたはキャッシュ全体が破損すると、良くてもパフォーマンスが不安定になり、最悪の場合はセキュリティの脆弱性が発生します。その場合は、DNS キャッシュの「フラッシュ」またはクリアを検討する必要があります。
お使いのコンピュータはローカル DNS キャッシュを使用していますか?
テスト コンピューターの一部ではローカル DNS キャッシュがオンになっていましたが、他のコンピューターではローカル DNS キャッシュがオフになっていました。 Manjaro 21 コンピューターではオフになっていましたが、 Fedora 37 と Ubuntu 22.10 ではデフォルトでオンになりました。
Linux コンピューターが DNS 要求をキャッシュしているかどうかを確認するには、
systemctl
コマンドの
is-active
オプションを使用します。 DNS キャッシュを管理するデーモンは、
systemd-resolved
として知られる systemd ネットワーク名解決マネージャーです。
systemctl is-active systemd-resolved
応答が「アクティブ」の場合、DNS キャッシュが行われています。応答が「非アクティブ」の場合、実際はそうではありません。この特定のコンピュータではアクティブになっています。統計オプションを指定して
resolvectl
コマンドを使用すると、キャッシュ内にあるレコードの数を確認できます。
解決ctl統計
このコンピュータの DNS キャッシュには 330 のエントリがあることがわかります。
DNS キャッシュを確認する
DNS キャッシュ エントリの確認はキャッシュをフラッシュするための前提条件ではありません。その必要がない場合は、 この手順全体をスキップ できます。ただし、有益な場合もあります。破損を示すスクランブルされたエントリが表示される場合や、ネットワーク上のデバイスのアドレス指定の問題に関連するエラー メッセージが表示される場合があります。
現在、これらのエントリを確認する簡単な方法はありません。それは可能ですが、少し創造的になる必要があります。
USR1
、つまりユーザー定義シグナル 1 は、
kill
および
killall
コマンドによって送信できる
シグナル
です。この信号には事前に定義された意味はありません。アプリケーションは、この信号を自由に無視したり、開発者が実装した方法で反応したりすることができます。
systemd-resolved
デーモンは、USR1 のキャッシュをシステム ログに書き込むことで
USR1
に反応します。その後、
journalctl
コマンドを使用して、DNS エントリをフィルタリングして除外できます。
USR1
で
killall
コマンドを使用して、
systemd-resolved
デーモンにシグナルを送信します。
killall
コマンドを使用していますが、
systemd-resolved
デーモンは引き続き実行されることに注意してください。これは私たちが送信している終了信号ではありません。
sudo killall -USR1 systemd-resolved
ここで、
-u
(
systemd
ユニットによるフィルター) オプションを指定して
journalctl
コマンドを使用し、
systemd-resolved
によって生成されたログ エントリを抽出します。その出力を「dns.txt」というテキスト ファイルにリダイレクトします。
sudojournalctl -u systemd-resolved > dns.txt
ファイルの内容を表示するには、
less
ファイル ビューア
を使用します。
dns.txt を減らす
テキストをスクロールして検索すると、ドメイン名と IP アドレス の間のキャッシュされたマッピングを見つけることができます。
IP アドレス 216.58.212.196 を持つ Google のエントリが表示されます。 Web ブラウザに IP アドレスを入力すると、それを確認できます。 Google 検索のホームページが表示されるはずです。
Linux で DNS キャッシュをクリアする方法
キャッシュをフラッシュするとすべてのエントリが削除され、収集プロセスが再度開始されます。存在する場合、間違ったエントリや破損したエントリがキャッシュから強制的に削除されます。
コマンドは簡単です。
flush-caches
オプションを指定して
resolvectl
を使用します。
解決ctlフラッシュキャッシュ
何も言わずにコマンドラインに戻ります。実際に何かが起こったことを確認するために、DNS キャッシュ統計を再度確認します。
解決ctl統計
キャッシュ サイズがゼロになっていることがわかります。新しいエントリが蓄積されるにつれて、時間の経過とともに増加します。
Linux で dnsmasq キャッシュをフラッシュする方法
dnsmasq
アプリケーションは、DNS キャッシュと DHCP サーバーを提供します。これは、特に
systemd 以外のインストール環境
で独自の DNS サーバーを実行したいユーザーに人気があります。
dnsmasq
DNS キャッシュをフラッシュするのは簡単です。
SIGHUP
シグナルを送信する必要があります。これにより、
dnsmasq
デーモンに効果的に再初期化するように指示されます。これにより、DNS キャッシュがクリアされます。シグナルを送信するには、
-HUP
フラグとアプリケーション名を指定した
killall
コマンドを使用します。
sudo killall -HUP dnsmasq
フラッシュ、成功
もちろん、コンピューターがまったくキャッシュを行っていない場合は、確認する必要はありません。
DNS リクエストをキャッシュしていてもすべてが正常に動作している場合は、無視しても問題ありません。ただし、Web の閲覧中に Web ページの更新が遅くなったり、散発的に更新されたり、間違った Web ページが表示されたりする場合は、DNS キャッシュをクリアするのが良いでしょう。





