DNS、ドメインネームシステムの略 プロトコルは、Linuxシステムで名前に関連付けられたIPアドレスを取得するために使用されます。
たとえば、ping要求を実行している場合、DNSプロトコルを使用している可能性が非常に高くなります。 サーバーIPを取得します。
ほとんどの場合、DNSリクエスト 実行するものは、オペレーティングシステムのローカルキャッシュに保存されます。
ただし、場合によっては、サーバーのDNSキャッシュをフラッシュする必要があります。 。
ネットワーク上のサーバーのIPを変更し、変更をすぐに反映させたいことが原因である可能性があります。
このチュートリアルでは、LinuxでDNSキャッシュを簡単にフラッシュする方法を学習します。 、systemdまたはdnsmasqのどちらを使用しているか。
前提条件
DNSキャッシュをフラッシュできるようにするには、LinuxシステムでDNS解決がどのように機能するかを知っている必要があります。 。
ディストリビューションによっては、DNSリゾルバーとして機能するさまざまなLinuxサービスに直面している可能性があります。 。
始める前に、オペレーティングシステムでDNS解決が実際にどのように行われるかを知ることが非常に重要です。
この記事を読んでいる場合は、ローカルDNSリゾルバーのキャッシュをフラッシュすることを検討しています。 。ただし、ご覧のとおり、ローカルアプリケーションから実際のインターネットDNSサーバーまでさまざまなキャッシュがあります。
このチュートリアルでは、すべてのLinuxシステムに実装されているローカルスタブリゾルバーを意味する黄色のボックスに焦点を当てます。
ローカルDNSリゾルバーの検索
ほとんどのLinuxシステムでは、DNSリゾルバーは「systemd-resolved」またはdnsmasqのいずれかです。どちらを扱っているかを知るために、次のコマンドを実行できます
$ sudo lsof -i :53 -S
注 :では、なぜこのコマンドを実行するのですか? DNSはポート53で実行されるため、ローカルDNSリゾルバーまたは「スタブ」であるポート53で実行されるサービスに関連付けられたコマンドを探しています。
ご覧のとおり、最近のUbuntu 20.04ディストリビューションでは、ポート53でリッスンしているサービスがsystemdで解決されています。ただし、Ubuntu 14.04でこのコマンドを実行すると、異なる出力が得られます。
この場合、dnsmasqとコマンドで使用されるローカルDNSは明らかに異なります。
この情報がわかれば、興味のある章に進むことができます。サーバーに別の出力がある場合は、この記事を更新するためにコメントを残してください。
systemd-resolvedを使用してDNSをフラッシュする
systemd-resolvedを使用している場合、LinuxでDNSをフラッシュする最も簡単な方法は、「systemd-resolve」コマンドに続けて「–flush-caches」を使用することです。
または、「resolvectl」コマンドの後に「flush-caches」オプションを使用することもできます。
$ sudo systemd-resolve --flush-caches
$ sudo resolvectl flush-caches
Linux DNSキャッシュが実際にフラッシュされたことを確認するには、「 –統計」を使用できます。 「キャッシュ」セクションの下の「現在のキャッシュサイズ」を強調表示する「」オプション。
$ sudo systemd-resolve --statistics
おめでとうございます。LinuxでDNSキャッシュを正常にフラッシュしました!
シグナルを使用してDNSキャッシュをフラッシュする
DNSキャッシュをフラッシュする別の方法は、DNSキャッシュをフラッシュするように指示する「systemd-resolved」サービスに「USR2」シグナルを送信することで実現できます。
$ sudo killall -USR2 systemd-resolved
DNSキャッシュが実際にフラッシュされたことを確認するために、「 USR1」を送信できます。 」はsystemdで解決されたサービスに通知します。このようにして、現在の状態をsystemdジャーナルにダンプします。
$ sudo killall -USR1 systemd-resolved
$ sudo journalctl -r -u systemd-resolved
すごい、DNSキャッシュはシグナルを使用して正しくフラッシュされました!
dnsmasqを使用してDNSをフラッシュする
dnsmasqを使用する場合、DNSリゾルバーをフラッシュする最も簡単な方法は、「killall」コマンドを使用して「SIGHUP」シグナルを「dnsmasq」プロセスに送信することです。
$ sudo killall -HUP dnsmasq
systemd-resolvedと同様に、「 USR1」を送信できます 」をプロセスに送信して、統計を「syslog」ログファイルに出力します。単純な「tail」コマンドを使用して、DNSキャッシュが実際にフラッシュされたことを確認できます。
dnsmasqをサービスとして実行するとしたらどうでしょうか?
サービスを実行しているDnsmasq
場合によっては、サーバー上で「dnsmasq」をサービスとして実行できます。これが当てはまるかどうかを確認するために、「systemctl」コマンドを実行するか、SysVinitシステムを使用している場合は「service」コマンドを実行できます。
$ sudo systemctl is-active dnsmasq
# On SysVinit systems
$ sudo service dnsmasq status
dnsmasqがサービスとして実行されていることに気付いた場合は、通常の「 systemctl」を使用して再起動できます。 」または「サービス 」コマンド。
$ sudo systemctl restart dnsmasq
# On SysVinit systems
$ sudo service dnsmasq restart
これらのコマンドを実行した後は、サービスが正しく再起動されたことを常に確認してください。
$ sudo systemctl status dnsmasq
# On SysVinit systems
$ sudo service dnsmasq status
結論
このチュートリアルでは、LinuxでDNSキャッシュをすばやく簡単にフラッシュする方法を学びました。
この記事を使用すると、systemdおよびdnsmasqローカルリゾルバーのキャッシュを簡単にクリアできます。ただし、 bindという名前の別の一般的なDNSがあることを知っておく必要があります 、この記事では意図的に省略されています。
近い将来、BINDを使用したローカルDNSキャッシュサーバーの設定に関する別の記事が掲載される予定です。
DNSクエリとその実行方法に関心がある場合は、「」という名前の「zwischenzugs」からのこの非常に役立つ記事を使用できます。 DNSクエリの構造 「 。この記事は、DNSクエリをデバッグする必要があり、それらがどのように実行されるのか疑問に思う場合に特に役立ちます。
Linuxシステム管理に興味がある場合も 、ウェブサイトにそれに関する完全なセクションがありますので、必ずチェックしてください。