本文首發於:微信公衆號「運維之美」,公衆號 ID:Hi-Linux。git
「運維之美」是一個有情懷、有態度,專一於 Linux 運維相關技術文章分享的公衆號。公衆號致力於爲廣大運維工做者分享各種技術文章和發佈最前沿的科技信息。公衆號的核心理念是:分享,咱們認爲只有分享才能使咱們的團體更強大。若是你想第一時間獲取最新技術文章,歡迎關注咱們!github
公衆號做者 Mike,一個月薪 3000 的雜工。從事 IT 相關工做 15+ 年,熱衷於互聯網技術領域,認同開源文化,對運維相關技術有本身獨特的看法。很願意將本身積累的經驗、心得、技能與你們分享交流,篇篇乾貨不要錯過喲。若是你想聯繫到我,可關注公衆號獲取相關信息。安全
最近手機更新到了最新的 Android Pie (9.0) 系統,隨着系統的更新,就能夠體驗到 Android Pie 帶來了一系列的新特性。好比:全新設計的導航欄以及多任務界面、數字應用、安全和隱私等新功能。其中有一項更新是很是實用的,該功能能夠提高用戶上網過程當中的安全性,它就是:DNS over TLS,在 Android 裏叫作 Private DNS(私人 DNS)。ruby
默認狀況下,若是網絡的 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,在解析一個域名的時候,總共通過了如下的步驟:
從上面的 DNS 解析流程能夠看出,解析一個域名一共要經歷 6 個步驟。
因爲 DNS 的數據是以明文傳輸,因此 DNS 服務器返回的數據在傳輸的過程當中是有可能被篡改的,致使域名指向錯誤的 IP,引導用戶訪問錯誤或惡意的網站。好比:在最後一次查詢的時候,有人假冒了 wikipedia.org 的解析服務器,則能夠在中間進行欺騙攻擊,導致用戶最後獲得的 IP 地址不是真實的地址。如圖所示,
解析請求被劫持
從上面的例子咱們能夠看出,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 的方法很是簡單。下面以一加 5 爲例,大概須要以下步驟:
保存之後,若是私人 DNS 下方顯示主機名錶明配置成功。
1. 私有 DNS 字段並不接受相似 1.1.1.1 這樣簡單的 IP 地址,而是須要一個主機名。如:dns.google。Google 之因此要求私有 DNS 字段是主機名而非 IP 地址,這是由於考慮到移動運營商須要兼顧 IPv4 和 IPv6 共存的問題。
2. 若是你使用原生 Android Pie 可以使用 [設置] → [網絡和互聯網] → [高級] → [私人 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。最後咱們來搞個小投票,看看你們所使用的手機品牌和系統。