不是因为宽带的带宽不够,而是因为 DNS 解析不够快,耽误了你拔剑的速度。
如何加快 DNS 解析?
Mosdns 是一个插件化、模块化的高性能 DNS 转发/解析器,由 IrineSistiana 开发。它的核心原理与传统 DNS 服务器(如 Bind, Unbound)不同,它不直接进行递归解析,而是作为一个智能中间件(Middleware),通过“管道(Pipeline)”模式处理 DNS 请求。
与传统的 DNS 软件(如 Bind, Unbound, Dnsmasq)相比,Mosdns 的设计哲学更偏向于“模块化”和“可编程性”。
在家里的软路由上部署Mosdns ,手机平板电视电脑都指向本地Wifi 软路由的 DNS,网速飞起!
一、准备工作
1. 开启飞牛 OS 的 SSH
在飞牛 OS 桌面 → 系统设置 → SSH → 打开 SSH 功能,记住端口(默认 22)。
2. SSH 登录 RS66
在你的电脑上打开终端(Windows 用 PowerShell / macOS 用终端/SSH Shell 等),输入:
1 | ssh 你的用户名@RS66的IP地址 |
登录后切换 root:
1 | sudo -i |
二、创建 mosdns 目录和配置文件
1. 创建专用目录
1 | mkdir -p /vol1/1000/mosdns |
说明:
/vol1/1000/是飞牛 OS 默认存储路径,如果你改了存储池位置,按实际情况调整。
2. 创建配置文件 config.yaml
1 | cat > config.yaml << 'EOF' |
- 下载域名分流规则文件(可自由更换 GitHub 加速)
1 | # 国内域名列表 |
三、创建 Docker Compose 文件
1 | cat > docker-compose.yml << 'EOF' |
关键说明:network_mode: host 让容器直接使用宿主网络,这样 Mosdns 可以监听 53 端口,无需做端口映射。
四、启动 mosdns
1 | cd /vol1/1000/mosdns |
等待拉取镜像并启动。完成后查看状态:
1 | docker compose ps |
如果看到 udp_server started 和 tcp_server started,说明启动成功。
五、验证 DNS 是否正常工作
在 RS66 本机上测试:
1 | nslookup baidu.com 127.0.0.1 |
如果都能返回 IP,说明 Mosdns 已经在正常工作。
六、把 RS66 设为内网 DNS 服务器(关键一步)
Mosdns 跑起来后,你需要让家里所有设备把 DNS 请求发给 RS66。有两种方式:
方式 A:修改路由器 DHCP 的 DNS(推荐)
登录你的主路由器管理后台,找到 DHCP 设置 → DNS 服务器,填入 RS66 的内网 IP(例如 192.168.1.2)。保存后,所有设备重新获取 IP 后即可生效。
方式 B:手动指定设备 DNS
在电脑/手机的网络设置里,把 DNS 手动改为 RS66 的 IP。
七、常用维护命令
1 | # 查看日志 |
以下是 Mosdns 的核心工作原理详解:
八、 关键处理机制
A. 并发查询与竞速(Fastest Response / Racing)
这是 Mosdns 最著名的特性之一。
- 原理: 针对同一个域名,Mosdns 可以同时向多个上游 DNS(例如:阿里 DNS + Cloudflare + Google)发送查询请求。
- 优选: 哪个上游先返回结果,就立即采用该结果并回复给客户端,同时取消其他未完成的请求。
- 目的: 解决跨境网络延迟问题,确保用户总是获得最快的解析速度。
B. 智能分流(Split DNS)
Mosdns 可以根据规则决定请求的去向,实现“国内域名走国内 DNS,国外域名走加密 DNS”。
- 匹配逻辑: 支持基于域名列表(GFWList, ChinaList)、GeoIP、正则表达式等多种匹配方式。
C. 多级缓存与 ECS
- 内存缓存: 内置高性能内存缓存,遵循 TTL 规范。
- ECS (EDNS Client Subnet): 支持传递客户端子网信息,使 CDN 能够根据用户的真实 IP 而非 DNS 出口 IP 返回最优节点,避免“联通用户被解析到电信 CDN”的问题。
- Cache Dump/Load: 支持重启后加载磁盘缓存,防止服务重启导致缓存失效。
D. 协议转换与加密
Mosdns 充当了协议网关的角色:
- 入站: 支持 UDP/TCP/DoH/DoT。
- 出站: 可以将传统的 UDP 查询转换为 DoH/DoT/DoQ 发送给上游,防止 ISP 劫持和污染。
- HTTP/3 & 0-RTT: 较新版本支持基于 QUIC 的 DoQ 和 HTTP/3,进一步降低握手延迟。
九、为什么选择 MOSDNS?(对比传统方案)
| 特性 | 传统 DNS (Unbound/Bind) | SmartDNS | MOSDNS |
|---|---|---|---|
| 定位 | 全功能递归/权威服务器 | 轻量级测速转发器 | 可编程 DNS 中间件 |
| 灵活性 | 低,配置复杂 | 中,主要专注测速 | 极高,完全自定义流程 |
| 并发竞速 | 不支持/弱 | 核心功能 | 支持,且可配置策略 |
| 脚本/逻辑 | 无 | 有限 | 支持 Lua 脚本(新版)/复杂序列 |
| 性能 | 高 | 高 | 极高 (Go语言+零拷贝优化) |
| 适用场景 | 根区管理、企业内网 | 路由器简单加速 | 复杂网络环境、精细化分流 |
十、 总结
Mosdns 的原理就是 “解耦”与“重组”。它将 DNS 解析过程拆解为缓存、匹配、转发、修改等独立单元,允许用户像搭积木一样根据自己的网络环境组装出最适合的 DNS 处理流程。它特别适合需要抗污染、低延迟、精准分流的高级网络环境。