本文首发于:微信公众号「运维之美」,公众号 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,在解析一个域名的时候,总共经过了以下的步骤:

  1. 向 root 服务器获取该 gTLD 的管辖服务器,图中为 org 结尾的域名。
  2. root 服务器返回 org 的管辖服务器。
  3. 向 org 的管辖服务器查询,谁来负责解析 wikipedia.org 这个域名的。
  4. org 的管辖服务器返回解析 wikipedia.org 的服务器 IP 地址。
  5. 向 wikipedia.org 的解析服务器发出查询,解析 www.wikipedia.org 的 IP 地址。
  6. 拿到最终要的 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 为例,大概需要如下步骤:

  1. 打开 [设置] → [WLAN 和互联网] → [私人 DNS] → [私人 DNS 提供商主机名] → 输入 DNS over TLS 提供商提供的主机名 → 保存。

保存以后,如果私人 DNS 下方显示主机名代表配置成功。

  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)” 显示为 “是” 就表示配置成功了。

一些可用的 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。最后我们来搞个小投票,看看大家所使用的手机品牌和系统。

参考文档

  1. https://www.google.com
  2. http://t.cn/EicGa97
  3. http://t.cn/EiVVF4K
  4. http://t.cn/EiVfk7i
  5. http://t.cn/EiVc5Uf
  6. http://t.cn/E2m0Ytz

Android Pie 私人 DNS 使用教程的更多相关文章

  1. Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)

    Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...

  2. 【转】Android Studio-1.2版本设置教程

    如果重新安装Android Studio的话要重新配置风格选项啥的,这篇是个很好的教程,原文链接:http://blog.csdn.net/skykingf/article/details/45485 ...

  3. Android Studio下载及使用教程(转载)

    (一)下载及相关问题解决: Android Studio 下载地址,目前最新可下载地址,尽量使用下载工具. Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却 ...

  4. Windows环境下Android Studio v1.0安装教程

    Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...

  5. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

  6. Android自动化压力测试图解教程——Monkey工具

    [置顶] Android自动化压力测试图解教程--Monkey工具 标签: 测试androidprofiling工具测试工具文档 2012-04-01 10:16 38185人阅读 评论(10) 收藏 ...

  7. Android程序开发0基础教程(一)

    程序猿学英语就上视觉英语网 Android程序开发0基础教程(一)   平台简单介绍   令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...

  8. android音乐播放器开发教程

    android音乐播放器开发教程 Android扫描sd卡和系统文件 Android 关于录音文件的编解码 实现米聊 微信一类的录音上传的功能 android操作sdcard中的多媒体文件——音乐列表 ...

  9. 【转】Windows环境下Android Studio v1.0安装教程

    原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/1 ...

随机推荐

  1. 嵊州D3T2 福尔贝斯太太的快乐夏日 summer

    宗教,或是无节制的自由主义,是致人腐化的毒剂. 现在,一个人要经历 n 个事件,编号为 1 ∼ n. 经历 x 号事件,他的危险值就会增加 x. 一开始他的危险值是 0. 当一个人的危险值大于 0 且 ...

  2. 彻底透析SpringBoot jar可执行原理

    ​ 文章篇幅较长,但是包含了SpringBoot 可执行jar包从头到尾的原理,请读者耐心观看.同时文章是基于SpringBoot-2.1.3进行分析.涉及的知识点主要包括Maven的生命周期以及自定 ...

  3. Java面试题汇总---基础版(附答案)

    基于我个人对面试的认知和招聘经验,在此我总结一下Java开发者的基础知识掌握要求,及应聘者面试的需要准备的内容. 首先,Java基础是每个面试官都会问到的,可能只是针对工作经验的多少,对问题追踪深度有 ...

  4. 当没有接口时、不可继承时,如果使用mock方案进行单元测试

    原版代码: import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; imp ...

  5. backbone之路由锚点的替换

    1.需求 由于项目一开始做的时候不甚完善,所有的网页没有路由功能,导致一些搜索结果在页面跳转之后,没有被记录下来,在页面跳转之后回退,得到的是页面最原始的结果,没有指定的搜索条件.最近项目的在完善这些 ...

  6. STM32-I2C_CheckEvent-标志位自动清除理解

    STM32里I2C_CheckEvent函数我们应该是相当熟悉了,在每次发送数据后我们都需要检验相应的EVx(x = 0,1,2,,,)事件是否有发送. 函数定义如下: ErrorStatus I2C ...

  7. Hadoop值Partition分区

    分区操作 为什么要分区? 要求将统计结果按照条件输出到不同文件中(分区).比如:将统计结果按 照手机归属地不同省份输出到不同文件中(分区) 默认 partition 分区 /** 源码中:numRed ...

  8. Spring:定时任务定时器 Quartz的使用

    Quartz的使用方式 配置文件方式 一.引入依赖 <!-- spring 其他依赖省略 --> <!-- https://mvnrepository.com/artifact/or ...

  9. python基础练习 dict切片

    利用切片操作,实现一个trim()函数,去除字符串首尾的空格 def trim(s): if s[:1] != ' ' and s[-1:] != ' ': return s elif s[:1] = ...

  10. Sublime Text 格式化代码

    1.添加快捷键 其实在sublime中已经自建了格式化按钮: Edit -> Line -> Reindent 只是sublime并没有给他赋予快捷键,所以只需加上快捷键即可 Prefer ...