Huanglei

I’m PADI No.1409AZ6094

0%

Mosdns

★ 钱难挣屎难吃,回家上网还慢?
不是因为宽带的带宽不够,而是因为 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
2
ssh 你的用户名@RS66的IP地址
# 示例:ssh admin@192.168.1.2

登录后切换 root:

1
2
sudo -i
# 输入密码(和登录密码一样)

二、创建 mosdns 目录和配置文件

1. 创建专用目录

1
2
mkdir -p /vol1/1000/mosdns
cd /vol1/1000/mosdns

说明:/vol1/1000/ 是飞牛 OS 默认存储路径,如果你改了存储池位置,按实际情况调整。

2. 创建配置文件 config.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
cat > config.yaml << 'EOF'

log:
level: info

plugins:
# 国内域名列表
- tag: geosite_cn
type: domain_set
args:
files:
- /etc/mosdns/direct-list.txt

# 国内 IP 段
- tag: geoip_cn
type: ip_set
args:
files:
- /etc/mosdns/CN-ip-cidr.txt

# 缓存
- tag: cache
type: cache
args:
size: 4096
lazy_cache_ttl: 86400

# 国内 DNS(IPv4 + IPv6 双栈,全部用 IP)
- tag: forward_local
type: forward
args:
concurrent: 2
upstreams:
- addr: udp://223.5.5.5
- addr: udp://2400:3200::1
- addr: https://223.5.5.5/dns-query
- addr: https://2400:3200::1/dns-query

# 海外 DNS(Cloudflare IPv6 优先 + Google IPv6)
- tag: forward_remote
type: forward
args:
concurrent: 2
upstreams:
# UDP 兜底,DoH 不通时也能解析
- addr: udp://1.1.1.1
- addr: udp://2606:4700:4700::1111
- addr: udp://8.8.8.8
- addr: udp://2001:4860:4860::8888
# DoH(IPv4 + IPv6)
- addr: https://1.1.1.1/dns-query
- addr: https://[2606:4700:4700::1111]/dns-query
- addr: https://8.8.8.8/dns-query
- addr: https://[2001:4860:4860::8888]/dns-query

# 国内查询序列
- tag: query_cn
type: sequence
args:
- exec: $forward_local
- matches: has_resp
exec: accept

# 海外查询序列:IPv6 优先
- tag: query_remote
type: sequence
args:
- exec: prefer_ipv6
- exec: $forward_remote
- exec: accept

# 主逻辑
- tag: main_sequence
type: sequence
args:
- exec: $cache
- matches: has_resp
exec: accept
- matches: qname $geosite_cn
exec: $query_cn
- exec: $query_remote

# 监听 IPv4 + IPv6
- tag: udp_server
type: udp_server
args:
entry: main_sequence
listen: "[::]:53"

- tag: tcp_server
type: tcp_server
args:
entry: main_sequence
listen: "[::]:53"

EOF
  1. 下载域名分流规则文件(可自由更换 GitHub 加速)
1
2
3
4
5
# 国内域名列表
curl -L https://g.blfrp.cn/https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/direct-list.txt -o direct-list.txt

# 国内 IP 段
curl -L https://g.blfrp.cn/https://raw.githubusercontent.com/Hackl0us/GeoIP2-CN/release/CN-ip-cidr.txt -o CN-ip-cidr.txt

三、创建 Docker Compose 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat > docker-compose.yml << 'EOF'
version: "3.8"

services:
mosdns:
image: irinesistiana/mosdns:latest
container_name: mosdns
restart: always
network_mode: host
volumes:
- ./config.yaml:/etc/mosdns/config.yaml
- ./direct-list.txt:/etc/mosdns/direct-list.txt
- ./CN-ip-cidr.txt:/etc/mosdns/CN-ip-cidr.txt
environment:
- TZ=Asia/Shanghai

EOF

关键说明:network_mode: host 让容器直接使用宿主网络,这样 Mosdns 可以监听 53 端口,无需做端口映射。

四、启动 mosdns

1
2
cd /vol1/1000/mosdns
docker compose up -d

等待拉取镜像并启动。完成后查看状态:

1
2
docker compose ps
docker compose logs -f

如果看到 udp_server startedtcp_server started,说明启动成功。

五、验证 DNS 是否正常工作

在 RS66 本机上测试:

1
2
nslookup baidu.com 127.0.0.1
nslookup google.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
2
3
4
5
6
7
8
9
10
11
# 查看日志
docker compose logs -f

# 重启 mosdns
docker compose restart

# 停止
docker compose down

# 修改配置后重载(不需要重启容器)
docker exec -it mosdns mosdns reload

以下是 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 处理流程。它特别适合需要抗污染、低延迟、精准分流的高级网络环境。

-------------本文结束 感谢阅读-------------
  • 本文作者: HuangLei
  • 本文链接: https://maxlay.github.io/2026/07/25/mosdns/
  • 版权声明: 本博客所有原创文章(除文末特别标注转载或特殊声明外),均采用知识共享署名。非商业性使用 ,相同方式共享 4.0 国际许可协议 BY-NC-SA 进行许可。
    您可以:自由地分享(复制、分发、传播)和演绎(修改、改编、创作衍生作品)。
    须遵守署名(BY):必须给出适当的信用,提供指向本许可协议的链接,并指出是否进行了修改。转载请注明出处及原文链接。禁止整站搬运、禁止去除作者信息、禁止用于自媒体洗稿盈利。
    非商业性使用(NC):您不得将本作品用于商业目的。
    相同方式共享(SA):如果您再混合、转换或者基于本作品进行创作,您必须基于与原作品相同的许可协议分发您的贡献。

    商业授权:如需商业用途(包括但不限于出版、付费课程、企业内训等),请事先联系作者获取书面授权。任何形式的商用、二次分发、改编后商用均需授权。本网站所有技术分享严格遵守《中华人民共和国网络安全法》《数据安全法》《个人信息保护法》及相关法律法规。
    用途限制:站内涉及渗透测试、漏洞分析、逆向工程、脚本工具等技术内容,仅限用于合法的教育、学术研究及获得明确授权的安全测试场景。
    禁止行为:任何个人或组织不得利用本站提供的技术信息、代码或工具从事危害网络安全、侵入他人系统、干扰网络正常功能及防护措施等非法活动。
    责任自负:使用者应严格遵守法律法规,因滥用本站内容而导致的任何法律纠纷、经济损失或刑事责任,均由使用者自行承担,与本站及作者无关。作者不对任何因使用本站内容而产生的后果负责。

    技术具有时效性,本站部分内容可能随时间推移而过时或不准确。作者尽力保证内容的正确性,但不对其准确性、完整性、适用性或及时性做任何明示或暗示的保证。读者在参考本站内容进行实际操作(如修改配置、运行代码)前,请务必在测试环境中验证,并做好数据备份。尊重知识产权,保护网络安全,本站不提供任何系统、网站、设备的渗透目标,所有技术仅用于学习与防护。若您认为本站内容侵犯了您的合法权益,或发现本站存在违法违规内容,请通过左侧电子邮箱联系作者,作者将尽快核实并处理。

    本声明自2012年5月5日起生效