在 macOS 上启用 DNSCrypt-Proxy - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
59.94D
458.89D
V2EX    DNS

在 macOS 上启用 DNSCrypt-Proxy

  •  7
     
  •   Livid
    PRO
    2018-04-08 22:25:22 +08:00 18027 次点击
    这是一个创建于 2751 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言    2018-04-09 00:57:50 +08:00

    使用 TextQL 查看查询量最大的域名

    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 
    34 条回复    2019-01-30 21:12:08 +08:00
    Bardon
        1
    Bardon  
       2018-04-08 22:28:03 +08:00
    我一贯的用法,还是拉一个 docker 容器去跑,为了系统版本升级的时候不要出现莫名其妙的问题。
    sammo
        2
    sammo  
       2018-04-08 23:05:17 +08:00 via iPhone
    @Bardon 本机 dns 解析这种事也能放到 docker 里?你试过吗? 如果好使那么求个教程
    jybox
        3
    jybox  
       2018-04-08 23:10:43 +08:00
    @sammo 它本质上是通过 53 端口提供的网络服务呀,跑在 docker 也算是个不错的选择,不过 brew 也很方便
    uuair
        4
    uuair  
       2018-04-08 23:49:02 +08:00
    是不是如果在国内这样做了,所有的 dns 访问都加密了?那么国内的地址,会不会变慢呢。。。
    我们办公室的网络,好像 dns 就挂了,开那啥都不能访问那啥。。。
    Bluecoda
        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
    2b
        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
    Seymer
        7
    Seymer  
       2018-04-09 00:19:56 +08:00
    哇塞,意想不到的是,解决了我在国内使用 Paw 应用连接异常问题,哈哈,非常感谢 :)
    Showfom
        8
    Showfom  
    PRO
       2018-04-09 01:03:59 +08:00   1
    openroc
        9
    openroc  
       2018-04-09 07:38:10 +08:00
    k9982874
        10
    k9982874  
       2018-04-09 08:55:40 +08:00 via iPhone
    站长最近很活跃
    hackerwgf
        11
    hackerwgf  
    PRO
       2018-04-09 09:02:05 +08:00
    我是在阿里云上搭了一个,然后路由器 DNS 连接到它
    123s
        12
    123s  
       2018-04-09 09:30:43 +08:00
    手机上怎么弄?
    wosuopu
        13
    wosuopu  
       2018-04-09 09:47:14 +08:00
    先收藏
    happywowwow
        15
    happywowwow  
       2018-04-09 12:18:04 +08:00
    xtddd     16
    xtddd  
       2018-04-09 16:18:46 +08:00
    @2b dnscrypt-proxy.toml 中 forwarding_rules = 'dnscrypt-forwarding-rules.txt' 文件里这个没有找到,
    happywowwow
        17
    happywowwow  
       2018-04-09 16:31:15 +08:00
    恩 不知道以上的人有没有发现个问题.
    用了这个之后, 如果你的 mac 上安装了 docker, docker 会给容器也配置 127.0.0.1 的 DNS... 然容器的 127 和主机不在一个 ns 下...
    v2register
        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'
    kappa
        19
    kappa  
       2018-04-10 00:10:05 +08:00
    @2b 貌似用这个转换的 rule 列表就没什么必要前置 dnsmasq 了。。
    xtddd
        20
    xtddd  
       2018-04-10 09:26:33 +08:00
    @v2register 在 win 上已经设置完成了,谢谢
    xtddd
        21
    xtddd  
       2018-04-10 09:41:56 +08:00
    @v2register 这个国内地址用国内的 dns,那国外的地址是用哪个 dns 解析?
    thuai
        22
    thuai  
       2018-04-10 10:01:55 +08:00
    公司局域网路由内绑定了私有域名怎么设置才能够访问,Google 了下没有找到相关的东西
    xtddd
        23
    xtddd  
       2018-04-10 20:56:47 +08:00
    @v2register 我在 mac 上用 berw 安装后,设置成 127.0.0.1,上不了网,找不到服务器,这是怎么回事
    v2register
        24
    v2register  
       2018-04-11 20:07:04 +08:00
    @xtddd #21
    默认配置是随机选取
    https://github.com/CNMan/dnscrypt-proxy-config 这里的是用 Cisco OpenDNS 和 CloudFlare
    v2register
        25
    v2register  
       2018-04-11 20:09:41 +08:00
    @xtddd #23 应该是 #17 所说的问题导致的,你试试直接下载 macos 的 bin 运行
    https://github.com/jedisct1/dnscrypt-proxy/releases
    xtddd
        26
    xtddd  
       2018-04-11 20:23:30 +08:00
    @v2register 好的,谢谢。还有一个选项就是用 macos 的 dnsproxy 客户端
    xtddd
        27
    xtddd  
       2018-04-11 21:16:11 +08:00
    @v2register 下了 macos 的 bin 操作成功了,只是重启后,127.0.0.1 会自动改回路由器 dns 地址。得手动再改一下
    v2register
        28
    v2register  
       2018-04-14 10:19:41 +08:00
    @thuai #22 cloaking-rules 配置相关域名的静态 IP,或者 forwarding-rules 配置相关域名用原 DNS 解析
    xtddd
        29
    xtddd  
       2018-04-17 14:56:09 +08:00
    @v2register 你好,dnscrypt-proxy 有必要和 unbound 一起使用吗?
    TheKiller
        30
    TheKiller  
       2018-04-20 06:23:44 +08:00 via iPhone
    Pcap_DNSProxy 了解一下?
    v2register
        31
    v2register  
       2018-04-22 00:50:02 +08:00
    @xtddd #29 v2 不需要 unbound 了
    xtddd
        32
    xtddd  
       2018-04-23 10:58:54 +08:00
    @v2register 恩好的,v2 已经有缓存了
    tf0083
        33
    tf0083  
       2018-05-28 10:57:42 +08:00
    日志文件在 var 目录下根本没有 log 这个目录,需要手工建立吗
    uuair
        34
    uuair  
       2019-01-30 21:12:08 +08:00
    @tf0083 #33 在 /var/log 目录下,不是那个 /usr/local/var
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     905 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 19:15 PVG 03:15 LAX 12:15 JFK 15:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86