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

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

  •  1
     
  •   faicker · 220 天前 · 9537 次点击
    这是一个创建于 220 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    @learningman
    推荐两个 chinadns 的替代都比楼主的方便好用
    https://github.com/GangZhuo/CleanDNS
    https://github.com/cherrot/gochinadns
        17
    LazyZhu   198 天前   ♥ 1
    @learningman
    另外两个:
    https://github.com/shawn1m/overture
    https://github.com/sticnarf/yadd

    以上四个都是类似于 chinadns 利用 chnroute 区分国内外解析的且都支持 windows.
        18
    learningman   198 天前
    @LazyZhu 我拿来给 ADGuard 做上游了
    ADGuard 有前端界面实在是太友好了
        19
    faicker   195 天前
    @LazyZhu 看了一下其他的,达不到 greendns 这个效果。其他的只有部分功能。
        20
    morphyhu   190 天前
    @faicker 刚启动了一个,貌似不是很稳定。faicker/dnscrypt-proxy-2:latest 这个不停的重启。
    [email protected] 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
        21
    morphyhu   190 天前
    [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
        22
    faicker   189 天前
    @morphyhu 在 greendns.env 里添加一行 LISTEN=0.0.0.0:53
    然后重新 deploy,
    docker stack rm dnscrypt
    docker stack deploy -c ./dnscrypt.yml dnscrypt
        23
    Kobayashi   127 天前
    @LazyZhu 这个 yadd 不错,IP 分流外加上游转发(支持 TCP 和 TLS ),看来可以替换 ChinaDNS。因为 overture 好像还不支持导入多个配置,准备暂时 dnsmasq+yadd。

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

    另外,楼主这个作品是 forwarding DNS,并不是 recursive DNS。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1030 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 19:19 · PVG 03:19 · LAX 12:19 · JFK 15:19
    ♥ Do have faith in what you're doing.