6.9 KiB
6.9 KiB
YLTX-DNS 快速参考卡
二次开发核心功能快速查阅
🎯 核心亮点
┌─────────────────────────────────────────────────────┐
│ 🛡️ 智能防污染 │ 🔧 自动排序 │ 🖥️ Web界面 │
│ │
│ 先查国内DNS │ 任意配置顺序 │ 零YAML编写 │
│ 检测污染IP │ 自动调整加载 │ 表单化操作 │
│ 自动切换国外 │ 循环依赖检测 │ 可视化管理 │
└─────────────────────────────────────────────────────┘
⚡ 快速开始
编译 (3步)
cd web-ui && npm install && npm run build && cd ..
go build -ldflags="-s -w" -o mosdns .
./mosdns -c config.yaml
访问
Web: http://localhost:5555
DNS: 53, 5353
📁 核心文件
| 文件 | 功能 | 行数 |
|---|---|---|
pkg/utils/toposort.go |
拓扑排序 | 145 |
coremain/config_validator.go |
配置验证 | 293 |
coremain/config_builder.go |
配置生成 | 429 |
plugin/executable/smart_fallback/ |
智能防污染 | 270 |
coremain/rule_handlers.go |
API | 639 |
web-ui/ |
Vue界面 | 2000+ |
🔌 主要API
GET /api/server-info # 系统状态
GET /api/stats # 查询统计
GET /api/rules # 规则列表
GET /api/rules/{name} # 规则详情
POST /api/rules # 添加规则
PUT /api/rules/{name} # 更新规则
DELETE /api/rules/{name} # 删除规则
🎨 添加规则示例
Web界面 (推荐)
1. 访问 http://localhost:5555
2. 点击「域名路由规则」→「添加规则」
3. 填写表单:
- 规则名: openai
- 域名文件: /data/mikrotik/openai.txt
- DNS策略: 智能防污染
- MikroTik: 启用
4. 保存 → 重启服务
API调用
curl -X POST http://localhost:5541/api/rules \
-H "Content-Type: application/json" \
-d '{
"name": "openai",
"domain_file": "/data/mikrotik/openai.txt",
"dns_strategy": "smart-fallback",
"enable_mikrotik": true,
"mikrotik_config": {
"host": "192.168.1.1",
"port": 8728,
"username": "admin",
"password": "123456",
"address_list": "openai"
}
}'
🛡️ 智能防污染配置
- tag: smart_fallback_handler
type: smart_fallback
args:
primary: $china-dns # 国内DNS
secondary: $overseas-dns # 国际DNS
china_ip:
- "/data/chn_ip.txt" # CN地址表
timeout: 2000 # 2秒超时
always_standby: false # 顺序查询
verbose: true # 详细日志
📊 性能数据
国内域名: 20-30ms
国外域名: 30-50ms (无污染)
80-120ms (有污染)
缓存命中: <5ms
并发能力: 3000-5000 qps (单核)
内存占用: 30-150MB
CPU占用: <5% (1000 qps)
🔧 故障排查
启动失败
# 配置验证
./mosdns -c config.yaml -dry-run
# 查看日志
journalctl -u mosdns -n 50
Web无法访问
# 检查端口
netstat -tlnp | grep 5555
# 检查配置
grep "web:" config.yaml
防污染不生效
# 检查CN表
ls -lh data/chn_ip.txt
# 启用详细日志
# config.yaml → verbose: true
🎯 配置示例
国内DNS
- tag: rule_baidu
type: sequence
args:
exec:
- matches: qname $domains_baidu
exec: $china-dns
国外DNS
- tag: rule_netflix
type: sequence
args:
exec:
- matches: qname $domains_netflix
exec: $overseas-dns
智能防污染
- tag: rule_openai
type: sequence
args:
exec:
- matches: qname $domains_openai
exec: $smart-fallback
📦 目录结构
mosdns/
├── config.yaml # 主配置
├── config.d/
│ └── rules/ # 规则配置
│ ├── openai.yaml
│ └── netflix.yaml
├── data/
│ ├── chn_ip.txt # CN地址表
│ └── mikrotik/ # 域名文件
│ ├── openai.txt
│ └── netflix.txt
├── web-ui/
│ ├── src/ # Vue源码
│ └── dist/ # 构建输出
├── pkg/utils/ # 工具包
├── coremain/ # 核心代码
└── plugin/ # 插件
🚀 升级计划
v2.0 (计划中)
- 热重载配置
- 规则导入导出
- 多用户权限
- Docker镜像
- K8s Helm Chart
📚 文档索引
| 文档 | 说明 |
|---|---|
| 二次开发总结 | 完整功能介绍 |
| README | 项目说明 |
| 功能清单 | 详细清单 |
| 错误修复 | Bug修复 |
| 架构设计 | 技术架构 |
🎁 关键创新
1️⃣ 配置顺序自由
# ❌ 传统: 必须严格顺序
plugins:
- tag: upstream
- tag: main
exec: $upstream
# ✅ YLTX-DNS: 任意顺序
plugins:
- tag: main
exec: $upstream # OK!
- tag: upstream
2️⃣ 智能污染检测
国内DNS → 127.0.0.1 → 检测CN表 → ❌
→ 自动切换国际DNS → 104.18.xxx.xxx → ✅
3️⃣ 零配置门槛
表单填写 → 自动生成YAML → 一键启用
💡 最佳实践
1. 域名文件组织
data/mikrotik/
├── ai/
│ ├── openai.txt
│ ├── claude.txt
│ └── gemini.txt
├── video/
│ ├── netflix.txt
│ └── youtube.txt
└── social/
└── twitter.txt
2. DNS策略选择
国内网站 → 国内DNS
国外网站 → 国外DNS
AI服务 → 智能防污染 (推荐)
流媒体服务 → 国外DNS
3. MikroTik配置
常用服务 → mask: 32 (单IP)
大型服务 → mask: 24 (子网)
超大服务 → mask: 20 (更大子网)
🔥 常用命令
# 编译
go build -o mosdns .
# 启动
./mosdns -c config.yaml
# 后台运行
nohup ./mosdns -c config.yaml &
# 重启服务
systemctl restart mosdns
# 查看日志
journalctl -u mosdns -f
# 配置验证
./mosdns -c config.yaml -dry-run
# 性能测试
ab -n 10000 -c 100 http://localhost:5541/api/server-info
📞 获取帮助
- 📖 完整文档:
YLTX-DNS智能防污染系统-二次开发总结.md - 🐛 问题反馈: GitHub Issues
- 💬 技术讨论: GitHub Discussions
⚡ 快速、稳定、智能的DNS解决方案
最后更新: 2025-10-15