本文首发于:微信公众号「运维之美」,公众号 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. 安卓学习资料推荐《深入理解Android:卷2》下载

    下载地址:百度云下载地址 编辑推荐 <深入理解Android:卷2>编辑推荐:经典畅销书<深入理解Android:卷I>姊妹篇,51CTO移动开发频道和开源中国社区一致鼎力推荐 ...

  2. MySql中的SHOW INDEX 查出的结果列代表的意义

    MySQL SHOW INDEX语法的实际操作用法以及其实际查看索引状态(语法)的具体内容的描述,如果你对这一技术,心存好奇的话,以下的文章将会揭开它的神秘面纱. INDEX FROM tbl_nam ...

  3. Unix及Linux编辑器vi/vim基本使用方法

  4. Spring Cloud学习(一):Eureka服务注册与发现

    1.Eureka是什么 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. Eureka ...

  5. python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal

    6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...

  6. Excel催化剂开源第49波-Excel与PowerBIDeskTop互通互联之第三篇

    在PowerBIDeskTop开启的SSAS服务,和Sqlserver所开启的一个本质的区别是,前者其端口号是随机生成的,即上一次打开获得的端口号,下一次关闭后再打开,系统分配给它新的端口号,而后者因 ...

  7. pytest自定义动态添加描述信息

    先上效果图: 修改pytest-html报告,分三部分. pytest执行目录新建conftest.py文件 import pytest from py._xmlgen import html fro ...

  8. 微信小程序post 服务端无法获得参数问题

    header中需要改为 "Content-Type": "application/x-www-form-urlencoded"

  9. 解读Android MediaPlayer 详细使用方法

        MediaPlayer具有非常强大的功能,对音视频的播放均提供了支持,为了保证播放期间系统的正常工作,需要设置"android.permission.WAKE_LOCK"权 ...

  10. Django实现web端tailf日志文件

    这是Django Channels系列文章的第二篇,以web端实现tailf的案例讲解Channels的具体使用以及跟Celery的结合 通过上一篇<Django使用Channels实现WebS ...