您好 Ping Wang,感謝您在 Microsoft Q&A 社群發帖。
您觀察到的 15 秒停滯,正是因為 Windows Server DNS 的預設參數設定較為保守:
- 預設 Recursion Timeout (遞歸超時): Windows DNS 預設的
RecursionTimeout正好就是 15 秒!當 DNS 伺服器發起遞歸查詢或透過轉發器查詢無回應時,底層會一直等待直至 15 秒計時器結束。 - 轉發器重試機制 (Forwarder Retries): 當主要的轉發器沒有回應時,DNS 服務會依據
ForwardingTimeout(預設為 3~5 秒)重複嘗試多次,多個轉發器與重試次數相加,極易達到 Client 端(如 Chrome/Edge 瀏覽器預設 5~10 秒超時)的等待上限,導致網頁直接顯示超時錯誤。 - GUI 介面設定 (DNS 管理器)
- 開啟 DNS 管理器 (
dnsmgmt.msc)。 - 在左側對著您的 DNS 伺服器 名稱按右鍵,選擇 內容 (Properties)。
- 切換至 轉發器 (Forwarders) 頁籤:
- 將 轉發查詢超時秒數 (Number of seconds before forward queries time out) 由預設的 3 或 5 秒調整為 2 秒。
- (可選) 若您的環境不需要透過根功能功能表,可勾選 當沒有可用的轉發器時,不要使用根提示 (Do not use root hints if no forwarders are available),避免轉發器失敗時又花費時間去查詢 Root DNS。
- 註冊表 (Registry) 隱藏微調參數 (關鍵 15 秒參數)
安全性警告: 修改機碼前,請先備份 DNS 服務相關機碼。修改後需重啟 DNS Server 服務。
請開啟 註冊表編輯器 (regedit) 並導航至以下路徑:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters
在右側新增或修改以下 DWORD (32-位元) 值:
-
ForwardingTimeout(DWORD)- 作用: 單次向轉發器發出查詢的超時時間。
- 建議值:
2(十進位,單位:秒)。
-
RecursionTimeout(DWORD)- 作用: 控制 DNS 伺服器等待遞歸查詢回應的最長時間(這就是導致 15 秒停滯的主因)。
- 建議值:
3至5(十進位,預設為 15 秒)。
-
RecursionRetry(DWORD)- 作用: 遞歸查詢重試的時間間隔。
- 建議值:
1至2(十進位,預設為 3 秒)。
-
MaxNegativeCacheTtl(DWORD)- 作用: 否定快取 (Negative Cache / NXDOMAIN / 超時失敗) 的快取時間。若設定太長,轉發器短暫故障會導致 Client 在接下來幾分鐘內都拿到失敗紀錄。
- 建議值:
5至15(十進位,單位:秒,預設可高達 300~900 秒)。
- PowerShell 自動化設定與 DNS 服務重啟
您也可以直接開啟 PowerShell (系統管理員) 快速執行以下指令完成設定:
# 1. 將轉發器超時時間設為 2 秒
Set-DnsServerForwarder -Timeout 2
# 2. 將遞歸超時時間設為 3 秒,重試間隔設為 1 秒
Set-DnsServerSetting -RecursionTimeout 3 -RecursionRetry 1
# 3. 調整否定快取 TTL 為 10 秒
Set-DnsServerSetting -MaxNegativeCacheTtl 00:00:10
# 4. 重啟 DNS Server 服務使設定生效
Restart-Service DNS
正式生產環境最佳實踐建議 (Best Practices)
- 轉發器超時 (Forwarder Timeout): 正式環境建議設為 2 秒。網際網路 DNS 伺服器若正常,回應時間通常在 20~100ms 內,2 秒足以涵蓋正常波動。
- 遞歸超時 (Recursion Timeout): 建議設為 3 ~ 5 秒。
- 備用轉發器配置: 建議配置 2 至 3 個高可用性且不同營運商/來源的上游 DNS(例如公共 DNS
1.1.1.1、8.8.8.8或 ISP 的 DNS),並確保順序優先級正確。
診斷資訊請求
若調整上述參數後仍覺得切換過程有延遲,請在 PowerShell (系統管理員) 執行以下指令並提供輸出結果,以便為您進一步分析當前 DNS 設定:
Get-DnsServerForwarder
Get-DnsServerSetting | Select-Object RecursionTimeout, RecursionRetry, MaxNegativeCacheTtl, ForwardingTimeout
希望上述微調參數與 PowerShell 指令能協助您成功將切換時間縮短至 2~3 秒內,解決客戶端網頁超時的問題!若處理過程中有任何疑問,歡迎隨時在本討論串留言回覆,我會持續為您跟進。
如果這個解答對您有所幫助,請考慮將其標記為 「接受解答 (Accept Answer)」,這將有助於社群中其他遇到 Windows Server DNS 轉發超時問題的工程師快速找到解決方案!
相關 Microsoft Learn 官方說明文件: