国内最佳 dns resolver 解决方案之一 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
faicker
V2EX    DNS

国内最佳 dns resolver 解决方案之一

  •  1
     
  •   faicker 2019-03-09 13:59:47 +08:00 23275 次点击
    这是一个创建于 2411 天前的主题,其中的信息可能已经有所发展或是发生改变。

    greendns

    项目地址:greendns

    项目介绍

    一个 python 写的 dns resolver,上游是现有的公共 dns resolver,不依赖 V.P.N。

    • 解析结果无污染并且 cdn 友好
    • 支持多上游,防止单点

    原理和使用方法可以打开 github 项目页面看,应该比现有的 dns 方案都要好。

    使用

    最佳使用方式是用 docker stack。

    • 国外解析无污染、高可用,交给 dnscrypt-proxy
    • 国内解析近距离、高可用,交给 pdnsd

    再提供一个 docker stack 配置,greendns-stack

    个人在 Linux 下已经用了一段时间了。

    最后,欢迎讨论 && Star。

    第 1 条附言    2019-03-23 22:49:20 +08:00
    如果用国外的 DNS 服务器,解析出来的 IP 不是最佳(包括线路和距离)的。
    greendns 对于非污染的域名,还是用的国内公共 DNS 或者运营商 DNS (可配)的解析结果。
    这个就是 CDN 友好。
    26 条回复    2020-02-14 14:17:57 +08:00
    hinate
        1
    hinate  
       2019-03-09 14:02:06 +08:00 via iPhone
    晚上部署试一下
    23f0baf3
        2
    23f0baf3  
       2019-03-10 17:17:08 +08:00
    https://github.com/pymumu/smartdns
    这个也可以考虑,支持平台多包括路由器,协议多包括 TCP,UDP,DOT
    exkernel
        3
    exkernel  
       2019-03-10 17:33:16 +08:00
    @23f0baf3 这货不开源啊 不敢用
    faicker
        4
    faicker  
    OP
       2019-03-11 13:08:34 +08:00
    @hinate 用得怎么样
    taobibi
        5
    taobibi  
       2019-03-12 13:40:03 +08:00
    感谢楼主,二楼的我也打算测试一下,公司已经有一台闲置服务器部署了 dnsmasq,才有 host 列表国内+5353 端口 open dns 的方式一直很不理想,这个打算试试效果
    taobibi
        6
    taobibi  
       2019-03-12 13:45:29 +08:00
    有两个问题,作为 dnsmasq 上游的时候,可以在一个服务器上面同时跑么?
    另外如果独立使用的话,是不是需要卸载 dnsmasq 避免端口占用。
    目前单独的这台 dns 服务器大概需要维持一千多个终端的 dns 解析
    ylx
        7
    ylx  
       2019-03-12 17:40:38 +08:00
    docker 下面不知道怎么玩 lede
    faicker
        8
    faicker  
    OP
       2019-03-13 13:00:56 +08:00
    @taobibi 可以作为 dnsmasq 的上游,改下 greendns 的监听端口,比如 127.0.0.1:54。再在 dnsmasq 里配置上游是 127.0.0.1:54。
    greendns 独立对外提供服务的话,要把监听改为 0.0.0.0:53。要把 dnsmasq 停掉。
    faicker
        9
    faicker  
    OP
       2019-03-13 13:03:06 +08:00
    @ylx 现在这个是 python 版本的,对于 lede 可能占用空间过大(需要 python 环境)。。
    等有时间写个 golang 版本,就能解决了。
    gitopen
        10
    gitopen  
       2019-03-20 09:21:02 +08:00
    正在 macOS 上用 CoreDNS。。。
    learningman
        11
    learningman  
       2019-03-21 18:52:44 +08:00
    golang 的已经有了,https://github.com/AdguardTeam/AdGuardHome
    这玩意儿甚至有一个中文的 Web 前端,巨好用
    faicker
        12
    faicker  
    OP
       2019-03-23 22:45:13 +08:00
    @learningman 不一样。
    adguard 是去 ad,支持 DoH/DoT/DNSCrypt,可以做到无污染。
    greendns 还能做到解析出来的 IP 对于本地访问是最佳的。举个例子,访问国内网站时,是用的国内的公共 DNS 或者运营商的 DNS,这样解析出来的 IP 是最近且访问速度最快的。
    LazyZhu
        13
    LazyZhu  
       2019-03-25 22:35:56 +08:00
    python 写的便携性和性能肯定不如 golang,overtrue 比你好用的多吧

    https://github.com/shawn1m/overture
    faicker
        14
    faicker  
    OP
       2019-03-26 13:10:33 +08:00
    @LazyZhu 非也,我这个不是 dns 服务器,overture 跟 pdnsd,dnsmasq 类似,可以作为 greendns 的后端。
    用我这个,既解决了 dns 污染的问题,又解决了 IP 最佳的问题。
    learningman
        15
    learningman  
       2019-03-30 11:25:18 +08:00
    部署了一下
    我发现这个如果想在 Windows 上运行需要很多修改
    比如说 setup.py 的 data 路径
    比如说默认启动时的 route 路径
    问题主要出现在不同的文件系统格式和环境变量上,希望添加兼容
    LazyZhu
        16
    LazyZhu  
       2019-03-31 16:24:53 +08:00   2
    @faicker 解决 IP 最佳的问题 是 DNSChooser/smartdns(通过对解析到的 ip 逐一连接测延迟,选取最佳), 你的最多像 chinadns 那样用 chnroute 区分国内外.

    @learningman
    推荐两个 chinadns 的替代都比楼主的方便好用
    https://github.com/GangZhuo/CleanDNS
    https://github.com/cherrot/gochinadns
    LazyZhu
        17
    LazyZhu  
       2019-03-31 16:38:41 +08:00   1
    @learningman
    另外两个:
    https://github.com/shawn1m/overture
    https://github.com/sticnarf/yadd

    以上四个都是类似于 chinadns 利用 chnroute 区分国内外解析的且都支持 windows.
    learningman
        18
    learningman  
       2019-03-31 22:50:27 +08:00
    @LazyZhu 我拿来给 ADGuard 做上游了
    ADGuard 有前端界面实在是太友好了
    faicker
        19
    faicker  
    OP
       2019-04-03 13:25:09 +08:00
    @LazyZhu 看了一下其他的,达不到 greendns 这个效果。其他的只有部分功能。
    morphyhu
        20
    morphyhu  
       2019-04-08 16:29:34 +08:00
    @faicker 刚启动了一个,貌似不是很稳定。faicker/dnscrypt-proxy-2:latest 这个不停的重启。
    root@localhost greendns-stack]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    063de39cbf81 faicker/dnscrypt-proxy-2:latest "dnscrypt-proxy -con …" 8 seconds ago Up 2 seconds dnscrypt_dnscrypt-proxy-2.1.1nan8qou1vdfr1bsmyic1xben
    c2f0369c4a9c faicker/greendns:latest "./entrypoint.sh" 9 minutes ago Up 9 minutes dnscrypt_greendns.1.uktbjcz69gxyi2tcdi4axlfoo
    6377dfad7305 vimagick/pdnsd:latest "pdnsd" 9 minutes ago Up 9 minutes dnscrypt_pdnsd.1.hwwfz77r41kd29lyz9v759tq2
    morphyhu
        21
    morphyhu  
       2019-04-08 16:38:11 +08:00
    [2019-04-08 08:29:54] [INFO] Loading source information from URL [https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md]
    [2019-04-08 08:29:56] [INFO] Loading source information from URL [https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md.minisig]
    [2019-04-08 08:29:58] [INFO] Loading from [https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md] failed
    [2019-04-08 08:29:58] [INFO] Loading source information from URL [https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md]
    [2019-04-08 08:30:00] [INFO] Loading source information from URL [https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md.minisig]
    [2019-04-08 08:30:02] [INFO] Loading from [https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md] failed
    [2019-04-08 08:30:02] [CRITICAL] Unable to use source [public-resolvers]: [read udp 192.168.216.130:50367->223.5.5.5:53: i/o timeout]
    [2019-04-08 08:30:02] [FATAL] No servers configured

    貌似是公司屏蔽了第三方 DNS 导致。

    有个新问题 监听地址如何改为 0.0.0.0
    udp 0 0 127.0.0.1:53 0.0.0.0:* 4771/python
    faicker
        22
    faicker  
    OP
       2019-04-09 13:21:51 +08:00
    @morphyhu 在 greendns.env 里添加一行 LISTEN=0.0.0.0:53
    然后重新 deploy,
    docker stack rm dnscrypt
    docker stack deploy -c ./dnscrypt.yml dnscrypt
    Kobayashi
        23
    Kobayashi  
       2019-06-10 17:17:15 +08:00
    @LazyZhu 这个 yadd 不错,IP 分流外加上游转发(支持 TCP 和 TLS ),看来可以替换 ChinaDNS。因为 overture 好像还不支持导入多个配置,准备暂时 dnsmasq+yadd。

    Smartdns 对于解析结果测速不错,但是防不了污染的。它所采取的方案是 IP 黑名单,这个根本不靠谱。另外一个方案,检查结果的 edns option 信息,也只对境外 DNS 返回结果有效。目前有效的防污染方案还是 IP 分流对结果过滤,即要求境内 DNS 返回结果为境内 IP,境外 DNS 返回结果为境外 IP。
    Kobayashi
        24
    Kobayashi  
       2019-06-10 17:35:24 +08:00
    从功能上看,greendns 好像和 overture, yadd 等并没有太大区别,CDN 友好就是根据 IP 分流选取结果吧。楼上 LazyZhu 举出的几个都带有 IP 分流查询,毕竟大家都是借鉴 ChinaDNS。有些还内置了 TCP 和 TLS 转发支持,也就是内置了防污染查询策略。

    另外,楼主这个作品是 forwarding DNS,并不是 recursive DNS。
    NyaMisty
        25
    NyaMisty  
       2020-02-14 14:10:06 +08:00
    我想问问这个 greendns 到底原理是什么。顺便 github 上面写的是什么玩意,矩阵既然都标出来 abcd 了我倒是想知道下面说的 ac ab bc bd 都是什么东西。

    Ref: Github 上 readme 是这么写的
    ```
    First filter poisoned ip with blocked iplist with -b argument.
    Second,
    | A record is local | A record is foreign
    local and poisoned dns server | a | b
    unpoisoned dns server | c | d

    From the matrix, we get the result as follows,
    ac: use local dns server result
    ad: use local dns server result
    bc: impossible. use unpoisoned dns server result
    bd: use unpoisoned dns server result

    Conclusion,
    Using local dns server result if returned A record is local.
    Using unpoisoned dns server result if returned A record is Foreign.
    ```
    NyaMisty
        26
    NyaMisty  
       2020-02-14 14:17:57 +08:00
    @NyaMisty 没事了是我 zz 了)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3352 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 12:03 PVG 20:03 LAX 05:03 JFK 08:03
    Do have faith in what you're doing.
    ubao 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