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

EasyMosdns 分享简单好用的 DoH 与开源策略供研究使用

  •  1
     
  •   PMkol · 2022-10-07 17:45:37 +08:00 · 3786 次点击
    这是一个创建于 785 天前的主题,其中的信息可能已经有所发展或是发生改变。

    EasyMosdns 项目自发布以来,得到了 V2EX 小伙伴们的一致好评,感谢大家的认可 : D

    项目地址: https://github.com/pmkol/easymosdns

    简化 Mosdns 基本功能使用的辅助脚本,仅需几分钟即可搭建一台支持 ECS 的无污染 DNS 服务器。


    放出这个 DoH 的初衷是为了给开源项目 EasyMosDNS 测试规则,不提供公共 DNS 服务,发现直接使用的小伙伴越来越多,日解析量已经突破千万,所以优化了一下性能,分享全新版本的 DoH ,继续供大家研究测试使用。

    DoH 地址:[前往查看]


    本次更新,做了大量优化与调整:

    • 修复了因 ECS 缓存导致 DNS 解析不准的 Bug
    • 解决了 DNS 泄露国内节点的问题 (仅默认节点不泄露)
    • 更换了 CDN 厂商防止攻击造成宕机
    • 增加了 1 组境内节点规则 CN (即路由器上经常使用的境内 DNS 返回 IP 判断分流的规则)
    • 增加了 6 组境外节点规则 HK/TW/JP/SG/RU/US

    发现很多小伙伴并不知道这个项目同时也在维护 DNS 规则库,同时分享出来,适用于 DNS 分流。

    DNS 规则库地址:[前往查看]


    这个 DoH 有什么不同:

    • 开源策略

    对于安全而言这是最有说服力的。

    举例说一条大家比较关注的,如何平衡 ECS 信息与隐私保护:源码中可见对 ECS 信息做了模糊处理,例如你的 IP 为 1.3.5.7 ,处理后的 ECS 信息为 1.3.5.0/24 ,对于部分境外域名,强制更改 ECS 信息为与真实 IP 无关联但不会影响解析效果的数值。

    • 加密隧道

    严格来讲,国内无论用 UDP/TCP/DoT/DoH/DoQ 哪种方式,直接去查询海外 DNS 都是不可靠的,还可能不定期出现阻断,因为这些访问方式都有明显的特征可以识别,当然如果没有多大访问量又不在意的话,也没什么大问题。

    通过境外服务器查询海外域名才是可靠的,但境外查询的结果又如何传递国内,仅在境外服务器搭建 DNS 依旧会出现上述的问题,所以需要自建加密隧道,与远程服务器加密通信完成 DNS 的查询。其中对线路与加密方案的选择,是有少许技术含量的,否则访问量稍大就会出现 TCP 阻断。这也是我唯一没有公开的自研方案。

    普通用户只需要了解这个 DoH 是在境外服务器查询的海外域名的即可,由于提供 DoH 的服务器在境内,查询速度有质的提升,可以通过以下两个网站,分辨检测境内与境外 DNS 的分流情况。

    [境内] https://nstool.netease.com/

    [境外] https://browserleaks.com/dns


    这里做个科普:

    很多代理工具默认内置了海外 DNS ,开启代理时海外 DNS 是通过远程代理服务器访问的,所以普通用户才会对 DNS 这里的影响无感,上文提到的加密隧道也类似这个原理,只是要做远超过客户端请求量的技术改进。

    如果代理使用的是白名单模式,最优的 DNS 选择方案,就是本地 DNS 使用 DNSPOD 或 AliDNS 这类大厂的 EDNS ,远程 DNS 使用代理工具内置或 Google 、OpenDNS 、CloudFlare 等几家知名的海外 DNS ,乱折腾只是浪费时间。

    但如果代理使用的是 GFW 黑名单模式,那么就会出现污染问题。这是因为黑名单与污染名单里的域名并不一致,当被污染的域名不在黑名单时,该域名就会返回污染结果。

    所以对于无污染 DNS 的正确用法,应当是在本地名单中的域名,使用 DNSPOD 或 AliDNS 这类大厂的 EDNS ,其它全部使用无污染 DNS 进行查询。即实现代理走 GFW 名单节约流量,DNS 走白名单准确解析的效果。当然一些懒人会选择直接全部使用无污染 DNS ,但请确保这个 DNS 服务器在国内且延迟不高,不然真的会很慢。


    如果你是普通用户:

    我已将常见问题写入介绍页,基本能回答 90%以上的问题,使用问题可以加介绍页里的电报群,与群里的小伙伴们讨论,毕竟个人精力实在有限,没法在线回答问题。

    如果你是自建 DNS 用户:

    首先感谢各位免费无污染 DNS 搭建者们的认可,我不抵制私人搭建的公共 DNS 将这个 DoH 作为上游使用,还会很高兴帮助到更多人,事实上目前已有约 40%的查询量来自多家私人搭建的 DNS 。

    只要求一点,做好缓存与 QPS 限制,减少对我 DoH 的请求量。因为之前发生过攻击事件,经查证我的服务器并未直接受到攻击,全部攻击 IP 均来自一些私人搭建的 DNS 服务器,当这些 DNS 被攻击后,攻击流量同时也转发到了我的服务器,最终形成连锁攻击导致我的服务器也宕机了几小时。

    目前的处理策略,对于因没做缓存造成查询量明显超过普通用户的下游 DNS ,会转发海外处理,减少国内服务器的压力,对未做 QPS 限制且对服务器造成业务影响的下游 DNS ,会自动封禁。当然我更建议使用我已经开源的规则,在本地服务器上做分流,当出现超时后再请求我的 DoH 体验会更佳。

    最后想说的:

    维护不易,如果可以,给 EasyMosDNS 开源项目点颗星吧!

    4 条回复    2022-11-28 22:03:35 +08:00
    raycheung
        1
    raycheung  
       2022-10-09 09:33:12 +08:00
    Star 致敬🖖
    PMkol
        2
    PMkol  
    OP
       2022-10-12 00:19:29 +08:00
    增加了一组无 CDN 直连的 DoT 与 DoH

    其中 DoH 支持 http2 与 http3 ,方便那些客户端无法使用 http1.1 连接 DoH 的小伙伴测试

    可以进介绍页里的 DNS 交流群获取地址
    martianden
        3
    martianden  
       2022-11-26 17:24:32 +08:00
    请问可否同时把 3 个地址填入 dns 软件,会不稳定吗
    PMkol
        4
    PMkol  
    OP
       2022-11-28 22:03:35 +08:00   ❤️ 1
    @martianden 如果是同一家的,没有意义,如果是多家,一般会同时请求,然后选择最快的一个,类似 ADGH 的客户端,还可以改多 DNS 的选择策略
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2561 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 03:50 · PVG 11:50 · LAX 19:50 · JFK 22:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.