DNSCrypt 是一个由 Frank Denis 和 Yecheng Fu 设计的加密协议。目的在于加密客户端和 DNS 服务器端之间的通讯,以实现多种保护目的。比如防止 ISP 对 DNS 协议的恶意劫持,或者部分 DNS 服务对 NXDOMAIN 的劫持(对解析失败的域名跳转到广告页面)。
DNSCrypt-Proxy 是 DNSCrypt 协议的一个实现,支持多种操作系统。本文描述的是如何在 macOS 上启用并进行一些必要的配置。
最简单的安装方式就是通过 Homebrew:
brew install dnscrypt-proxy
安装完成之后,先不要启动,打开下面这个文件,改动几个地方:
/usr/local/etc/dnscrypt-proxy.toml
如果 DNSCrypt-Proxy 本身遇到任何问题的时候,我们可以从应用自身的日志中看到。
文件内搜索 log_level
然后修改这两行:
log_level = 0
log_file = '/usr/local/var/log/dnscrypt-proxy.log'
查询日志在本地记录你的每一次 DNS 查询的时间、域名和查询类型。
文件内搜索 query_log
,然后将 file 那一行修改为:
file = '/usr/local/var/log/query.log'
NX 日志记录的那些不存在的域名的查询。通常,恶意软件,或者是没有正常工作的过时软件会发出这样的查询。
文件内搜索 nx_log
,然后将 file 那一行修改为:
file = '/usr/local/var/log/nx.log'
在任何情况下不使用操作系统自带的解析,在文件中搜索 ignore_system_dns
然后修改 true
:
ignore_system_dns = true
DNSCrypt-Proxy 的启动稍微特殊的一点是,因为它需要监听在 53 端口,因此我们需要使用 sudo
来管理服务。
启动 DNSCrypt-Proxy:
sudo brew services start dnscrypt-proxy
如果服务正常启动了,那么在我们之前打开的 dnscrypt-proxy.log
中应该可以看到下面这行:
dnscrypt-proxy is ready
然后你就可以在 macOS 的网络设置中将 DNS 设置为 127.0.0.1
了。然后访问几个你经常去的网站,就可以在之前打开的 query.log
中看到查询记录。
如果在这样设置之后打开网站遇到问题,那么在 dnscrypt-proxy.log
日志文件中应该可以找到线索。
因为开启了 query_log
,所以我们可以用下面这条指令找出解析量最大的域名:
cat query.log|awk -F$'\t' '{print $3}'|sort|uniq -c|sort -r|more
而如果你有其他的分析工具,query.log
会是一个很有意思的数据源可以玩。
你可以将 DNSCrypt-Proxy 运行在 Linux 服务器上,然后在 resolv.conf
中将 nameserver
设置为 127.0.0.1
,这样的话也可以解决服务器上遇到的 DNS 劫持。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.