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

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

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

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

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

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

    以上四个都是类似于 chinadns 利用 chnroute 区分国内外解析的且都支持 windows.
        18
    learningman   50 天前
    @LazyZhu 我拿来给 ADGuard 做上游了
    ADGuard 有前端界面实在是太友好了
        19
    faicker   48 天前
    @LazyZhu 看了一下其他的,达不到 greendns 这个效果。其他的只有部分功能。
        20
    morphyhu   42 天前
    @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
        21
    morphyhu   42 天前
    [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   42 天前
    @morphyhu 在 greendns.env 里添加一行 LISTEN=0.0.0.0:53
    然后重新 deploy,
    docker stack rm dnscrypt
    docker stack deploy -c ./dnscrypt.yml dnscrypt
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3554 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 05:32 · PVG 13:32 · LAX 22:32 · JFK 01:32
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1