為 iOS 14 和 macOS 11 配置 DNS Over HTTPS/TLS
在去年(2020 年)的 WWDC 中 Apple 終於宣布為 iOS 14 和 macOS 11 添加系統級的 DNS over HTTPS/TLS (DoH/DoT) 支援。儘管此前 macOS 已經有程式實現了對部分 DNS 流量進行加密,現在你可以通過系統接口進行全局 DNS 流量加密。
什麼是 DoH/DoT
這個問題需要從什麼是 DNS 開始說起。DNS 的前身其實是 HOST 文件,用來指示域名所對應的 IP 地址。不過由於互聯網迅速發展,HOST 文件的體積以及時效性成為了較大的問題。因此,Paul Mockapetris 博士發明了 DNS,作為專門用於映射域名和 IP 地址的分布式數據庫就此誕生。而 DNS 服務誕生時是沒有包含任何加密協議的,換句話說,你所請求的域名和 DNS 伺服器所返回的 IP 地址都將以明文的形式在網路上傳播。你所路由過的任何節點都可以知道你試圖訪問過哪些網站。這些節點包括但不限於你家中的路由器,你的網路服務商等。同時,DNS 的明文傳播不僅有隱私洩露的風險,還容易遭到中間人攻擊,攻擊者可以將請求的域名映射到錯誤的 IP 地址上,以進一步進行攻擊。
為了解決這個問題,2016 年發布的 RFC 7858 定義了 DNS over TLS 標準,旨在通過傳輸層安全協議(TLS)來加密 DNS 流量,而 2018 年,Google 和 Mozilla 基金會公佈了 DNS over HTTPS 方案,以 HTTPS 協議來進行 DNS 請求。無論哪一種都可以有效防止 DNS 監聽以及中間人攻擊。Mozilla 在 Firefox 62 正式版中加入了 DoH 功能,可以另 Firefox 內部產生的 DNS 請求均經過加密協議傳輸。而對 Firefox 外部產生的 DNS 請求,僅靠瀏覽器設置顯然是不夠的。因此 Google 在 Android Pie 中添加了系統級的 DoH/DoT 支援,可以通過設置中的「Private DNS」功能來指定(不同 Android UI 可能不同)。Microsoft 則在 2019 年 11 月宣布未來的 windows 將支援 DoH 機能,目前在 insider channel 已經可以使用。Apple 則是在 2020 年的 WWDC 中宣布 iOS 14 和 macOS 11 將支援 DoH 與 DoT,但並未提供開關或相關設置來啟用,需要通過安裝 profile 才可以啟用。
我在哪裡可以獲取 profile?
https://github.com/paulmillr/encrypted-dns
在這裡有現成的 profile 提供,包含了 AdGuard, Alekberg, Alibaba, Canadian Shield, Cloudflare, DNSPod, Google, Open DNS, Quad9, Tiar.app 等多家 DNS 提供商。
如何選擇 DoH/DoT
從保護隱私以及防止中間人攻擊的角度來說,他們沒有任何區別。但是:
- DoH 將 DNS 流量偽裝成一般 HTTPS 流量,更加難以鑒別。而 DoT 則會請求一個特殊的端口 853.
- DoT 採用傳輸層安全協議(TLS),比 HTTPS 低一個層級,因此理論上會比 DoH 更快,性能更好。但實際上二者差異極小。
故個人來說更加推薦 DoH。
注意
DoH 與 DoT 僅能對 DNS 流量進行加密,但你訪問的網站可能會通過其他方式洩露,比如 TLS 協議本身。雖然TLS可以隱藏用戶通訊的內容,但其並不能總是隱藏與用戶通訊的對象。 比如TLS握手可以攜帶一個叫做加密服務器名稱指示(SNI)的擴展, 這個擴展幫助客戶端告訴服務器其想要訪問的網站的域名。 而所有將 SNI 一併加密的流量在中國內地都將被封鎖^1,因此想要完全隱藏自己的瀏覽痕跡在中國內地是不可能的。
此外,DoH 與 DoT 僅能保證不將內容洩露給第三者,暨無法防止 DNS 服務商自身作惡。當然,這是很容易想像的。因此這種時候只能選擇相對可靠的 DNS 提供商,比如 Cloudflare 等。或者你也可以選擇設置自己的 eDNS 服務器,就像以前人們使用自己的 HOST 文件那樣,將 DNS 流量封鎖在內網中,自然便不再怕被他人監聽。
This page is available under the CC BY-NC-ND 4.0 License.
Link to this article: https://www.misaka-mc.tokyo/2021/02/17/DoT-DoH-on-iOS14-and-macOS11/