应对DNS污染

什么是安全DNS

在你访问apple.com等网站时, 浏览器需要先向DNS服务器询问apple.com所对应的IP地址, 然后再向这个IP地址建立安全连接.

但是, 询问IP地址的过程是完全不加密的,可以被任意劫持和篡改。DNS over TLS(RFC7858,RFC8310) 和 DNS over HTTPS(RFC 8484)是很好的解决方案,它们用不同的方法达成了相同的目的:防止DNS报文被中间人窥探、篡改或伪造。

浏览器ONLY 安全DNS解决方案

此方式难度较低!

目前(2019.7)Chrome还正在实现此功能,Firefox早已支持此功能了。如果你用的是中国浏览器,请不要指望他们。

  • Firefox 在右上角->Preferences->最下面的Network Settings->勾上最下面的Enable DNS over HTTPS->确定即可。
    (翻译: 在右上角->选项->最下面的网络设置->勾上最下面的启用DNS over HTTPS->确定即可。)

全局安全DNS解决方案

这一类解决方案让你的所有网络流量不受DNS污染攻击的影响。这类小工具有很多,我的推荐不一定适合你,但我会推荐最容易操作、最广泛使用、足够安全的解决方案。

Windows推荐: SimpleDNSCrypt

请访问这个网站下载安装包。https://simplednscrypt.org/ 安装之后,启动软件,点击中间的Service的开关启动服务,然后在下方点击你的WLAN或者网线的图标,即可对这条网络连接启用安全DNS服务。
提示,右上角的设置里可以改界面为中文,可以禁止启动软件时检查更新(因为检查更新有点慢)。这软件的默认配置就足够大多数人用了,如果你不懂的话,不必自己改配置。
这是一个开源软件,发布的安装包也经过数字签名,如果你懂得计算机知识并且重视安全,你可以自行验证它的安全性。如果你不懂得计算机知识且重视安全,相信我,你没有能力重视安全。

Linux推荐: stubby

Linux直接用包管理器一条命令安装,然后systemd启动就好了。下面我写的命令只是示例,请修改成你使用的包管理器。同样,这个软件的默认配置就足够好用了。如果你希望加上GoogleDNS作为你的服务器,你可以参考这里的配置

  • Ubuntu
sudo apt-get install -y stubby ; sudo systemctl disable systemd-resolved --now ; sudo systemctl enable stubby --now
  • ArchLinux
sudo pacman  -S --noconfirm stubby ; sudo systemctl disable systemd-resolved --now ; sudo systemctl enable stubby --now
  • Android 9+ 请在Settings -> Network&internet -> Private DNS -> Private DNS provider hostname填写dns.google并确定。我不清楚这个路径的中文翻译会被翻译成什么样,请自己寻找吧。

  • 其他Android和IOS设备 请搜索下载Cloudflare的手机app,这是全球最大的网络公司,能帮助你一键解决DNS不安全的问题。当然,中国对它不太友好,因为它是安全的。
    在Google Play Store或Apple App Store搜索Cloudflare或1.1.1.1即可找到这个好用的App。

测试我的设置

请尝试访问https://recolic.net 。选择全局方案的Windows用户可能需要用命令ipconfig /flushdns来清理缓存,如果能正常访问,说明配置成功。