file

本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi-Linux。

​「運維之美」是一個有情懷、有態度,專注於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和釋出最前沿的科技資訊。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一時間獲取最新技術文章,歡迎關注我們!

公眾號作者 Mike,一個月薪 3000 的雜工。從事 IT 相關工作 15+ 年,熱衷於網際網路技術領域,認同開源文化,對運維相關技術有自己獨特的見解。很願意將自己積累的經驗、心得、技能與大家分享交流,篇篇乾貨不要錯過喲。如果你想聯絡到我,可關注公眾號獲取相關資訊。

最近手機更新到了最新的 Android Pie (9。0) 系統,隨著系統的更新,就可以體驗到 Android Pie 帶來了一系列的新特性。比如:全新設計的導航欄以及多工介面、數字應用、安全和隱私等新功能。其中有一項更新是非常實用的,該功能可以提升使用者上網過程中的安全性,它就是:DNS over TLS,在 Android 裡叫做 Private DNS(私人 DNS)。

file

預設情況下,如果網路的 DNS 伺服器支援,裝置會自動使用 DNS over TLS,但如果使用者不希望使用 DNS over TLS,可選擇將其關閉。

Android Pie 的 新功能簡化了在 Android 配置自定義安全的 DNS 解析程式。當網站提供 DNS 服務時,客戶端和網站伺服器就會自動進行加密,第三方無法窺視 DNS 查詢。因為 Android 9 內建對 DNS over TLS 的支援。同時該 TLS 還負責自動預設 HTTPS 訪問網站,在位址列可看到綠色安全鎖圖示。這可確保不會被 ISP、移動運營商以及客戶端與 DNS 解析程式之間的第三方篡改內容或無法解析。

在講這個功能之前先來了解一下什麼是 DNS 和 DNS 汙染。

原理

既然說起 DNS 和其汙染問題,就不得不先看看 DNS 系統是如何工作的。

網際網路所有通訊都是建立在 TCP/IP 的基礎上,如果想訪問目標網路,就必須知道目標 IP。不過 IP 的數量有限,還有 IP 是由一串數字或十六進位制組成的,不是那麼好記,所以有了域名。域名本身不具有訪問性,它如果想被訪問,必須繫結一個或多個 IP,一個 IP 可以繫結一個或多個域名。這時候就有一個問題,如何知道域名指向的是哪個 IP。所以需要一項服務,它記載著所有域名和IP的關係,需要的時候詢問它就可以了,這就是 DNS(域名系統)。

以訪問 Wikipedia 網站為例。

file

DNS 解析流程圖

圖中可以看到我們的 ISP 的 DNS 伺服器在圖中叫做 DNS Recurser,在解析一個域名的時候,總共經過了以下的步驟:

向 root 伺服器獲取該 gTLD 的管轄伺服器,圖中為 org 結尾的域名。

root 伺服器返回 org 的管轄伺服器。

向 org 的管轄伺服器查詢,誰來負責解析

http://

wikipedia。org

這個域名的。

org 的管轄伺服器返回解析

http://

wikipedia。org

的伺服器 IP 地址。

http://

wikipedia。org

的解析伺服器發出查詢,解析

http://www。

wikipedia。org

的 IP 地址。

拿到最終要的 IP 地址。

從上面的 DNS 解析流程可以看出,解析一個域名一共要經歷 6 個步驟。

由於 DNS 的資料是以明文傳輸,所以 DNS 伺服器返回的資料在傳輸的過程中是有可能被篡改的,導致域名指向錯誤的 IP,引導使用者訪問錯誤或惡意的網站。比如:在最後一次查詢的時候,有人假冒了

http://

wikipedia。org

的解析伺服器,則可以在中間進行欺騙攻擊,致使使用者最後得到的 IP 地址不是真實的地址。如圖所示,

file

解析請求被劫持

為什麼要使用私有 DNS?

從上面的例子我們可以看出,DNS 是存在被劫持和汙染的風險的。為了保護使用者的上網安全,一些 DNS 加密查詢技術因此應運而生。常見的有:DNS over HTTPS、DNSCrypt 和 DNS over TLS。這三種的技術原理大致一樣,都是透過一些手段加密使用者與 DNS 伺服器之間的通訊,避免 DNS 汙染。

TLS (Transport Layer Security,傳輸層安全協議),TLS 是 IETF(Internet Engineering Task Force,Internet 工程任務組)制定的一種新的協議。TLS 是在其前身 SSL (Secure Sockets Layer,安全套接層)的基礎上發展來的。SSL 也是一種安全協議,其目的是為網際網路通訊提供安全及資料完整性保障。TLS 它建立在 SSL 3。0 協議規範之上,是 SSL 3。0 的後續版本,可以理解為 SSL 3。1。TLS 協議由兩層組成:TLS 記錄層(TLS Record)和 TLS 傳輸層(TLS Handshake)。較低的層為 TLS 記錄層協議,位於某個可靠的傳輸協議(例如:TCP)上面。記錄層協議確定傳輸層資料的封裝格式。傳輸層安全協議使用 X。509 認證,之後利用非對稱加密演算來對通訊方做身份認證,之後交換對稱金鑰作為會談金鑰(Session key)。這個會談金鑰是用來將通訊兩方交換的資料做加密,保證兩個應用間通訊的保密性和可靠性,使客戶與伺服器應用之間的通訊不被攻擊者竊聽。

目前支援 DNS over TLS 的平臺不多, Android Pie 就是其中這一。如果你的系統暫時不支援 DNS over TLS,你可以暫時使用 SmartDNS 這個程式來作為本地 DNS 伺服器,它支援將 DNS over TLS 作為 DNS 上游伺服器。

SmartDNS 專案地址:

https://

github。com/pymumu/smart

dns

在 Android Pie 上啟用 DNS over TLS

在 Android Pie 上啟用 DNS over TLS 的方法非常簡單。下面以一加 5 為例,大概需要如下步驟:

開啟 [設定] → [WLAN 和網際網路] → [私人 DNS] → [私人 DNS 提供商主機名] → 輸入 DNS over TLS 提供商提供的主機名 → 儲存。

file

儲存以後,如果私人 DNS 下方顯示主機名代表配置成功。

file

1。 私有 DNS 欄位並不接受類似 1。1。1。1 這樣簡單的 IP 地址,而是需要一個主機名。如:dns。google。Google 之所以要求私有 DNS 欄位是主機名而非 IP 地址,這是因為考慮到移動運營商需要兼顧 IPv4 和 IPv6 共存的問題。

2。 如果你使用原生 Android Pie 可使用 [設定] → [網路和網際網路] → [高階] → [私人 DNS] 。

驗證是否生效

如果你使用的是 Cloudflare 提供的私人 DNS,可以訪問

https://

1。1。1。1/help

進行驗證。如果 “使用 DNS over TLS(DoT)” 顯示為 “是” 就表示配置成功了。

file

你也可以訪問

https://

whoer。net/zh

這個網站來測試 DNS 匿名性。

file

一些可用的 DNS over TLS 提供商

Google: dns。google

Cloudflare:

http://

1dot1dot1dot1。cloudflare-dns。com

Quad9:

http://

dns。quad9。net

CleanBrowsing:

http://

security-filter-dns。cleanbrowsing。org

紅魚 DNS:

http://

dns。rubyfish。cn

祝大家早日吃上 Andorid Pie。最後我們來搞個小投票,看看大家所使用的手機品牌和系統。

參考文件

https://www。

google。com

http://

t。cn/EicGa97

http://

t。cn/EiVVF4K

http://

t。cn/EiVfk7i

http://

t。cn/EiVc5Uf

http://

t。cn/E2m0Ytz