本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi Linux。 「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第 ...
本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi-Linux。
「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一時間獲取最新技術文章,歡迎關註我們!
公眾號作者 Mike,一個月薪 3000 的雜工。從事 IT 相關工作 15+ 年,熱衷於互聯網技術領域,認同開源文化,對運維相關技術有自己獨特的見解。很願意將自己積累的經驗、心得、技能與大家分享交流,篇篇乾貨不要錯過喲。如果你想聯繫到我,可關註公眾號獲取相關信息。
最近手機更新到了最新的 Android Pie (9.0) 系統,隨著系統的更新,就可以體驗到 Android Pie 帶來了一系列的新特性。比如:全新設計的導航欄以及多任務界面、數字應用、安全和隱私等新功能。其中有一項更新是非常實用的,該功能可以提升用戶上網過程中的安全性,它就是:DNS over TLS,在 Android 里叫做 Private DNS(私人 DNS)。
預設情況下,如果網路的 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 網站為例。
DNS 解析流程圖
圖中可以看到我們的 ISP 的 DNS 伺服器在圖中叫做 DNS Recurser,在解析一個功能變數名稱的時候,總共經過了以下的步驟:
- 向 root 伺服器獲取該 gTLD 的管轄伺服器,圖中為 org 結尾的功能變數名稱。
- root 伺服器返回 org 的管轄伺服器。
- 向 org 的管轄伺服器查詢,誰來負責解析 wikipedia.org 這個功能變數名稱的。
- org 的管轄伺服器返回解析 wikipedia.org 的伺服器 IP 地址。
- 向 wikipedia.org 的解析伺服器發出查詢,解析 www.wikipedia.org 的 IP 地址。
- 拿到最終要的 IP 地址。
從上面的 DNS 解析流程可以看出,解析一個功能變數名稱一共要經歷 6 個步驟。
由於 DNS 的數據是以明文傳輸,所以 DNS 伺服器返回的數據在傳輸的過程中是有可能被篡改的,導致功能變數名稱指向錯誤的 IP,引導用戶訪問錯誤或惡意的網站。比如:在最後一次查詢的時候,有人假冒了 wikipedia.org 的解析伺服器,則可以在中間進行欺騙攻擊,致使用戶最後得到的 IP 地址不是真實的地址。如圖所示,
解析請求被劫持
為什麼要使用私有 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/smartdns
在 Android Pie 上啟用 DNS over TLS
在 Android Pie 上啟用 DNS over TLS 的方法非常簡單。下麵以一加 5 為例,大概需要如下步驟:
- 打開 [設置] → [WLAN 和互聯網] → [私人 DNS] → [私人 DNS 提供商主機名] → 輸入 DNS over TLS 提供商提供的主機名 → 保存。
保存以後,如果私人 DNS 下方顯示主機名代表配置成功。
私有 DNS 欄位並不接受類似 1.1.1.1 這樣簡單的 IP 地址,而是需要一個主機名。如:dns.google。Google 之所以要求私有 DNS 欄位是主機名而非 IP 地址,這是因為考慮到移動運營商需要兼顧 IPv4 和 IPv6 共存的問題。
如果你使用原生 Android Pie 可使用 [設置] → [網路和互聯網] → [高級] → [私人 DNS] 。
驗證是否生效
- 如果你使用的是 Cloudflare 提供的私人 DNS,可以訪問 https://1.1.1.1/help 進行驗證。如果 “使用 DNS over TLS(DoT)” 顯示為 “是” 就表示配置成功了。
- 你也可以訪問 https://whoer.net/zh 這個網站來測試 DNS 匿名性。
一些可用的 DNS over TLS 提供商
Google: dns.google
Cloudflare: 1dot1dot1dot1.cloudflare-dns.com
Quad9: dns.quad9.net
CleanBrowsing: security-filter-dns.cleanbrowsing.org
紅魚 DNS: 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