如何提升自建DNS服務下的網路體驗
Categories:
網路品質和網路體驗
什麼都不做, 即可以獲得最好的網路體驗
需要明確, 這裡網路品質和網路體驗是兩個不同的概念. 通訊是一個過程, 涉及多個設備, 我們可以稱單個設備的上下行為表現為網路品質, 而整個端到端的通訊表現, 我們可以稱為網路體驗.
如何衡量網路品質
衡量網路品質通常涉及多個指標和方法. 以下是一些常見的衡量網路品質的方法和指標:
- 頻寬(Bandwidth): 頻寬是指網路傳輸資料的能力, 通常以每秒傳輸的資料量(bit/秒)來衡量. 更高的頻寬通常表示更好的網路品質.
- 延遲(Latency): 延遲是指資料從發送端到接收端所需的時間. 低延遲表示資料傳輸速度快, 網路回應更快.
- 封包遺失率(Packet Loss Rate): 封包遺失率是指在資料傳輸過程中遺失的資料封包的比例. 較低的封包遺失率通常表示網路品質較好.
- 抖動(Jitter): 抖動是指資料封包在傳輸過程中的變化或波動. 較小的抖動表示網路穩定性較高.
- 吞吐量(Throughput): 吞吐量是指網路傳輸的實際資料量, 通常以單位時間內的資料傳輸量來衡量. 更高的吞吐量表示網路品質更好.
- 網路拓撲(Network Topology): 網路拓撲描述了網路中節點之間的連接方式和結構. 合理的網路拓撲設計可以提高網路效能和品質.
- 服務品質(Quality of Service, QoS): QoS 是一組技術和機制, 用於確保在網路上的資料傳輸中實現可接受的服務品質. QoS 可以透過各種方式實現, 包括流量控制, 優先級佇列等.
- 網路協定分析(Protocol Analysis): 透過分析網路協定和資料封包, 可以了解網路中的效能指標和問題, 例如使用 Wireshark 等網路分析工具.
綜合利用這些指標和方法, 可以全面地評估網路品質, 確定網路效能的優勢和改進的空間. 但這些是電信業者關注的指標, 對於一般使用者, 只需要購買價格合適的路由器即可, 現代路由器都有自動調整網路品質的功能.
如何衡量網路體驗
首先是可存取性, 能存取是最重要的基礎. 因此, 域名解析服務需要滿足基礎的能力:
- 全面, 上級 DNS 服務需要權威, 且能夠解析更多的域名
- 正確, 解析結果需要正確, 不能出現解析錯誤. 部分 DNS 服務商會對一些域名進行劫持或污染, 解析到廣告頁面.
- 及時, ip 地址變更後, 需要及時更新解析結果, 而不是返回舊的 ip 地址
其次是 DNS 解析結果的 IP 所能提供服務的網路品質.
網際網路服務所能提供的網路品質, 通常強依賴地域, 伺服器和客戶端在地域上越接近, 則服務品質越好.
許多付費 DNS 解析服務商都支援按地域解析不同 IP, 例如這是阿里雲能提供的一部分服務:
(1)營運商線路:支援按聯通、電信、移動、教育網、鵬博士、廣電網智慧解析, 細分到省份; (2)海外地區線路:支援, 細分到大洲、國家; (3)阿里雲線路:支援, 細分到各個地區; (4)自訂線路:支援自訂 IP 地址範圍智慧解析;

按區域解析不同 IP 的機制, 意味著不同地域的使用者訪問同一個域名時, 會得到不同的解析結果, 自然而然的, 優先解析到距離使用者更近的伺服器, 將會有更好的網路體驗.
而優化使用者網路體驗這件事, 一般都是服務提供商根據使用者的真實 IP 地址來做優化. 也就是對多數使用者來說, 什麼都不做, 即可以獲得最好的網路體驗.
自建 DNS 服務如何選擇上游 DNS 服務
中文網際網路上你搜尋到的所有資料都會推薦你選擇權威 DNS 服務商, 例如阿里雲, 騰訊雲, Cloudflare, 谷歌等. 這些 DNS 可以滿足網路服務的的可存取性, 因為它們全面/正確/及時, 但是, 它們未必會給你解析到最近的伺服器 IP.
網際網路上大量的資料推薦大企業的 DNS 服務有其歷史原因.
曾經我國的 ISP 運營商, 僅靠 DNS 劫持加上 HTTP 的中間人攻擊, 就能夠實現對使用者的流量劫持, 從而實現廣告推播. 現如今隨著 https 的普及, 這種劫持方式已較為少見, 但部分地區的社區寬頻仍然可能存在這種問題. 針對 DNS 劫持問題, 實際上改 DNS IP 無濟於事, 因為劫持可以針對 53 埠, 而絕大多數 DNS 請求都是未加密的.
此外, 一些特殊使用者希望訪問特殊網站, 而部分 DNS 服務商存在 IP 污染問題, 會將特殊網站的域名解析到錯誤的 IP 地址, 導致無法訪問. 而權威 DNS 服務商則較少出現這樣問題.
因此, 這裡存在三個問題需要考慮:
- IP 污染
- DNS 劫持
- 最佳服務體驗
權威 DNS 服務商可以解決問題 1 , 加密協定(DoT/DoH/QUIC)可以解決問題 2.
想要解決問題 3, 你需要使用回寬頻運營商的預設 DNS 服務., 正如本文開頭所說, 什麼都不做, 即可以獲得最好的網路體驗.
但如果你是一個有追求的人, 或者特殊使用者, 下文將介紹如何配置 AdguardHome 及 Clash 兩種工具的配置, 以同時解決這三個問題.
權威且智慧的 DNS 服務
AdguardHome 配置
AdguardHome, 以下簡稱ADG 是一個網路廣告攔截與隱私保護軟體, 也是一個 DNS 服務. 它支援自訂上游 DNS 服務, 以及自訂 DNS 規則.
ADG 預設的向上游請求 DNS 的方式是負載均衡, 使用者可以設定多個上游, ADG將根據歷史 DNS 查詢加權權重選擇其中 DNS 回應最快的上游. 簡單說, ADG 會以更高的機率選擇更快的 DNS 上游來解析域名, 以較低的機率選擇非最佳的 DNS 上游.
我們可以選擇第三個選項: 最快的IP地址.

該選項帶來的好處, ADG自行測試上游 DNS 的 IP 解析結果, 將其中延遲最低的 IP 返回給下游客戶端. 以下是bilibili的常規解析結果.

你可以看到 IP 非常多, 如果ADG不測試 IP 解析結果, 而將所有 IP 返回給客戶端, 那麼客戶端會做什麼?
有的客戶端會選擇第一個 IP, 有的客戶端會選擇最後一個 IP, 有的客戶端會隨機選擇一個 IP. 不管是哪種, 都未必是最佳的選擇.
開啟最快的IP地址選項後, 以下是bilibili的優選解析結果, 這一步將會帶來網路體驗的提升.

最快的IP地址為什麼不是預設選擇? 這個功能這麼實用, 為什麼不預設開啟?
因為它的代價是等待所有上游 DNS 的 IP 解析結果, 當你的上游同時有多個 DNS 服務商時, 向上游的查詢時間以其中最慢的為準. 例如, 你的上游有平均服務時長50ms的阿里和平均服務時長500ms谷歌, ADG的上游查詢時間將是500ms+.
因此使用者在設定此選項時, 需要權衡上游 DNS 的服務品質和數量, 不要貪多. 這裡我推薦設定兩個上游, 一個權威(https://dns.alidns.com/dns-query), 加上一個運營商 DNS.
運營商的 DNS IP 各地都不相同, 可以點擊這裡查看自己所在地區的運營商 DNS.
或者, 你可以在路由器的管理介面上查看運營商推薦的 DNS :

Clash 配置
特殊需求使用者看重 DNS 劫持和 IP 污染問題, 但又不想放棄最佳服務體驗, 可以使用Clash的dns模組.
其中nameserver-policy可以指定不同的域名使用不同的 DNS 服務商, 以下是一個範例設定:
dns:
default-nameserver:
- tls://223.5.5.5:853
- tls://1.12.12.12:853
nameserver:
- https://dns.alidns.com/dns-query
- https://one.one.one.one/dns-query
- https://dns.google/dns-query
nameserver-policy:
"geosite:cn,private,apple":
- 202.103.24.68 # 自己所在地的運營商 DNS
- https://dns.alidns.com/dns-query
"geosite:geolocation-!cn":
- https://one.one.one.one/dns-query
- https://dns.google/dns-query
它的含義是:
- default-nameserver: 用於解析設定
nameserver中的 DNS 服務的 IP - nameserver: 用於解析網路請求的域名
- nameserver-policy: 根據策略, 指定不同的域名使用不同的 DNS 服務
感謝閱讀
如果本文對您有所幫助, 還請點個讚. 也非常歡迎留言討論.