DNS劫持与简单应对(一)基础篇

小于 1 分钟阅读时间

发表时间:

什么是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污染无效)、改变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劫持等现象了。

对于不同的操作系统,有不同的操作方式。需要注意的是国外的DNS服务商的DoH和DoT服务基本无法访问了,所以本文主要推荐使用阿里和腾讯两家的DNS。

iOS系统

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

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

Android

前往:设置→无线和网络→选择指定加密 DNS 服务(或私人 DNS)→直接填入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,并拦截广告。(这也是笔者目前采用的方案)具体步骤如下:

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

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