DNS是Domain Name System協議的簡稱,在linux系統服務器上用于檢索與名稱相關的IP地址。
例如,當你在執行ping請求時,很可能是使用DNS協議來檢索服務器IP。
在大多數情況下,您執行的DNS請求都存儲在操作系統的本地緩存中。
然而,在某些情況下,您可能想要刷新服務器的DNS緩存。
這可能是因為您更改了網絡上服務器的IP,并且您希望立即反映更改。
在本教程中,您將學習如何在Linux服務器上輕松地刷新DNS緩存,無論您是使用systemd還是dnsmasq。
先決條件
為了能夠刷新你的DNS緩存,你必須知道Linux系統上的DNS解析是如何工作的。
根據您的發行版,您可能會面臨不同的Linux服務,作為DNS解析器。
在您開始之前,了解DNS解析將如何在您的操作系統上實際運行是相當重要的。
正如您所看到的,從本地應用程序到實際的Internet DNS服務器,存在許多不同的緩存。
在本教程中,我們將專注于黃色框,這意味著在每個Linux系統上實現的本地存根解析器。
查找本地DNS解析器
在大多數Linux系統上,DNS解析器是“ systemd-resolved ”或dnsmasq。為了知道您是否正在處理一個或另一個,您可以執行以下命令
$ sudo lsof -i :53 -S
注意:為什么我們要運行此命令?當DNS在端口53上運行時,我們正在尋找與在端口53上運行的服務相關的命令,該服務是您的本地DNS解析程序或“存根”。
如您所見,在最近的Ubuntu 20.04發行版中,在端口53上偵聽的服務是systemd-resolved的。但是,如果要在Ubuntu 14.04上執行此命令,則會得到不同的輸出。
在這種情況下,dnsmasq和命令中使用的本地DNS明顯不同。
1、使用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緩存是否確實被刷新,您可以使用“ –statistics ”選項,該選項將突出顯示“緩存”部分下的“當前緩存大小”。
$ sudo systemd-resolve --statistics
您在Linux上成功刷新了DNS緩存!
2、使用信號刷新DNS緩存
刷新DNS緩存的另一種方法可以通過向“系統解析的”服務發送“USR2”信號來指示其刷新DNS緩存,從而實現。
$ sudo killall -USR2 systemd-resolved
為了檢查DNS緩存是否確實被刷新,您可以向systemd解析的服務發送“ USR1 ”信號。這樣,它將把當前狀態轉儲到systemd日志中。
$ sudo killall -USR1 systemd-resolved
$ sudo journalctl -r -u systemd-resolved
您的DNS緩存已使用信號正確刷新了!
3、使用dnsmasq刷新DNS
使用dnsmasq時,刷新DNS解析器的最簡單方法是使用“ killall”命令向“ dnsmasq”進程發送“ SIGHUP”信號。
$ sudo killall -HUP dnsmasq
與systemd-resolved類似,您可以向進程發送“ USR1 ”,以使其將其統計信息打印到“ syslog”日志文件中。使用簡單的“ tail”命令,我們能夠驗證DNS緩存是否確實被刷新了。
現在,如果您要運行dnsmasq作為服務怎么辦?
4、Dnsmasq運行服務
在某些情況下,您可以在服務器上將“ dnsmasq”作為服務運行。為了檢查是否是這種情況,如果您在SysVinit系統上,則可以運行“ systemctl”命令或“ service”命令。
$ sudo systemctl is-active dnsmasq
$# On SysVinit systems
$ sudo service dnsmasq status
如果您注意到dnsmasq作為服務運行,則可以使用常用的“ systemctl ”或“ service ”命令將其重新啟動。
$ 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本地解析器的緩存。
參考鏈接:
https://blog.csdn.net/weixin_30932183/article/details/116703030