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

EasyMosdns 让 mosdns 开箱即用 (附 DoH)

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

    EasyMosdns 开源的 EDNS 方案

    看到论坛里有不少愿意折腾 Mosdns 的网友,所以把这个项目转过来分享给大家,目前已经被 Mosdns 官方 wiki 收录,我记得 mosdns 的作者也在 V2EX ,感谢认可 : )

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

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

    • 无需重新编译,适配原生的 Mosdns 4.1+
    • 内置中国大陆地区的优化规则,满足 DNS 日常使用场景,开箱即用
    • 常用功能通过脚本控制,大幅度降低使用门槛
    • 使用 shell 语言编写,对 Linux 系统具有较好的兼容性,CentOS/RedHat 7+已通过测试

    • 基础功能包括:
    • 支持 EDNS 解析,根据域名与中国大陆 IP 列表智能分流,查询结果无污染
    • 污染列表与自定义列表中的域名,请求上游 DNS 时自动替换附带的用户 IP 子网信息,保护隐私
    • 强化 Hosts 功能,域名支持多个 IP ,支持 IPv6
    • 支持自定义 ECS ,强制域名附带中国大陆 /台湾地区的 ECS 解析
    • DNS 缓存时间优化,自动更新缓存,支持 Redis 持久化存储,可根据场景切换缓存规则
    • 轻度过滤恶意网址,可通过白名单自定义过滤规则
    • 屏蔽 TYPE65 与非中国大陆地区的 IPv6 请求,自动保留纯 IPv6 域名的请求,以获取更好的网络体验
    • 支持规则自动更新,提供直连 /CDN/Socks5 三种下载更新规则的方式
    • 支持上游节点故障时自动转移,优化 DNS 服务的稳定性
    • 脚本功能包括:
    • 切换本地上游 DNS
    • 切换远程上游 DNS
    • 切换缓存策略
    • 手动 /自动更新规则
    • 配置 Socks5 代理
    • 切换 ECS 模式
    • 开启 /关闭 恶意广告过滤
    • 开启 /关闭 IPv6 屏蔽

    分享一下我的 DoH 服务器数据

    日访问人数 1000+ 日处理请求 200w+ Intel Xeon Processor 系列的单核 2.5G 主频 CPU mosdns + nginx +redis 的 CPU 峰值基本不会超过 5% 比我早年多个 DNS 程序组合的方案降低了至少一半的负载压力

    我写了一篇评测与搭建教程,感兴趣的可以 前往查看


    最后附上自建 DoH 地址 前往获取

    方便大家研究对比使用,对稳定性不做承诺,虽然已经从 2019 年运行到现在了...

    24 条回复    2023-11-01 18:54:33 +08:00
    PMkol
        1
    PMkol  
    OP
       2022-07-06 01:09:06 +08:00
    唯一不足的是,部分域名的 NS 服务器不看 ECS 只看请求来源 IP ,例如知名的 akamai ,这会导致如果 DNS 服务器距离访问者距离较远,会解析到较远的 CDN 节点。理论上除非全世界建节点,否则无解,不知道有没有更好的办法,还请大神们指点。
    Bingchunmoli
        2
    Bingchunmoli  
       2022-07-06 02:35:15 +08:00 via Android
    不知道和其他无污染的 dns 有什么优缺点,没有听说过 mosdns 是我孤陋寡闻了,希望有个对比有个替换的念头(支持 edns 一般是国内走 dnspod ,其他似乎就没了)
    PMkol
        3
    PMkol  
    OP
       2022-07-06 03:30:48 +08:00
    @Bingchunmoli
    首先 mosdns 是开源的 DNS 转发器,不是无污染的 DNS 服务器。

    与其他 DNS 转发器相比,逻辑处理的细节差距很明显,mosdns 是插件式的,逻辑可以定制。我目前只看见 coredns 使用了这种插件模式,可惜不支持 ip 分流,并不适合中国大陆地区。

    另外 mosdns 的缓存机制有自动更新功能,并不是通过强制修改 ttl 来实现的,这可以在保证数据新鲜度的前提下,大幅度提高缓存的命中率,即 DNS 解析域名的响应速度会快很多。

    再回答与其它无污染 DNS 的差异问题,拿我做的这个测试用的 DOH 为例,可以用以下两种情况与你现在使用的纯净 DNS 做下对比:

    1 、不开代理,连我的 doh 访问 github 测试下速度;

    区别是,我的 DNS 会将 github 指向日本的节点,而一般自建的无污染 DNS 会指向新加坡的节点,而这个节点经常会炸

    2 、可以试下 2311.host 这个域名,用其它无污染的 DNS 和国内的 DNS 做下对比,几乎所有的自建无污染 DNS 解析结果都为空,但如果使用国内有污染的 DNS 是可以解析出结果的;

    原因是这个域名属于特殊状态,禁止了国外 DNS 解析;

    自建 DNS 大部分只能通过修改 hosts 或 domain 名单,来强制解决这些问题,但这种方式并不可信,例如 github 日本节点换 IP 了,修改 hosts 肯定不靠谱,再例如第二种情况的域名,人工收集也不及时。

    而使用这种插件式的 DNS 程序,完全是通过逻辑规则解决的。
    imoo
        4
    imoo  
       2022-07-06 09:59:35 +08:00   ❤️ 1
    能出个 openwrt 的插件就好了
    laincat
        5
    laincat  
       2022-07-06 10:24:08 +08:00 via iPhone
    @imoo 早就有,不过还是需要像 OP ,这样的辅助脚本来完成一个适合自己用的配置文件。
    laincat
        6
    laincat  
       2022-07-06 10:29:02 +08:00 via iPhone
    其实目前也主要是:路由器上架,内网小主机(直接或容器),然后公网(直接或容器)

    配置文件其实也算挺通用的。根据 OP 的改改小部分就能爽了。
    Bingchunmoli
        7
    Bingchunmoli  
       2022-07-06 17:31:23 +08:00
    @PMkol 国内外分流的通常策略就是海外为准,或者国内解析为 facebook 等已知污染 IP 然后使用海外,或者域名等规则,2133.host 属于少数情况,如何保证该域名不是污染的解析的呢,逻辑规则如何判定,而且目前是否有人维护。 国内直连 github 可以使用反向代理和 hosts ,最优办法依然是 代理,目前是 clash 会解析 198.18.0.0,前置加入 ad home 去广告,而且因为 windows 强制 53 端口,我是无污染选择 DOH ,国内走 53 的, 目前远程 DNS 主要使用 https://www.v2ex.com/t/832145 痛点就是 dns 层层解析的问题
    PMkol
        8
    PMkol  
    OP
       2022-07-06 18:18:44 +08:00
    @Bingchunmoli
    规则方面,源码里已经写的很清楚了,建议你自己接入尝试下效果,而且我更倾向在内网自建,所以我发的不光是 DOH 服务器地址,更多是让你可以随时在家里自己部署 DNS 的脚本

    维护方面,这个 DNS 本身就是我自己在用的,之前也就几十个朋友在用,觉得服务器闲置大量资源有点浪费了,所以就做了个 DOH ,我的评测链接里有数据截图,稳定性自己判断,所以这个 DOH 完全就是我自己在用的东西,并不是用来做公共 DNS 引流其他业务的,没有商业目的
    xuesumin
        9
    xuesumin  
       2022-07-06 19:22:06 +08:00 via iPhone
    @PMkol 请教一下,在家虚拟机部署一个这个后,如何和 openwrt 配合使用,尤其是 passwall 翻墙如何设置
    PMkol
        10
    PMkol  
    OP
       2022-07-06 22:20:51 +08:00
    @xuesumin 我家里的是 padavan ,openwrt 应该类似,和你说下思路

    首先虚拟机一定保证 24 小时在线,不然使用起来会很不方便,而且要桥接网卡,让内网能通过 IP 访问到

    然后 openwrt 里,一般都有 smartdns 一类的功能,不同版本的设置可能不一样,把国内国外的 DNS 都指向到你自己这台虚拟机上,国内分流建议你再加一条本地的 DNS ,防止虚拟机挂掉网直接崩了
    xuesumin
        11
    xuesumin  
       2022-07-06 22:43:07 +08:00 via iPhone
    @PMkol 好的,谢谢!我试一试
    xuesumin
        12
    xuesumin  
       2022-07-06 22:47:44 +08:00 via iPhone
    @PMkol 还有一个问题,如果直接使用您现成的 DOH ,例如我是南方电信,您 DOH 是北方联通,这样效果就削弱很多?
    PMkol
        13
    PMkol  
    OP
       2022-07-06 22:57:57 +08:00
    @xuesumin 建议你只用我的 DOH 解析海外网站,速度据南方用户反馈还可以,国内网站建议还是直接用大厂的 DNS 或者本地 DNS ,效果都一样,但我的服务器在北方,再过一道 CDN 会有一些延迟,虽然基本感觉不到
    xuesumin
        14
    xuesumin  
       2022-07-06 23:02:41 +08:00 via iPhone
    @PMkol 好的👌🏻
    xuesumin
        15
    xuesumin  
       2022-07-07 06:55:43 +08:00
    @PMkol 如果不是外网 VPS 的话,是不是需要关闭 ECS?
    Bunnyranch
        16
    Bunnyranch  
       2022-07-07 11:06:55 +08:00
    非常有用! 我只会改 3.x 版本的配置文件,到 4.x 之后一直用不好了.
    自己一改动 4.x 版本的 ttl/lazy cache 这些设置就跑不起来...还一直停在 3.x 版本呢
    PMkol
        17
    PMkol  
    OP
       2022-07-07 13:04:23 +08:00
    @xuesumin 是的,必须关闭
    xuesumin
        18
    xuesumin  
       2022-07-10 16:35:11 +08:00
    @PMkol 用了几天,感觉不错!谢谢!请教一下,如果将来 MOSDNS 更新了或者您更新了,我该如何更新 DNS 服务器虚拟机?
    PMkol
        19
    PMkol  
    OP
       2022-07-10 23:13:50 +08:00
    @xuesumin 关于 easymosdns ,我已经更新 3 个版本了,每个版本之间,只需要覆盖就可以完成升级。如果 mosdns 产生了像 v3-v4 这样要改动配置文件格式的升级,那我的脚本也就不能用了。
    关于 mosdns ,你直接关闭程序,覆盖原有二进制文件就行了。
    HalloCQ
        20
    HalloCQ  
       2022-07-26 11:48:13 +08:00
    mosdns 的 doh 支持不完善,我看 issues 有人提过此类问题.
    我发现 doh 有问题是我在爱快上使用 mosdns 的 doh,会不能工作,而使用 adguardhome 的 doh 可以正常使用
    PMkol
        21
    PMkol  
    OP
       2022-07-26 23:11:57 +08:00
    @HalloCQ 去 github 上向 mosdns 作者反馈下,目前我对外开放的那个 DoH 的用户反馈,因为不支持 HTTP1.0 ,所以一些客户端用不了
    hoor
        22
    hoor  
       2022-08-06 16:12:34 +08:00
    已经在 vps 部署了一下,没开 doh ,测试一下,效果还是比较明显,之前用双 adguard home ,现在一起用,还是比较方便,按照步骤来,自用完全没有问题
    nicai
        23
    nicai  
       160 天前
    @PMkol mosdns 已经升级到 v5 了,性能上好像提升不少。请问 ecs dns 项目有否更新计划?
    PMkol
        24
    PMkol  
    OP
       148 天前
    @nicai V5 只适合本地部署场景,且很多功能被阉割,所以不做支持,性能上几乎没有差异
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5631 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 06:07 · PVG 14:07 · LAX 23:07 · JFK 02:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.