本文首发于:微信公众号「运维之美」,公众号 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。最后咱们来搞个小投票,看看你们所使用的手机品牌和系统。