最近手机更新到了最新的 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 服务时,客户端和 DNS 服务器就会自动进行加密传输,第三方无法窥视 DNS 查询。这样就可确保 DNS 请求不会被 ISP、移动运营商以及客户端与 DNS 服务器之间的第三方篡改内容。
在讲这个功能之前先来了解一下什么是 DNS 和 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 为例,大概需要如下步骤:
保存以后,如果私人 DNS 下方显示主机名代表配置成功。
1. 私有 DNS 字段并不接受类似 1.1.1.1 这样简单的 IP 地址,而是需要一个主机名。如:dns.google。Google 之所以要求私有 DNS 字段是主机名而非 IP 地址,这是因为考虑到移动运营商需要兼顾 IPv4 和 IPv6 共存的问题。
2. 如果你使用原生 Android Pie 可使用 [设置] → [网络和互联网] → [高级] → [私人 DNS] 。
验证私人 DNS 设置是否生效
一些可用的 DNS over TLS 提供商
参考文档
https://www.google.com
http://t.cn/EicGa97
http://t.cn/EiVVF4K
http://t.cn/EiVfk7i
http://t.cn/EiVc5Uf
http://t.cn/E2m0Ytz
最后我们来搞个小投票,看看大家所使用的手机品牌和系统。
今日思想
我们这个时代的痛苦在于,那些愚蠢的人都非常自信,那些有想象力和理解能力的人充满了怀疑和犹豫不决。
—— 「关于愚蠢」
推荐阅读
图解 Docker 架构
谈谈监控那些事
谈谈 996 工作制
浅谈 MySQL 优化实施方案
抓包神器 TCPDUMP 使用教程