Indem Sie Ihren lokalen DNS-Cache leeren, können Sie HTTP-Fehler beheben und sich vor DNS-Spoofing schützen. Hier erfahren Sie, wie es unter Linux geht.
Wenn Sie eine Website mit einem Domainnamen besuchen, sendet Ihr System eine Anfrage an den DNS-Server, um die IP-Adresse der Domain zu erhalten. Dieses Domänen-IP-Adresspaar wird zur späteren Verwendung im DNS-Cache gespeichert, sodass Sie nicht jedes Mal eine Anfrage an den DNS-Server senden müssen, um eine Verbindung herzustellen.
Aber manchmal wird der lokale DNS-Cache beschädigt und verursacht HTTP-Fehler. Glücklicherweise ist das Leeren und Neuerstellen des DNS-Cache in Linux-Betriebssystemen sehr einfach. So wird es gemacht.
Es gibt mehrere Gründe, warum Sie den auf Ihrem System gespeicherten DNS-Cache neu erstellen möchten. Wenn Ihr DNS-Eintrag veraltet ist, möchten Sie ihn möglicherweise erneut vom DNS-Server abrufen. Wenn Sie außerdem befürchten, dass Ihr System kompromittiert wurde, möchten Sie möglicherweise sicherstellen, dass der DNS-Cache nicht manipuliert wurde, was auch als DNS-Spoofing bezeichnet wird.
Wenn Sie den DNS-Cache leeren, muss das System den DNS-Server erneut anpingen und neue Domänen-IP-Adressdatensätze von ihm abrufen und dabei alle veralteten oder beschädigten Daten entfernen.
Vor systemd hatten die meisten Linux-Distributionen keinen systemweiten DNS-Cache, es sei denn, er wurde manuell von einem Programm wie dnsmasq oder nscd eingerichtet. systemd wird mit systemd-solved geliefert, einem Dienst, der Domänennamen in IP-Adressen auflöst und DNS-Einträge zwischenspeichert.
In den folgenden Abschnitten erfahren Sie, wie Sie den Inhalt des durch systemd-Parsing, nscd und dnsmasq generierten DNS-Cache anzeigen, damit Sie die zwischengespeicherten Daten verstehen können, bevor Sie sich für die Aktualisierung der zwischengespeicherten Daten entscheiden.
Um vom System aufgelöste Cache-Einträge anzuzeigen, müssen Sie den Dienst vorübergehend stoppen und dann seine Protokolle in eine Datei exportieren.
Senden Sie zunächst das SIGUSR1-Signal, um den systemd-Analysedienst zu beenden:
linuxmi@linuxmi ~/www.linuxmi.com % sudo killall -USR1 systemd-resolved[sudo] linuxmi 的密码:
Verwenden Sie den Befehl „journalctl“ und den Standardausgabeoperator, um die Ausgabe in einer Textdatei zu speichern:
linuxmi@linuxmi ~/www.linuxmi.com % sudo journalctl -u systemd-resolved > ~/cache.txtlinuxmi@linuxmi ~/www.linuxmi.com
Sie können die Datei dann mithilfe eines Textes anzeigen Editor wie Vim Inhalt:
Suchen Sie in der Datei nach „CACHE:“, indem Sie Escape drücken, „/CACHE:“ eingeben und dann die Eingabetaste drücken. Alle unter „CACHE:“ aufgeführten DNS-Einträge sind im lokalen DNS-Cache enthalten. Wenn Sie Vim verwenden, drücken Sie die Taste n, um zum nächsten Satz von DNS-Einträgen zu springen.
Um den von nscd generierten lokalen Cache anzuzeigen, müssen Sie den String-Befehl verwenden, um den Inhalt der nscd-Hostdatenbank zu lesen.
Auf Debian- und Ubuntu-basierten Distributionen befindet sich diese Datei in /var/cache/nscd/hosts. Führen Sie den folgenden Befehl aus, um die Datei anzuzeigen:
linuxmi@linuxmi ~/www.linuxmi.com % sudo strings /var/cache/nscd/hosts | uniq
Um allgemeine Statistiken zum NSCD-DNS-Cache anzuzeigen, verwenden Sie das Flag -g:
linuxmi@linuxmi ~/www.linuxmi.com % sudo nscd -g
Die genauen Datensätze abrufen Nicht einfach weil dnsmasq den DNS-Cache im Speicher speichert. Sie können ein Kill-Signal an dnsmasq senden und dessen Ausgabe protokollieren, um die Anzahl der verarbeiteten DNS-Abfragen zu ermitteln.
Stellen Sie dazu zunächst sicher, dass dnsmasq aktiv ist und läuft, indem Sie den Befehl systemctl verwenden:
linuxmi@linuxmi ~/www.linuxmi.com % sudo systemctl status dnsmasq
Wenn der Status „Aktiv“ lautet, führen Sie den folgenden Befehl aus, um den Dienst zu beenden:
linuxmi@linuxmi ~/www.linuxmi.com % sudo pkill -USR1 dnsmasq
使用 journalctl 命令,提取 dnsmasq 日志并将它们保存到文本文件中:
linuxmi@linuxmi ~/www.linuxmi.com % sudo journalctl -u dnsmasq > ~/cache.txt
最后,使用文件查看实用程序(如 cat 或更少)查看文件的内容:
linuxmi@linuxmi ~/www.linuxmi.com % cat ~/cache.txt
刷新 DNS 缓存意味着从计算机中删除缓存的 DNS 记录。这将迫使它向DNS服务器发送请求,以获取新的DNS条目。
以下是在 Linux 上刷新 DNS 缓存的方法:
您可以使用 resolvectl 命令刷新 systemd 解析存储的 DNS 缓存:
linuxmi@linuxmi ~/www.linuxmi.com % sudo resolvectl flush-caches
如果您运行的是 Ubuntu 17.04 或 18.04,请使用 systemd 解析的命令刷新缓存:
sudo systemd-resolved --flush-caches
删除 nscd 的 DNS 缓存的最便捷方法是重新启动服务。您可以通过运行以下命令来执行此操作:
linuxmi@linuxmi ~/www.linuxmi.com % sudo /etc/init.d/nscd restart
如果这不起作用,首先,检查存储在PC上的本地缓存是否持久。您可以使用 -g 标志进行验证:
sudo nscd -g
如果是这种情况,请使用带有 nscd 命令的 –i 标志来清除记录(i 代表 invalidate):
linuxmi@linuxmi ~/www.linuxmi.com % sudo nscd -i hosts
刷新 dnsmasq 生成的 DNS 缓存很简单。由于缓存存储在内存中,因此重新启动服务会删除所有存储的条目。
要重新启动 dnsmasq,请运行以下 systemctl 命令:
sudo systemctl restart dnsmasq
或者,发出以下命令:
service dnsmasq restart
如果出现提示,请输入管理员密码。现在要重新启动 dnsmasq,所有缓存中存在的 DNS 条目将被清除。
建议刷新 DNS 缓存后,检查本地缓存条目以确认数据已经成功删除。您可以使用 Linux 命令之一的 dig 来进行网络故障排除,并查看输出中的“查询时间”值。假如超过 0 毫秒,则说明缓存已经成功清除(若为 0 毫秒,则表示域记录仍存在于缓存中)。
dig google.com
您经常使用的 Web 浏览器也会缓存 DNS 记录。输入 URL 时,系统会在本地浏览器缓存中搜索缓存条目。如果未找到,它将检查本地系统缓存中的记录。清除 Web 浏览器的 DNS 缓存非常重要,因为它优先于系统范围的缓存。
为了演示,让我们刷新谷歌浏览器中的DNS缓存。在其他浏览器上也有一些方法可以做到这一点,所以最好 Google 一下如何使用你使用的浏览器做到这一点。
首先,在URL栏中键入“chrome://net-internals/#dns”并按Enter键:
点击“清除主机缓存”按钮来清除谷歌浏览器中存储的DNS条目。
Linux 乍一看可能看起来很复杂,但如果你花一些时间来学习它是如何工作的,你很快就会意识到它很棒,甚至可能比 Windows 或 macOS 更好。
大多数在线服务器都运行 Linux,如果您想学习网络或想知道计算机通常如何工作,这也是 Linux 理想选择的原因之一。
Das obige ist der detaillierte Inhalt vonSo zeigen Sie den DNS-Cache unter Linux an und aktualisieren ihn. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!