Domain-Name-System

如何立即進行 DNS 轉發區域文件更新

  • August 18, 2019

我有幾台伺服器、一個客戶端和一個執行 bind9 的 DNS 伺服器。所有人都在虛擬機中執行 Ubuntu 18.04。

我想更改 DNS 轉發區域文件以更改其中一台伺服器的 IP 地址。更改 DNS 伺服器後,我執行:

sudo systemctl restart bind9

然後在客戶端中,我從瀏覽器中清除歷史記錄和文件。然後我還使用以下命令刷新 DNS:

sudo /etc/init.d/networking restart

但是當我訪問剛剛在DNS中更改IP的伺服器時,客戶端仍然在瀏覽器中看到舊IP內容。即 DNS 似乎解析為舊 IP(這是一個活動伺服器)。

但是當我重新啟動客戶端和 DNS 伺服器時,解析度會更新,伺服器會解析為新 IP,客戶端會得到我假設的頁面。

在我看來,有些東西沒有立即刷新 DNS 區域文件更改。請注意,我在保存區域文件之前更新了序列號。

還有一些其他值,我不知道它們是否會導致更改生效的延遲?

這些是前向區域文件開頭的值:

;
; BIND data file for local loopback interface
;
$TTL    604800
@   IN  SOA ns222.com. boss.com. (
                 9     ; Serial
            604800     ; Refresh
             86400     ; Retry
           2419200     ; Expire
            604800 )   ; Negative Cache TTL
;

您設置了一個預設時間以居住在您所在區域的開頭

$TTL    604800

那是7天。

雖然當您在主區域文件中進行更改並重新載入區域時,您的名稱伺服器將立即開始返回更新的記錄;除非您在特定記錄上設置不同的生存時間(遠在您打算更改它們之前),否則任何合理的解析器將保留記錄的記憶體時間以及更新生效可能需要多長時間。


與其使用 Web 瀏覽器測試 DNS 問題,不如使用更合適的工具dig


我目前沒有可用的 Ubuntu 18,但據我所知,預設情況下它也使用 systemd 解析器,如果清除 DNS 記憶體需要(僅)適當的 systemd 子命令而不是重新啟動,我不會感到驚訝網路

sudo systemd-resolve --flush-cache

引用自:https://serverfault.com/questions/979733