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