想要上網體驗有保障,如何設置一個更安全的 DNS?

我們很難記住所有人的電話號碼 , 大部分時候我們都需要通訊錄幫助我們把一個人的姓名和號碼聯系起來 。而 DNS 服務器干的事情和通訊錄差不多 , 幫助我們把網址轉換成 IP , 讓程序知道他們需要鏈接的服務器具體在哪里(或是服務器不存在) 。

想要上網體驗有保障,如何設置一個更安全的 DNS?

文章插圖
最為簡單的 DNS 請求過程
隨著互聯網技術的日新月異 , 大家上網的時候遇到下面的情況的概率卻一點都沒變少:
從官網下載內容的時候 , 下載的地址是一串 IP 而不是官網地址 , 而且下載下來的內容有的時候不是最新的 。打開一個網站以后 , 網站內有部分廣告質量明顯不如其他的廣告 , 或者明顯遮擋了網頁中的內容輸錯網站打開一個全是廣告的頁面網站內的廣告畫風和整個網站完全不搭經常性地遇到有些頁面打不開(無法解析這個網址) , 但是過了一會兒又好了 。
這些問題很多時候都是和你家的 DNS 設置有關系 。
為什么會發生這些問題
只要你接入了互聯網 , 互聯網服務提供商(也被稱為 ISP , 以下簡稱: 運營商)都會下發兩個 DNS 給你 , 這個就是運營商 DNS 。
和電話對應起來 , DNS 服務器則將網址和 IP 對應起來 。隨著互聯網技術的日新月異 , DNS 服務器也經過了一段漫長的發展 , 衍生出了更多更棒的功能 , 讓用戶能自由地在網上沖浪 。
每個運營商在幾乎在每個城市都會部署自己的獨立的 DNS 服務器 , 這也是為什么同一個運營商在不同城市分發下來的 DNS 服務器的地址也都不一樣 。加上運營商是最了解 內容分發網絡(也就是我們經常說的 CDN , CDN 主要起到兩大作用 , 第一個是能讓用戶用最快的速度訪問到用戶想要訪問的內容 , 第二點是能減少主服務器的所需要的帶寬和維護成本)的位置和自家網絡的情況 , 所以運營商 DNS 返回的結果應該是:最準確的、最合適的 , 響應時間短的以及 CDN 解析結果最準確的 , 簡單來說就是:你能快速訪問到位于你附近的有你想要訪問到內容的服務器 。
想要上網體驗有保障,如何設置一個更安全的 DNS?

文章插圖
中國電信的路由表-圖源 http://bgp.he.net
在每個城市都要維護一個 DNS 服務器開銷自然不會小到那里去 , 所以運營商經常在 DNS 結果上進行改動 , 發生文章開頭所說的問題 。運營商那么做主要是為了減少成本 。當然還有種情況是附近的 DNS 服務器沒有及時擴容或者維護不善 , 導致了上述的情況 。
利用公共 DNS 服務來解決這個問題
解決上述這個問題的最快的辦法就是使用公共 DNS 服務 。
公共 DNS 服務器一般是由大公司搭建的 , 或者非盈利組織搭建的 。公共 DNS 的本質上就是把你的查詢請求轉發給上游更權威的 DNS , 所以一般這些公司或者組織提供的公共 DNS 服務器提供都是更安全、更準確的結果 。
當然由于資金限制 , 公共 DNS 服務器不會每個城市都有一個 。自然就會遇到使用公共 DNS 服務解析到的 IP 不是最快的情況 。下圖展示了相同網址使用運營商 DNS 解析到的結果和使用阿里云公共 DNS 解析到的兩種延遲完全不同的結果( time-ios.apple.com 是一個通過 CDN 優化了網站):
想要上網體驗有保障,如何設置一個更安全的 DNS?

文章插圖
DNS 返回結果對比
小知識:怎么快速知道我到某個服務器之間的延遲?
使用 ping 指令
ping 是一種計算機網絡工具 , 用來測試數據包能否透過IP協議到達特定主機 。按時間和成功響應的次數估算丟失數據包率(丟包率)和數據包往返時間(網絡時延 , Round-trip delay time)
ping 會直接附帶在任何的操作系統的內置終端(或者命令提示符)中 , 使用時 , 用戶只需要使用 ping +網址/IP 地址(如 ping 17.253.84.251)并敲擊回車即可得到結果 。
因此 , 我們在挑選公共 DNS 的時候 , 要注意以下方面:
在線率:也被叫做 SLA 或者可靠性 , DNS 服務器作為將網址和 IP 聯系起來的唯一手段 , 如果在線率不夠高 , 那么時不時就會遇到的無法解析網址的情況 , 大大降低網上沖浪的樂趣和連貫性 。響應速度:在訪問一個新的網站時 , DNS 對這個網站的響應速度會直接影響到當前網站的直觀加載速度 。準確性: 即使不考慮 DNS 污染和投毒 , DNS 對網站訪問的結果是否準確是非常重要的 。CDN 友好性:也被叫做 ECS 或是 EDNS , ECS 有助于幫助你獲取最準確的 CDN 解析結果 , 這個也是我在挑選公共 DNS 最為看重的一點 。DNS 出口位置: 在沒有 ECS 的情況下 , CDN 的權威 DNS 會根據公共 DNS 使用的請求 IP(也就是 DNS 出口)來判定你的運營商、你所在的位置 , 從而返回距離你最近的節點 IP 。在有 ECS 的情況下 , 返回結果的所需要的時間會更低 , CDN 判斷會更準確 。

推薦閱讀