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 劫持。
TextQL 是一个用 Go 写的工具,可以在任意 CSV / TSV 文件上执行 SQL 查询。
https://github.com/dinedal/textql
这是用 TextQL 从 DNSCrypt-Proxy 的 TSV 格式的 query.log 中获得查询量最大的 10 个域名的例子:
textql -dlm=tab -sql "select count(c2) as sum,c2 group by c2 order by sum desc limit 10" -output-header query.log
在 macOS 上 TextQL 可以直接通过 Homebrew 安装:
brew install textql
1
Bardon 2018-04-08 22:28:03 +08:00
我一贯的用法,还是拉一个 docker 容器去跑,为了系统版本升级的时候不要出现莫名其妙的问题。
|
4
uuair 2018-04-08 23:49:02 +08:00
是不是如果在国内这样做了,所有的 dns 访问都加密了?那么国内的地址,会不会变慢呢。。。
我们办公室的网络,好像 dns 就挂了,开那啥都不能访问那啥。。。 |
5
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 |
6
2b 2018-04-09 00:02:16 +08:00 1
@uuair 可以在配置文件中设置用国内 DNS 解析国内网站
修改 dnscrypt-proxy.toml 中 forwarding_rules = 'dnscrypt-forwarding-rules.txt' https://raw.githubusercontent.com/CNMan/dnscrypt-proxy-config/master/dnscrypt-forwarding-rules.txt |
7
Seymer 2018-04-09 00:19:56 +08:00
哇塞,意想不到的是,解决了我在国内使用 Paw 应用连接异常问题,哈哈,非常感谢 :)
|
8
Showfom 2018-04-09 01:03:59 +08:00 1
|
9
openroc 2018-04-09 07:38:10 +08:00
👍
|
10
k9982874 2018-04-09 08:55:40 +08:00 via iPhone
站长最近很活跃
|
11
hackerwgf 2018-04-09 09:02:05 +08:00
我是在阿里云上搭了一个,然后路由器 DNS 连接到它
|
12
123s 2018-04-09 09:30:43 +08:00
手机上怎么弄?
|
13
wosuopu 2018-04-09 09:47:14 +08:00
先收藏
|
15
happywowwow 2018-04-09 12:18:04 +08:00
|
16
xtddd 2018-04-09 16:18:46 +08:00
@2b dnscrypt-proxy.toml 中 forwarding_rules = 'dnscrypt-forwarding-rules.txt' 文件里这个没有找到,
|
17
happywowwow 2018-04-09 16:31:15 +08:00
恩 不知道以上的人有没有发现个问题.
用了这个之后, 如果你的 mac 上安装了 docker, docker 会给容器也配置 127.0.0.1 的 DNS... 然容器的 127 和主机不在一个 ns 下... |
18
v2register 2018-04-09 17:40:04 +08:00 1
@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' |
20
xtddd 2018-04-10 09:26:33 +08:00
@v2register 在 win 上已经设置完成了,谢谢
|
21
xtddd 2018-04-10 09:41:56 +08:00
@v2register 这个国内地址用国内的 dns,那国外的地址是用哪个 dns 解析?
|
22
thuai 2018-04-10 10:01:55 +08:00
公司局域网路由内绑定了私有域名怎么设置才能够访问,Google 了下没有找到相关的东西
|
23
xtddd 2018-04-10 20:56:47 +08:00
@v2register 我在 mac 上用 berw 安装后,设置成 127.0.0.1,上不了网,找不到服务器,这是怎么回事
|
24
v2register 2018-04-11 20:07:04 +08:00
|
25
v2register 2018-04-11 20:09:41 +08:00
@xtddd #23 应该是 #17 所说的问题导致的,你试试直接下载 macos 的 bin 运行
https://github.com/jedisct1/dnscrypt-proxy/releases |
26
xtddd 2018-04-11 20:23:30 +08:00
@v2register 好的,谢谢。还有一个选项就是用 macos 的 dnsproxy 客户端
|
27
xtddd 2018-04-11 21:16:11 +08:00
@v2register 下了 macos 的 bin 操作成功了,只是重启后,127.0.0.1 会自动改回路由器 dns 地址。得手动再改一下
|
28
v2register 2018-04-14 10:19:41 +08:00
@thuai #22 cloaking-rules 配置相关域名的静态 IP,或者 forwarding-rules 配置相关域名用原 DNS 解析
|
29
xtddd 2018-04-17 14:56:09 +08:00
@v2register 你好,dnscrypt-proxy 有必要和 unbound 一起使用吗?
|
30
TheKiller 2018-04-20 06:23:44 +08:00 via iPhone
Pcap_DNSProxy 了解一下?
|
31
v2register 2018-04-22 00:50:02 +08:00
@xtddd #29 v2 不需要 unbound 了
|
32
xtddd 2018-04-23 10:58:54 +08:00
@v2register 恩好的,v2 已经有缓存了
|
33
tf0083 2018-05-28 10:57:42 +08:00
日志文件在 var 目录下根本没有 log 这个目录,需要手工建立吗
|