MacOS 开启 DNS over HTTPS (DoH)

DNS 是什么?

DNS 的全称是 Domain Name Server,是完成域名和与之相对应的IP地址转换的服务器。通俗来讲,DNS 服务器就好比村口的王大爷,你告诉他你想找的住户名字(网站域名),他便引导你到正确的门牌号(IP地址)。

zhilu.png

传统的 DNS 有什么问题?

DNS是一套非常非常古老的协议,最早可追溯到1983年,自从1987年协议定稿之后,没有发生什么变化,被一直沿用至今。开发DNS协议的时候,互联网还是新兴事物,因此大家根本没顾虑到信息的安全性和保密性。传统的DNS查询和响应通过UDP或TCP发送而不加密,这很容易受到窃听和欺骗,包括基于DNS的网络审查,称为DNS污染。

继续刚才的比喻:你在村口遇到的可能是假的王大爷;你遇到的大爷会带你去错误的门牌号;王大爷给你指路时会被其他人听到。你打开网易,登录自己的邮箱,你看到地址栏的网址是 mail.163.com 没错,于是信心满满地输入你的用户名和密码,殊不知你登录的其实是黑客设立的假网站……

开启 DNSCrypt-proxy

DNSCrypt-proxy 是一款开源的、灵活的 DNS 代理,支持现代加密DNS协议,如 DNSCrypt v2 和 DNS-over-HTTPS,并支持 DNSCrypt 与基于 TLS 1.3 的 DNS-over-HTTPS(DoH)。

本安装章节以 Mac OS 为例,如你需要 Windows 或其他操作系统,可以看这篇官方安装指南

启动系统自带的终端(Terminal)应用程序以使用命令行,然后键入以下命令以获取 root shell:

sudo -s

全部安装完成之前,请不要关闭这个终端界面。

假如你的电脑用户名的bob,你可以在你的/Users/bob/目录下新建一个名为dnscrypt-proxy的文件夹,最终路径是/Users/bob/dnscrypt-proxy

接着,在这里下载程序包,在最新版本中找到dnscrypt-proxy-macos开头的安装包,下载、解压并放入你刚才新建的文件夹。

回到终端,键入以下命令(记得把bob改成你自己的电脑用户名):

cd /Users/bob/dnscrypt-proxy

新建一个配置文件:

cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml

在文件夹里找到名为dnscrypt-proxy.toml的文件,用文本编辑器打开编辑,搜索关键词server_names,以Cloudflare为例,可以把那一行改为:

server_names = ['cloudflare', 'cloudflare-ipv6']

你也可以改为其它的 DNS over HTTPS 提供商,比如 Quad9。

保存好配置文件,用这条命令,测试一下是否能正常运行:

./dnscrypt-proxy

没问题的话,点开 Mac 菜单栏的 Wi-Fi 图标,打开网络首选项(Network Preferences),然后选择您的连接设备比如Wi-Fi。然后,单击高级...(Advanced...)按钮。找到DNS标签,把服务器地址全部改为127.0.0.1,如图:

changednsto127.png

启动:

./dnscrypt-proxy -service start

回到终端,键入以下命令,让 dnscrypt-proxy 跟随系统启动:

./dnscrypt-proxy -service install

至此,安装完成。

其他使用命令:

  • 停止 sudo ./dnscrypt-proxy -service stop
  • 重启 sudo ./dnscrypt-proxy -service restart
  • 卸载 sudo ./dnscrypt-proxy -service uninstall

在线测试 DNS 安全性

CloudFlare 提供了这个页面,可供在线测试 DNS 的安全性:https://www.cloudflare.com/ssl/encrypted-sni/

你应该可以看到这样的结果:

cf1.png

在 Firefox 中开启 DoH 和 ESNI

目前,Firefox 标准版支持 DNS-over-HTTPS、Firefox Nightly 版本在此基础上还支持 ESNI。

以 Firefox Nightly 版本为例,在地址栏输入 about:config,进入配置页面:

  • 搜索 network.trr.uri,把配置值设置为:https://1.0.0.1/dns-query(如果使用别的提供商比如Quad9,可使用https://dns.quad9.net/dns-query
  • 搜索 network.trr.mode,把配置值设置为:2(兼容模式)
  • 搜索 esni.enabled,把配置值设置为:true(开启ESNI)

改好后,重启浏览器,再用刚才的测试工具测试一下,四项安全指标都满足了。

cf2.png

使用自定义DoH服务器

使用已支持DoH的服务器IP,转换为sdns://开头的stamp地址:

https://dnscrypt.info/stamps/

转换时,注意protocol要使用Dns-Over-HTTPS

编辑 dnscrypt-proxy.toml,在[static]的下面,添加:

[static.'你的自定义服务名称']
  stamp = 'sdns://刚刚生成的stamp地址'

然后在server_names的那行,改为:

server_names = ['你的自定义服务名称']
发表新评论