在 macOS 上启用 DNSCrypt-Proxy

2018-04-08 22:25:22 +08:00
 Livid

DNSCrypt 是一个由 Frank Denis 和 Yecheng Fu 设计的加密协议。目的在于加密客户端和 DNS 服务器端之间的通讯,以实现多种保护目的。比如防止 ISP 对 DNS 协议的恶意劫持,或者部分 DNS 服务对 NXDOMAIN 的劫持(对解析失败的域名跳转到广告页面)。

DNSCrypt-Proxy 是 DNSCrypt 协议的一个实现,支持多种操作系统。本文描述的是如何在 macOS 上启用并进行一些必要的配置。

安装 DNSCrypt-Proxy

最简单的安装方式就是通过 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 日志记录的那些不存在的域名的查询。通常,恶意软件,或者是没有正常工作的过时软件会发出这样的查询。

文件内搜索 nx_log,然后将 file 那一行修改为:

file = '/usr/local/var/log/nx.log'

禁用系统提供的 DNS

在任何情况下不使用操作系统自带的解析,在文件中搜索 ignore_system_dns 然后修改 true

ignore_system_dns = true

启动和启用 DNSCrypt-Proxy

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 劫持。

17264 次点击
所在节点    DNS
34 条回复
Bardon
2018-04-08 22:28:03 +08:00
我一贯的用法,还是拉一个 docker 容器去跑,为了系统版本升级的时候不要出现莫名其妙的问题。
sammo
2018-04-08 23:05:17 +08:00
@Bardon 本机 dns 解析这种事也能放到 docker 里?你试过吗? 如果好使那么求个教程
jybox
2018-04-08 23:10:43 +08:00
@sammo 它本质上是通过 53 端口提供的网络服务呀,跑在 docker 也算是个不错的选择,不过 brew 也很方便
uuair
2018-04-08 23:49:02 +08:00
是不是如果在国内这样做了,所有的 dns 访问都加密了?那么国内的地址,会不会变慢呢。。。
我们办公室的网络,好像 dns 就挂了,开那啥都不能访问那啥。。。
Bluecoda
2018-04-09 00:01:52 +08:00
如果你正好有一个 ubnt 的路由器(我用的 edge lite 3 )这里正好有一个不错的教程
https://community.ubnt.com/t5/EdgeRouter/DNSCrypt-Proxy-2/td-p/2257892
2b
2018-04-09 00:02:16 +08:00
@uuair 可以在配置文件中设置用国内 DNS 解析国内网站
修改 dnscrypt-proxy.toml 中 forwarding_rules = 'dnscrypt-forwarding-rules.txt'
https://raw.githubusercontent.com/CNMan/dnscrypt-proxy-config/master/dnscrypt-forwarding-rules.txt
Seymer
2018-04-09 00:19:56 +08:00
哇塞,意想不到的是,解决了我在国内使用 Paw 应用连接异常问题,哈哈,非常感谢 :)
Showfom
2018-04-09 01:03:59 +08:00
openroc
2018-04-09 07:38:10 +08:00
👍
k9982874
2018-04-09 08:55:40 +08:00
站长最近很活跃
hackerwgf
2018-04-09 09:02:05 +08:00
我是在阿里云上搭了一个,然后路由器 DNS 连接到它
123s
2018-04-09 09:30:43 +08:00
手机上怎么弄?
wosuopu
2018-04-09 09:47:14 +08:00
先收藏
zw
2018-04-09 09:53:30 +08:00
嗯,在国内使用这东东来解析 dns 的话,1024、tumblr 之类的网站是可以直接打开的,不用走翻墙流量。。。
happywowwow
2018-04-09 12:18:04 +08:00
xtddd
2018-04-09 16:18:46 +08:00
@2b dnscrypt-proxy.toml 中 forwarding_rules = 'dnscrypt-forwarding-rules.txt' 文件里这个没有找到,
happywowwow
2018-04-09 16:31:15 +08:00
恩 不知道以上的人有没有发现个问题.
用了这个之后, 如果你的 mac 上安装了 docker, docker 会给容器也配置 127.0.0.1 的 DNS... 然容器的 127 和主机不在一个 ns 下...
v2register
2018-04-09 17:40:04 +08:00
@xtddd #16 https://github.com/jedisct1/dnscrypt-proxy/blob/master/dnscrypt-proxy/example-dnscrypt-proxy.toml#L196
重命名 example-dnscrypt-proxy.toml 为 dnscrypt-proxy.toml
下载 https://raw.githubusercontent.com/CNMan/dnscrypt-proxy-config/master/dnscrypt-forwarding-rules.txt
再把# forwarding_rules = 'forwarding-rules.txt'改为
forwarding_rules = 'dnscrypt-forwarding-rules.txt'
kappa
2018-04-10 00:10:05 +08:00
@2b 貌似用这个转换的 rule 列表就没什么必要前置 dnsmasq 了。。
xtddd
2018-04-10 09:26:33 +08:00
@v2register 在 win 上已经设置完成了,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/445199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX