網路與 IP

DNS 位址填哪個?常用公共 DNS 伺服器位址與選擇方法

DNS 位址沒有放之四海皆準的“最快”答案:國內伺服器先用機房提供的 DNS,其次是 223.5.5.5、119.29.29.29 這類國內公共 DNS,海外伺服器再用 8.8.8.8、1.1.1.1。首選和備選來自兩家不同的服務,填之前在自己的伺服器上用 dig 實測一遍。

作者 頂聯產品團隊發布於 6 分鐘閱讀

DNS 位址填哪個,先記住優先順序:機房或服務商提供的 DNS,其次是國內公共 DNS,最後才是境外公共 DNS。國內伺服器常用的公共 DNS 位址是 223.5.5.5(阿里)、119.29.29.29(騰訊 DNSPod)、114.114.114.114(114 DNS)和 180.76.76.76(百度);香港和海外伺服器常用 8.8.8.8(Google)和 1.1.1.1(Cloudflare)。至於“DNS 位址哪個最快”,答案因地而異:同一個公共 DNS,從電信機房和從移動機房測,從華北和從華南測,延遲都不一樣。所以本文先給完整的位址表,再給一個在自己伺服器上實測的指令碼,然後講國內伺服器為什麼不該預設用境外 DNS,以及首選、備選怎麼搭配。

常用公共 DNS 伺服器位址一覽

服務 IPv4 位址 IPv6 位址 適合
阿里公共 DNS 223.5.5.5、223.6.6.6 2400:3200::1、2400:3200:baba::1 國內伺服器
騰訊 DNSPod 公共 DNS 119.29.29.29 2402:4e00:: 國內伺服器
114 DNS 114.114.114.114、114.114.115.115 — 國內伺服器
百度公共 DNS 180.76.76.76 2400:da00::6666 國內伺服器
下一代網際網路國家工程中心 — 240c::6666、240c::6644 國內純 IPv6 主機
Google Public DNS 8.8.8.8、8.8.4.4 2001:4860:4860::8888、2001:4860:4860::8844 海外伺服器
Cloudflare 1.1.1.1、1.0.0.1 2606:4700:4700::1111、2606:4700:4700::1001 海外伺服器
Quad9 9.9.9.9、149.112.112.112 2620:fe::fe、2620:fe::9 海外;預設攔截惡意域名

表中“—”表示本文沒有列出常用位址。所有位址以各服務官方公佈的為準,個別服務會調整或新增位址。

幾個容易忽略的細節:

  • 帶過濾功能的位址不適合伺服器。114 DNS 另有 114.114.114.119、114.114.115.119 等攔截惡意網站的位址,Quad9 的 9.9.9.9 預設也會攔截已知的惡意域名,它不做過濾的位址是 9.9.9.10 和 149.112.112.10。辦公電腦用過濾位址有好處;伺服器用了,一旦某個介面域名被誤判,排查起來會繞很大的彎,伺服器上應選擇不做過濾的位址。
  • IPv6 位址不是必填項。IPv4 位址的 DNS 照樣能查出 AAAA 記錄,只有沒有 IPv4 的純 IPv6 主機才必須填 IPv6 位址的 DNS。
  • 同一個位址背後是很多台伺服器。公共 DNS 普遍使用任播(Anycast),多個節點宣告同一個 IP,你的查詢會被路由到“網路上離得近”的那個節點,所以不同機房測出的延遲不同。

需要加密查詢時,可以使用這些服務的 DoT(DNS over TLS,TCP 853)或 DoH(DNS over HTTPS,TCP 443)入口:

服務 DoT 主機名 DoH 位址
阿里公共 DNS dns.alidns.com https://dns.alidns.com/dns-query
騰訊 DNSPod 公共 DNS dot.pub https://doh.pub/dns-query
Google Public DNS dns.google https://dns.google/dns-query
Cloudflare one.one.one.one https://cloudflare-dns.com/dns-query
Quad9 dns.quad9.net https://dns.quad9.net/dns-query

DNS 位址哪個最快:用 dig 在自己的伺服器上測

別人的測速排行對你的伺服器參考意義不大,因為決定延遲的是你這台機器到各個任播節點的路徑。測法很簡單:對幾個 DNS 各發若干次查詢,記錄 dig 輸出裡的 Query time,同時統計超時次數。下面的指令碼需要 dig 命令,RHEL、Rocky、AlmaLinux 安裝 bind-utils,Debian、Ubuntu 安裝 dnsutils:

#!/bin/bash
# dns-bench.sh:對比多個 DNS 的查詢延遲和超時次數
servers="223.5.5.5 119.29.29.29 114.114.114.114 180.76.76.76 8.8.8.8 1.1.1.1"
# 換成這台伺服器實際要存取的域名:軟體源、對接的介面、物件儲存等
domains="www.example.com api.example.com mirrors.example.org"
rounds=3

for s in $servers; do
  sum=0; ok=0; fail=0
  for r in $(seq $rounds); do
    for d in $domains; do
      t=$(dig @"$s" "$d" A +tries=1 +time=2 2>/dev/null | awk '/Query time:/{print $4}')
      if [ -n "$t" ]; then sum=$((sum + t)); ok=$((ok + 1)); else fail=$((fail + 1)); fi
    done
  done
  if [ "$ok" -gt 0 ]; then avg=$((sum / ok)); else avg="-"; fi
  printf "%-16s 平均 %4s ms  成功 %2d  超時 %2d\n" "$s" "$avg" "$ok" "$fail"
done

+tries=1 +time=2 讓每次查詢只發一次、最多等 2 秒,超時就記為失敗,不會被 dig 的自動重試掩蓋。怎麼讀結果:

  1. 先看超時。有超時的 DNS 不適合做首選,哪怕它的平均值很低。對伺服器來說,一次超時意味著某個請求要多等幾秒,比平均慢幾毫秒的影響大得多。
  2. 連跑兩遍,以第二遍為準。第一遍裡有些域名不在 DNS 的快取中,它要先去問權威伺服器,會拉高平均值;第二遍大多命中快取,平均延遲接近你到這個節點的網路往返時間。把它和 ping -c 5 223.5.5.5 的結果對照,兩者接近說明路徑正常。
  3. 換個時間再測一次。晚高峰時段的跨網、跨境鏈路表現可能和白天差別很大,選首選 DNS 時兩個時段都要看。
  4. 用業務實際存取的域名。指令碼里的域名替換成軟體源、支付或簡訊介面、物件儲存這些伺服器真正要解析的名字,測出來的才是業務會感受到的延遲。

Windows 伺服器沒有 dig 時,可以用 PowerShell 粗略對比,-DnsOnly 跳過 hosts 檔案,-QuickTimeout 縮短超時等待:

foreach ($s in "223.5.5.5","119.29.29.29","114.114.114.114","8.8.8.8") {
  $ms = (Measure-Command {
    Resolve-DnsName www.example.com -Server $s -DnsOnly -QuickTimeout -ErrorAction SilentlyContinue
  }).TotalMilliseconds
  "{0,-16} {1,6:N0} ms" -f $s, $ms
}

Measure-Command 測的是整條命令的耗時,包含 PowerShell 自身的幾毫秒開銷,只適合幾個 DNS 之間橫向比較,不要和 dig 的數字直接對比。

國內伺服器為什麼不建議預設用境外 DNS

把 8.8.8.8、1.1.1.1 填進國內伺服器,能用,但會帶來三類問題。

一是每次快取未命中都要出境兩趟。 假設伺服器在上海,要解析一個權威伺服器也在國內的域名:查詢先發到境外公共 DNS 的節點,節點再回頭去問國內的權威伺服器,拿到結果後再送回上海。境外公共 DNS 的服務節點通常不在中國內地,這一來一回都要走跨境鏈路,延遲比國內公共 DNS 高出一截,晚高峰時還可能丟包超時。

二是 CDN 和智慧解析會把你排程到不合適的節點。 大部分網站、軟體源、介面域名都接了 CDN,權威 DNS 按照“誰來問”決定返回哪個節點:它看到的是遞迴 DNS 的出口位址,或者遞迴 DNS 攜帶的客戶端網段資訊(EDNS Client Subnet)。境外公共 DNS 的出口在境外,部分服務出於隱私考慮也不傳遞客戶端網段,權威 DNS 就可能把你當成境外訪客,返回香港、新加坡甚至更遠的節點,或者返回“預設線路”的位址,讓電信機房的伺服器去存取聯通的節點。結果是解析本身不慢,下載和介面呼叫卻慢了。

可以這樣驗證:

# 同一個域名,分別問國內和境外的公共 DNS,看返回的位址是否不同
dig +short mirrors.example.org @223.5.5.5
dig +short mirrors.example.org @8.8.8.8

# 把上面返回的位址分別 ping 一下,比較往返時間(203.0.113.10 換成實際返回的位址)
ping -c 4 203.0.113.10

# 檢視 Google Public DNS 實際用哪個出口位址去問權威伺服器
dig +short TXT o-o.myaddr.l.google.com @8.8.8.8

最後一條返回的就是權威伺服器眼中“提問者”的位址;如果還多出一條 edns0-client-subnet,表示這次查詢帶上了你所在的網段。Cloudflare 的節點可以用 dig +short CH TXT id.server @1.1.1.1 檢視,返回的機場程式碼代表應答節點所在城市。

三是出問題時的影響面更大。 resolv.conf 預設每個 DNS 等 5 秒,跨境鏈路一抖動,伺服器上所有需要解析域名的操作都會一起變慢:yum、apt 更新卡住,呼叫外部介面超時,郵件投遞排隊。國內公共 DNS 和機房 DNS 的路徑短,受跨境鏈路波動的影響小。

境外公共 DNS 適合的場景也很明確:香港、日本、美國等海外機房的伺服器,優先用當地機房 DNS 或 8.8.8.8、1.1.1.1;國內伺服器上,它們最多作為排在最後的兜底位址。

首選和備選 DNS 怎麼搭配

搭配的核心是分散故障:兩個位址不要來自同一家服務。223.5.5.5 和 223.6.6.6 雖然是兩個 IP,背後是同一套系統,這家服務整體出問題時兩個會一起失效;223.5.5.5 配 119.29.29.29 則是兩套獨立的系統。按場景可以這樣填:

場景 首選 備選 第三個(可選) 說明
國內機房,機房提供 DNS 機房 DNS 223.5.5.5 119.29.29.29 機房 DNS 離伺服器近,查詢路徑短
國內機房,沒有機房 DNS 223.5.5.5 119.29.29.29 180.76.76.76 三家各不相同,任何一家故障都不受影響
國內雙棧伺服器 223.5.5.5 119.29.29.29 2400:3200::1 IPv4 的 DNS 已能查出 AAAA 記錄,IPv6 位址放在最後
國內純 IPv6 伺服器 2400:3200::1 2402:4e00:: 240c::6666 只能填 IPv6 位址的 DNS
香港、海外伺服器 當地機房 DNS 或 8.8.8.8 1.1.1.1 9.9.9.10 按伺服器所在地選擇,而不是按你自己所在地;第三個用 Quad9 不過濾的位址
需要解析內網名稱 內網 DNS 甲 內網 DNS 乙 — 外網域名由內網 DNS 轉發到公共 DNS

填寫時注意數量和順序:

  • Linux 只認前 3 個。glibc 的解析器最多讀取 resolv.conf 裡的 3 條 nameserver,多寫的會被忽略。
  • 順序就是優先順序。系統總是先問第一個,它沒有應答才問下一個。把測速結果好、從不超時的放在第一位,而不是按 IP 好記來排。
  • 雙棧主機別把 IPv6 位址放在第一位。本機 IPv6 出口一旦出問題,每次解析都要先等一次超時。

改完之後,用 dig www.example.com 看輸出底部的 SERVER: 一行,確認實際應答的是你填的首選位址;Windows 上執行 nslookup www.example.com,看開頭顯示的伺服器位址。

公共 DNS 不適合的幾種情況

公共 DNS 免費、好記,但在下面幾種情況下,應該讓伺服器使用機房 DNS 或自建的遞迴解析:

  • 查詢量很大的業務。爬蟲、郵件群發、需要頻繁回呼外部介面的系統,每秒可能產生大量查詢,而公共 DNS 一般對單個來源位址的查詢頻率有限制,超過後會被限速或拒絕,具體限額以各服務的說明為準。這類伺服器至少要在本機加一層快取(systemd-resolved、dnsmasq、nscd 都可以),使用 systemd-resolved 時,resolvectl statistics 能看到快取命中情況。
  • 郵件伺服器查反垃圾黑名單。Spamhaus 等黑名單不回答經由大型公共 DNS 轉來的查詢,只返回 127.255.255.254 這類表示查詢被拒的程式碼,郵件閘道器據此做的判斷就會失真。郵件伺服器應該在本機或同機房執行自己的遞迴解析器。
  • 需要解析機房內部名稱。PDU、交換器管理口、內部監控這類只在內網 DNS 裡登記的名字,公共 DNS 查不到。
  • 對查詢內容有合規或審計要求。查詢記錄會經過第三方,是否允許由你所在單位的安全規定決定。

在機房裡怎麼落地

同一個位址段的伺服器,DNS 應該填得一樣。哪台填了機房 DNS、哪台被人隨手填了 8.8.8.8,平時看不出區別,等到 CDN 排程異常或跨境鏈路抖動時,才會出現“同一批機器有的快、有的慢”。Toplink DCIM 的 IP 位址管理 把 DNS 作為位址段的屬性登記,每個段可以填兩個 DNS 位址。按上面的方法測速、選定首選和備選之後,把結果寫進對應的位址段:裝機、交付和客服回答“DNS 位址填哪個”都以它為準;以後要更換首選 DNS,先改這條記錄,再按記錄逐台核對伺服器的實際配置。

常見問題

114.114.114.114 和 223.5.5.5 哪個快?

沒有固定答案。兩者都是國內常用的公共 DNS,快慢取決於你的伺服器所在地區、運營商到它們節點的路徑。用正文的 dig 指令碼各測幾輪,選平均延遲低、沒有超時的作首選,另一個作備選。

ping 公共 DNS 很快,解析卻很慢,是怎麼回事?

ping 只反映網路往返時間。解析慢通常有兩種原因:這個域名不在公共 DNS 的快取裡,它要先去問權威伺服器;或者本機配置裡排在前面的 DNS 已經不可達,每次都要先等它超時,再輪到能用的那個。

伺服器上能用 DoT 或 DoH 加密 DNS 嗎?

可以。Linux 的 systemd-resolved 支援 DoT:在 resolved.conf 裡寫 DNS=223.5.5.5#dns.alidns.com 並設定 DNSOverTLS=yes。Windows 11 和 Windows Server 2022 起的系統內建 DoH 客戶端。加密後查詢走 TCP 853 或 443,防火牆要相應放行。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88