V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  DNS

在 macOS 上启用 DNSCrypt-Proxy

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

    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  
       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  
       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   ·   实用小工具   ·   1712 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:40 · PVG 00:40 · LAX 08:40 · JFK 11:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.