Android Pie 私人 DNS 使用教程
本文首发于:微信公众号「运维之美」,公众号 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,在解析一个域名的时候,总共经过了以下的步骤:
- 向 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 为例,大概需要如下步骤:
- 打开 [设置] → [WLAN 和互联网] → [私人 DNS] → [私人 DNS 提供商主机名] → 输入 DNS over TLS 提供商提供的主机名 → 保存。
保存以后,如果私人 DNS 下方显示主机名代表配置成功。
私有 DNS 字段并不接受类似 1.1.1.1 这样简单的 IP 地址,而是需要一个主机名。如:dns.google。Google 之所以要求私有 DNS 字段是主机名而非 IP 地址,这是因为考虑到移动运营商需要兼顾 IPv4 和 IPv6 共存的问题。
如果你使用原生 Android Pie 可使用 [设置] → [网络和互联网] → [高级] → [私人 DNS] 。
验证是否生效
- 如果你使用的是 Cloudflare 提供的私人 DNS,可以访问 https://1.1.1.1/help 进行验证。如果 “使用 DNS over TLS(DoT)” 显示为 “是” 就表示配置成功了。
- 你也可以访问 https://whoer.net/zh 这个网站来测试 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。最后我们来搞个小投票,看看大家所使用的手机品牌和系统。
参考文档
- https://www.google.com
- http://t.cn/EicGa97
- http://t.cn/EiVVF4K
- http://t.cn/EiVfk7i
- http://t.cn/EiVc5Uf
- http://t.cn/E2m0Ytz
Android Pie 私人 DNS 使用教程的更多相关文章
- Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)
Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程) 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级 ...
- 【转】Android Studio-1.2版本设置教程
如果重新安装Android Studio的话要重新配置风格选项啥的,这篇是个很好的教程,原文链接:http://blog.csdn.net/skykingf/article/details/45485 ...
- Android Studio下载及使用教程(转载)
(一)下载及相关问题解决: Android Studio 下载地址,目前最新可下载地址,尽量使用下载工具. Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却 ...
- Windows环境下Android Studio v1.0安装教程
Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...
- Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)
鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio Android Studio 是一个Android开发环境,基于Intel ...
- Android自动化压力测试图解教程——Monkey工具
[置顶] Android自动化压力测试图解教程--Monkey工具 标签: 测试androidprofiling工具测试工具文档 2012-04-01 10:16 38185人阅读 评论(10) 收藏 ...
- Android程序开发0基础教程(一)
程序猿学英语就上视觉英语网 Android程序开发0基础教程(一) 平台简单介绍 令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...
- android音乐播放器开发教程
android音乐播放器开发教程 Android扫描sd卡和系统文件 Android 关于录音文件的编解码 实现米聊 微信一类的录音上传的功能 android操作sdcard中的多媒体文件——音乐列表 ...
- 【转】Windows环境下Android Studio v1.0安装教程
原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/1 ...
随机推荐
- Maven打包成Jar文件时依赖包的问题
我们项目中使用到第三方的库文件,这些jar库文件并没有放到Maven中央库上,导致我们需要在项目中自己配置使用.我们的两三个开发人员对Java都是很熟,因此在使用中遇到了一些问题,表现在:在本地中引入 ...
- Oracle数据库备份---导出与导入
利用windows的cmd命令备份导出数据(也可以连接上sqlplus进行操作)--导出--将数据库orcl完全导出 exp system/oracle@orcl file=c:\oracle_bak ...
- Java并发之线程封闭
读者们好! 在这篇博客中,我们将探讨线程封闭是什么意思,以及我们如何实现它. 所以,让我们直接开始吧. 1. 线程封闭 大多数的并发问题仅发生在我们想要在线程之间共享可变变量或可变状态时.如果在多个线 ...
- CDQZ集训DAY1 日记
爆炸的一天…… 上午考试,然而一道题都没想出正解. T1刚看到题就想到数位DP,然后有感觉是反演,然后读完题之后又觉得是数位DP,发现最后只关注最后9位打了一个类似数位DP的爆搜.期望20分,实际10 ...
- 【转载】DOMContentLoaded与load的区别
DOMContentLoaded与load的区别 (1)在chrome浏览器的开发过程中,我们会看到network面板中有这两个数值,分别对应网 络请求上的标志线,这两个时间数值分别代表什么? ( ...
- DAX 第一篇:数据模型
DAX是一种专门用于计算数据模型的业务公式的语言,本文以Power BI的关系来学习数据模型. 一,理解数据模型 数据模型是由一组表和关系构成的结构,表和表之间由关系链接,如下图所示的产品数据模型: ...
- [剑指offer] 16. 合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解法一: 非递归解 class Solution { public: ListNode *Mer ...
- IIS身份验证和文件操作权限(一、身份验证配置)
最近有一个项目服务器需要升级,主要是Web项目.因为以前是只写代码,不管发布.所以在环境构筑方面就出现自己的知识盲点.盲点一:IIS的身份验证的作用盲点二:IIS的身份验证和文件操作权限的关系(重点) ...
- java练习---7
//程序员:罗元昊 2017.10.7 import java.util.Scanner; public class L { public static void main(String[] args ...
- 基于drone构建CI-CD系统
kubernetes集群三步安装 CI 概述 用一个可描述的配置定义整个工作流 程序员是很懒的动物,所以想各种办法解决重复劳动的问题,如果你的工作流中还在重复一些事,那么可能就得想想如何优化了 持续集 ...