保卫网络隐私的“底裤”:DNS劫持与简单应对

本文计划同步发送在微信公众平台上,标题为《拿什么来保卫网络隐私的底裤:DNS劫持与应对》。

写下本文的起因在于上周末笔者本人的经历。在调试服务的时候,笔者突然发现与服务器的连接经常自动断开,甚至死活连不上。排除了服务器端的问题后,经测试,最终发现问题出在学校网络的DNS解析上。通过nslookup查得DNS间歇将我的域名解析到了其他IP地址上,且手动指定阿里巴巴和腾讯DNS无效,初步判定遭到DNS污染。

凡是上网,必然要用到DNS查询,所有访问的域名均要被发送给DNS服务器以获得其指向的地址,你访问了什么小网站,你的房东、老板、学校机房等等通过劫持你的DNS查询数据都可能知道。虽然迟早会被看光,但至少得让房东、老板这种小杂鱼偷看起来没那么容易。

太长不看——结论部分

目前DNS加密是应对DNS污染的主要应对措施(另一种是DNS代理)。对于不同的操作系统,有不同的应对方式,这里先写在文章开头,一些解释的部分放在文章后面。国外的DNS服务商的DoH和DoT服务基本无法访问了,所以本文主要推荐使用阿里和腾讯两家的DNS。

iOS系统

下载修改DNS over TLS或者DNS over HTTPS的描述文件,并添加至系统、启用。目前我自己在使用的是阿里DNS的描述文件:

下载地址:https://cdn.jsdelivr.net/gh/paulmillr/encrypted-dns@master/alibaba-https.mobileconfig复制链接并使用iOS的Safari浏览器打开,如果不放心,可以查看源代码之后再信任)

Android

前往:设置→无线和网络→选择指定加密 DNS 服务(或私人 DNS)→填入tls://223.5.5.5https://doh.pub/dns-querytls://dot.pub 经同学测试,直接填入dot.pub即可

Windows 和 macOS

在网络面板设置DNS(可以参考这篇推送)可以防止默认DNS服务器的无心之失,但对于故意的DNS污染则无能为力。

目前,最为便捷的方式是使用Google Chrome浏览器、Firefox浏览器或者新版Edge浏览器,在设置中打开DNS over TLS/HTTPS:

  • Chrome:设置→隐私设置和安全性→高级→打开“使用安全的 DNS ”开关→选择“自定义”→填写tls://223.5.5.5https://doh.pub/dns-querytls://dot.pub
  • Edge:设置→隐私、搜索和服务→打开“使用安全的 DNS 指定如何查找网站的网络地址”开关→选择“自定义”→填写tls://223.5.5.5https://doh.pub/dns-querytls://dot.pub

Adguard Home

感兴趣、有时间的朋友可以使用Adguard Home,净化本机的DNS,并拦截广告。(这也是笔者目前采用的方案)具体步骤如下:

  1. 安装Adguard Home并启用
  2. 登录Adguard Home后台
  3. 前往设置→DNS设置,在上游DNS设置处填写:
    https://dns.alidns.com/dns-query
    tls://dns.alidns.com
    https://dns.pub/dns-query
  4. 在网络面板设置DNS为运行Adguard Home设备的IP地址

Adguard Home在Windows、macOS和Linux操作系统下均有客户端,详细设置步骤务必参考官方中文说明:https://adguard.com/zh_cn/adguard-home/overview.html

下面是一些细节,供有兴趣的朋友阅读。

什么是DNS,它和我的隐私有什么关系?

什么是DNS

通俗来说,DNS的任务就是将域名指向对应的IP地址。传统的DNS解析过程类似于喊话问路——

电脑:“老王(DNS服务器)!www.baidu.com(域名)哪里走” ←DNS请求

三秒(响应时间)后,老王:“www.baidu.com(域名)指向的是111.111.111.111(地址)” ←DNS应答

DNS的易被污染性

在上面的过程中,可能会出现老王不认识路,回答了一个错误的地址的情况。这时候,如果找另外的人(另行设置DNS服务器),则可以解决老王不认路的问题。但是,这种方法对于更加恶劣的应答者并不奏效:假设有一个李田所(污染者,经常是运营商),想要故意误导你的网络流量,李田所可以采取抢答的办法,因为一般情况下李田所离电脑更近,先接到DNS请求并先回答,有时候李田所(污染者)可能直接伪装成老王来回答,于是就会变成下面的情况——

电脑:“老王(DNS服务器)!www.baidu.com(域名)哪里走” ←DNS请求

一秒(响应时间)后,李田所抢答:“www.baidu.com(域名)指向的是111.122.133.144(错误地址)←抢答

三秒(响应时间)后,老王回答:“www.baidu.com(域名)指向的是111.111.111.111(地址)” ←DNS应答(←被计算机废弃、或者被拦截的正确回答)

于是,你的电脑无论如何也找不到正确的地址了。

DNS的易被监控性

和https不同,DNS请求默认是不加密、不验证的,类似于人在山这头喊话,山里的所有人想听都能听见,而且内容是明文,谁都能听得懂。这也导致了你如果用校园网上网,学校网管基本就能知道你在访问什么不良网站。

解决方法

污染种类局部DNS污染全局DNS污染
来源运营商(地区)。。。
应对方式DoH,DoT代理DNS查询流量

目前可行的方法总体的目标是:简单更改DNS(对于DNS污染无效)、改变DNS查询流量明文的特点,通过加密、认证的方式,解决抢答、冒答问题。具体方法包括:利用https协议的DNS over HTTPS(DoH),利用TLS加密协议的DNS over TLS(DoT),通过代理软件查询DNS流量。比较便捷的还是DoH和DoT两种。

DoT使用 TLS 协议来传输 DNS 协议。TLS 协议是目前互联网最常用的安全加密协议之一,我们访问 HTTPS 的安全基础就是基于 TLS 协议的。相比于之前使用无连接无加密的 UDP 模式, TLS 本身已经实现了保密性与完整性。

DoH使用 HTTPS 来传输 DNS 协议。DoH 的安全原理与 DoT 一样,他们之间的区别只在于:DoH有了 HTTP 格式封装,更加通用。

总体来说,通过DoT和DoH,至少在本机和DNS服务商中间环节不太有可能出现DNS劫持等现象了。

Ricky Lee
Ricky Lee

法学民工,铁道爱好者,城市天际线玩家

文章: 25

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注