删除多个文档和脚本,包括构建说明、Gitea 发布指南、初始化命令说明及相关配置文件,简化项目结构以提升可维护性和用户体验。
Some checks are pending
Test mosdns / build (push) Waiting to run

This commit is contained in:
dengxiongjian 2025-10-16 22:36:52 +08:00
parent 253ae57393
commit 94be66ae6e
16 changed files with 0 additions and 120521 deletions

View File

@ -1,178 +0,0 @@
# 🔨 构建脚本使用说明
## 问题修复
### ❌ 错误的运行方式
```bash
sh build-all-platforms.sh # 会报错!
```
**错误信息:**
```
Syntax error: "(" unexpected (expecting "then")
```
### ✅ 正确的运行方式
```bash
# 方式1: 使用 bash推荐
bash build-all-platforms.sh
# 方式2: 直接执行
chmod +x build-all-platforms.sh
./build-all-platforms.sh
```
---
## 交互式编译
运行脚本后会看到菜单:
```
╔════════════════════════════════════════════╗
║ MosDNS 多平台构建工具 (带 Web UI) ║
╚════════════════════════════════════════════╝
请选择要编译的平台:
[1] Linux AMD64 (x86_64 服务器)
[2] Linux ARM64 (树莓派、ARM 服务器)
[3] Windows AMD64 (Windows 64位)
[4] macOS AMD64 (Intel Mac)
[5] macOS ARM64 (Apple Silicon M1/M2/M3)
[6] 编译所有 Linux 版本 (AMD64 + ARM64)
[7] 编译所有 macOS 版本 (AMD64 + ARM64)
[8] 编译所有 Windows 版本 (仅 AMD64)
[A] 编译全部平台 (推荐用于发布)
[0] 退出
```
**选择示例:**
- 输入 `1` - 只编译 Linux AMD64
- 输入 `A` - 编译所有平台
- 输入 `6` - 编译所有 Linux 版本
---
## 非交互式编译
### 单个平台
```bash
# Linux AMD64
bash build-all-platforms.sh <<< "1"
# Windows AMD64
bash build-all-platforms.sh <<< "3"
# macOS ARM64 (Apple Silicon)
bash build-all-platforms.sh <<< "5"
```
### 批量编译
```bash
# 所有 Linux 版本
bash build-all-platforms.sh <<< "6"
# 所有平台
bash build-all-platforms.sh <<< "A"
```
---
## 直接使用 go build
### 当前平台
```bash
go build -o dist/mosdns-linux-amd64 .
```
### 指定平台
```bash
# Linux AMD64
GOOS=linux GOARCH=amd64 go build -o dist/mosdns-linux-amd64 .
# Linux ARM64
GOOS=linux GOARCH=arm64 go build -o dist/mosdns-linux-arm64 .
# Windows AMD64
GOOS=windows GOARCH=amd64 go build -o dist/mosdns-windows-amd64.exe .
# macOS AMD64 (Intel)
GOOS=darwin GOARCH=amd64 go build -o dist/mosdns-darwin-amd64 .
# macOS ARM64 (Apple Silicon)
GOOS=darwin GOARCH=arm64 go build -o dist/mosdns-darwin-arm64 .
```
---
## 前端构建
### 自动构建
脚本会自动检查并构建 Vue 前端(如果需要)
### 手动构建
```bash
cd web-ui
npm install
npm run build
cd ..
```
---
## 输出文件
编译产物在 `dist/` 目录:
```
dist/
├── mosdns-linux-amd64 # Linux x86_64
├── mosdns-linux-arm64 # Linux ARM64
├── mosdns-windows-amd64.exe # Windows 64位
├── mosdns-darwin-amd64 # macOS Intel
└── mosdns-darwin-arm64 # macOS Apple Silicon
```
---
## 常见问题
### Q: 为什么 `sh build-all-platforms.sh` 会报错?
**A:** 脚本使用了 Bash 特性,必须用 `bash` 运行。
### Q: 如何跳过前端构建?
**A:** 确保 `web-ui/dist/index.html` 已存在,脚本会自动跳过。
### Q: 编译失败怎么办?
**A:** 检查:
1. Go 版本 >= 1.20
2. Node.js 和 npm 已安装(如需构建前端)
3. 网络连接正常(下载依赖)
### Q: 如何编译特定平台?
**A:** 运行脚本后选择对应编号,或使用 `go build` 直接编译。
---
## 快速命令
```bash
# 开发:编译当前平台
go build -o dist/mosdns .
# 测试:编译 Linux AMD64
bash build-all-platforms.sh <<< "1"
# 发布:编译所有平台
bash build-all-platforms.sh <<< "A"
```
---
**💡 提示:** 首次编译会下载依赖和构建前端,需要几分钟时间。后续编译会快很多。

110
Gitea.sh
View File

@ -1,110 +0,0 @@
#!/bin/bash
# ========================================
# 推送更新到 Gitea
# ========================================
echo "========================================="
echo " 📦 准备推送到 Gitea"
echo "========================================="
echo ""
# 检查是否已初始化 git
if [ ! -d ".git" ]; then
echo "初始化 Git 仓库..."
git init
git config user.name "dengxiongjian"
git config user.email "dengxiongjian@ylcomm.cn"
fi
# 检查远程仓库
if ! git remote | grep -q origin; then
echo "添加远程仓库..."
git remote add origin https://git.ylcomm.cn/dengxiongjian/mosdns.git
else
echo "远程仓库已存在,更新 URL..."
git remote set-url origin https://git.ylcomm.cn/dengxiongjian/mosdns.git
fi
echo ""
echo "📋 当前远程仓库:"
git remote -v
echo ""
# 查看状态
echo "📊 Git 状态:"
git status --short | head -20
echo ""
# 添加文件
echo "📁 添加文件..."
git add .
echo ""
echo "📝 准备提交的文件:"
git status --short | grep "^[AM]" | wc -l
echo "个文件将被提交"
echo ""
# 提交
read -p "输入提交信息 (直接回车使用默认): " COMMIT_MSG
if [ -z "$COMMIT_MSG" ]; then
COMMIT_MSG="更新: YLTX-MosDNS v1.0.0 完整版
新增功能:
- 智能防污染系统 (smart_fallback)
- Web 管理界面 (Vue 3 + TypeScript)
- 配置热加载 (HotReloadManager)
- 一键部署 (init 命令)
- 智能拓扑排序 (支持任意配置顺序)
- 完整的 RESTful API
- 规则管理优化
文档更新:
- README.md 完全重写
- 新增 CHANGELOG.md
- 新增多份部署指南
- 新增 Gitea 发布指南
详见 CHANGELOG.md"
fi
echo ""
echo "提交信息:"
echo "$COMMIT_MSG"
echo ""
git commit -m "$COMMIT_MSG"
echo ""
read -p "是否推送到 Gitea(y/N): " PUSH
if [[ "$PUSH" =~ ^[Yy]$ ]]; then
echo ""
echo "🚀 推送到 Gitea..."
git branch -M main
git push -u origin main
if [ $? -eq 0 ]; then
echo ""
echo "========================================="
echo " ✅ 推送成功!"
echo "========================================="
echo ""
echo "🌐 访问仓库:"
echo " https://git.ylcomm.cn/dengxiongjian/mosdns"
echo ""
else
echo ""
echo "❌ 推送失败,请检查网络和权限"
fi
else
echo ""
echo "⏸️ 已取消推送"
echo ""
echo "稍后可以手动推送:"
echo " git push -u origin main"
fi
echo ""
echo "========================================="

View File

@ -1,370 +0,0 @@
# 📋 Gitea 发布指南
## 🎯 推送到 Gitea 的步骤
### 1. 准备工作
#### 替换文档中的链接
```bash
# 替换为你的 Gitea 地址和仓库
GITEA_URL="https://你的Gitea地址"
GITEA_USER="你的用户名"
GITEA_REPO="mosdns"
# 批量替换
sed -i "s|https://github.com/your-repo/mosdns|${GITEA_URL}/${GITEA_USER}/${GITEA_REPO}|g" README.md CHANGELOG.md 发布前检查清单.md
```
或者手动替换为你的实际地址,例如:
- `https://git.example.com/username/mosdns`
- `http://192.168.1.100:3000/username/mosdns`
### 2. 清理和准备
```bash
# 清理不需要的文件
rm -rf dist/
rm -rf web-ui/node_modules/
rm -rf web-ui/dist/
rm -f *.log
rm -f cache.dump
# 确保 .gitignore 已配置
cat .gitignore
```
### 3. 初始化 Git 仓库
```bash
# 如果还没有初始化
git init
# 配置用户信息(首次使用)
git config user.name "你的名字"
git config user.email "your.email@example.com"
# 查看状态
git status
```
### 4. 添加和提交
```bash
# 添加所有文件
git add .
# 查看将要提交的文件
git status
# 提交
git commit -m "Initial commit: YLTX-MosDNS v1.0.0
核心功能:
- 智能防污染系统
- Web 管理界面
- 配置热加载
- 一键部署 (init 命令)
- 智能拓扑排序
- MikroTik 集成
- 完整的 RESTful API
详见 CHANGELOG.md"
```
### 5. 在 Gitea 创建仓库
1. 登录你的 Gitea 实例
2. 点击右上角 "+" → "新建仓库"
3. 填写仓库信息:
- **仓库名称**: `mosdns``yltx-mosdns`
- **描述**: `YLTX-MosDNS - 智能防污染 DNS 服务器`
- **可见性**: 公开/私有(根据需求)
- **初始化**: 不要勾选任何初始化选项
4. 点击 "创建仓库"
### 6. 关联远程仓库并推送
```bash
# 添加远程仓库(替换为你的实际地址)
git remote add origin https://你的Gitea地址/你的用户名/mosdns.git
# 或者使用 SSH推荐
git remote add origin git@你的Gitea地址:你的用户名/mosdns.git
# 查看远程仓库
git remote -v
# 推送到主分支
git branch -M main
git push -u origin main
```
### 7. 创建 Release可选
Gitea 也支持 Release 功能:
1. 在仓库页面点击 "发行版" 或 "Releases"
2. 点击 "新建发行版"
3. 填写信息:
- **标签名称**: `v1.0.0`
- **目标分支**: `main`
- **发行版标题**: `YLTX-MosDNS v1.0.0`
- **描述**: 粘贴 Release Notes见下文
4. 上传编译好的二进制文件:
```bash
# 先编译所有平台
bash build-all-platforms.sh <<< "A"
# 打包
cd dist/
tar -czf mosdns-linux-amd64-v1.0.0.tar.gz mosdns-linux-amd64
tar -czf mosdns-linux-arm64-v1.0.0.tar.gz mosdns-linux-arm64
zip mosdns-windows-amd64-v1.0.0.zip mosdns-windows-amd64.exe
tar -czf mosdns-darwin-amd64-v1.0.0.tar.gz mosdns-darwin-amd64
tar -czf mosdns-darwin-arm64-v1.0.0.tar.gz mosdns-darwin-arm64
```
5. 点击 "发布发行版"
---
## 📝 Release Notes 模板
```markdown
## YLTX-MosDNS v1.0.0
基于 MosDNS v5 的增强版本,专注于智能防污染和易用性。
### 🌟 核心功能
- **🛡️ 智能防污染系统** - 自动检测 DNS 污染并切换上游
- **🎨 Web 管理界面** - Vue 3 可视化管理,无需编辑配置
- **🔄 配置热加载** - 零停机更新配置
- **⚡ 一键部署** - `init` 命令 3 步快速启动
- **🧠 智能拓扑排序** - 支持任意插件配置顺序
- **📡 MikroTik 集成** - 自动同步到路由器地址列表
### 📦 下载
| 平台 | 架构 | 文件名 |
|------|------|--------|
| Linux | AMD64 | mosdns-linux-amd64-v1.0.0.tar.gz |
| Linux | ARM64 | mosdns-linux-arm64-v1.0.0.tar.gz |
| Windows | AMD64 | mosdns-windows-amd64-v1.0.0.zip |
| macOS | Intel | mosdns-darwin-amd64-v1.0.0.tar.gz |
| macOS | Apple Silicon | mosdns-darwin-arm64-v1.0.0.tar.gz |
### 🚀 快速开始
bash
# Linux/macOS
tar -xzf mosdns-linux-amd64-v1.0.0.tar.gz
./mosdns-linux-amd64 init
sed -i 's/:53/:5310/g' config.yaml
./mosdns-linux-amd64 start -c config.yaml
# Windows
# 解压 zip 文件
mosdns-windows-amd64.exe init
# 编辑 config.yaml修改端口为 5310
mosdns-windows-amd64.exe start -c config.yaml
访问 http://localhost:5555 进入 Web 管理界面
### 📚 文档
- [README](./README.md) - 项目文档
- [快速部署指南](./快速部署指南.md)
- [一键部署说明](./README-一键部署.md)
- [架构设计文档](./yltx-dns-智能防污染系统-架构设计文档.md)
- [更新日志](./CHANGELOG.md)
### ⚠️ 注意事项
1. 默认端口 53 需要 root/管理员权限
2. 建议下载完整的 CN IP 和域名数据文件
3. Web UI 默认监听 0.0.0.0:5555生产环境建议配置反向代理
### 🙏 致谢
感谢 [@IrineSistiana](https://github.com/IrineSistiana) 创建的原始 MosDNS 项目。
### 📄 许可证
GPL v3
```
---
## 🔧 常用 Git 命令
### 日常更新
```bash
# 查看状态
git status
# 添加修改的文件
git add .
# 提交
git commit -m "描述修改内容"
# 推送
git push
```
### 创建新版本
```bash
# 创建标签
git tag -a v1.1.0 -m "Release v1.1.0"
# 推送标签
git push origin v1.1.0
# 推送所有标签
git push --tags
```
### 查看历史
```bash
# 查看提交历史
git log --oneline
# 查看标签
git tag
```
---
## 🌐 Gitea 特色功能
### 1. Wiki
如果你的 Gitea 启用了 Wiki 功能,可以创建详细的文档:
- 安装指南
- 配置说明
- 故障排查
- API 文档
### 2. Issues
用户可以通过 Issues 报告问题和提建议
### 3. Pull Requests
接受社区贡献
### 4. Actions (CI/CD)
如果启用了 Gitea Actions可以配置自动构建
```yaml
# .gitea/workflows/build.yml
name: Build
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v4
with:
go-version: '1.20'
- name: Build
run: bash build-all-platforms.sh <<< "A"
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: mosdns-binaries
path: dist/*
```
---
## 📊 仓库设置建议
### 仓库描述
```
YLTX-MosDNS - 智能防污染 DNS 服务器 | 基于 MosDNS v5 | Web 管理界面 | 配置热加载 | 一键部署
```
### 主题标签 (Topics)
如果 Gitea 支持标签:
- `dns`
- `dns-server`
- `smart-dns`
- `anti-pollution`
- `golang`
- `vue`
- `mikrotik`
- `mosdns`
### 网站链接
如果部署了在线演示或文档站点,可以在仓库设置中添加
---
## 🔐 SSH 密钥配置(推荐)
使用 SSH 更安全且无需每次输入密码:
```bash
# 1. 生成 SSH 密钥(如果还没有)
ssh-keygen -t ed25519 -C "your.email@example.com"
# 2. 查看公钥
cat ~/.ssh/id_ed25519.pub
# 3. 在 Gitea 添加 SSH 公钥
# - 登录 Gitea
# - 用户设置 → SSH/GPG 密钥
# - 添加密钥 → 粘贴公钥内容
# 4. 测试连接
ssh -T git@你的Gitea地址
# 5. 使用 SSH URL
git remote set-url origin git@你的Gitea地址:你的用户名/mosdns.git
```
---
## ✅ 快速检查清单
发布前确认:
- [ ] 替换所有链接为实际的 Gitea 地址
- [ ] 清理临时文件和编译产物
- [ ] 测试编译所有平台
- [ ] 测试 init 和启动功能
- [ ] 检查敏感信息已删除
- [ ] Git 仓库已初始化
- [ ] 远程仓库已创建
- [ ] 代码已推送成功
- [ ] Release 已创建(可选)
- [ ] 二进制文件已上传(可选)
---
## 🎉 完成!
推送到 Gitea 后,你的团队成员可以通过以下方式获取:
```bash
# 克隆仓库
git clone https://你的Gitea地址/你的用户名/mosdns.git
# 或使用 SSH
git clone git@你的Gitea地址:你的用户名/mosdns.git
```
**享受你的私有 Git 服务器!** 🚀

View File

@ -1,294 +0,0 @@
# 📦 推送到 Gitea 说明
## 🎯 您的 Gitea 仓库
**仓库地址**: https://git.ylcomm.cn/dengxiongjian/mosdns
**用户名**: dengxiongjian
---
## ✅ 已完成的准备工作
### 1. 文档链接已更新
所有文档中的占位符链接已替换为您的实际 Gitea 地址:
- ✅ README.md
- ✅ CHANGELOG.md
- ✅ 发布前检查清单.md
### 2. 新增的核心功能
本次更新包含以下重大功能:
#### 🛡️ 智能防污染系统
- `smart_fallback` 插件
- 自动检测 DNS 污染并切换上游
- 支持 CN IP 检测
#### 🎨 Web 管理界面
- Vue 3 + TypeScript 前端
- 实时监控和统计
- 可视化规则管理
- 配置在线编辑
#### 🔄 配置热加载
- `HotReloadManager` 模块
- 零停机更新配置
- 自动验证和回滚
#### ⚡ 一键部署
- `init` 命令
- 自动生成配置文件和目录
- 3 步快速启动
#### 🧠 智能拓扑排序
- 自动分析插件依赖
- 支持任意配置顺序
- 循环依赖检测
#### 📡 规则管理优化
- 智能文件名匹配
- 完整的 CRUD API
- Web 界面规则管理
---
## 🚀 推送步骤
### 方式 1: 使用自动脚本(推荐)
```bash
# 运行推送脚本
./推送到Gitea.sh
```
脚本会自动:
1. 检查并初始化 Git 仓库
2. 配置远程仓库
3. 添加所有文件
4. 提交更改
5. 推送到 Gitea
### 方式 2: 手动推送
```bash
# 1. 查看当前状态
git status
# 2. 添加所有文件
git add .
# 3. 提交
git commit -m "更新: YLTX-MosDNS v1.0.0 完整版
新增功能:
- 智能防污染系统
- Web 管理界面
- 配置热加载
- 一键部署
- 智能拓扑排序
- 完整的 RESTful API
详见 CHANGELOG.md"
# 4. 推送到 Gitea
git push -u origin main
```
---
## 📝 提交信息建议
```
更新: YLTX-MosDNS v1.0.0 完整版
新增功能:
- 🛡️ 智能防污染系统 (smart_fallback 插件)
- 🎨 Web 管理界面 (Vue 3 + TypeScript)
- 🔄 配置热加载 (HotReloadManager)
- ⚡ 一键部署 (init 命令)
- 🧠 智能拓扑排序 (自动依赖分析)
- 📡 规则管理优化 (CRUD API)
文档更新:
- README.md 完全重写,突出新功能
- 新增 CHANGELOG.md 详细更新日志
- 新增多份部署和使用指南
- 新增 Gitea 发布指南
Bug 修复:
- 修复拓扑排序算法错误
- 修复规则删除文件名匹配问题
- 修复构建脚本兼容性问题
详见 CHANGELOG.md
```
---
## 🔍 推送前检查
### 必须完成
- [x] 文档链接已更新为 Gitea 地址
- [x] .gitignore 已配置
- [ ] 编译测试通过
- [ ] 功能测试通过
- [ ] 敏感信息已删除
### 推荐完成
- [ ] 测试 init 命令
- [ ] 测试 Web UI
- [ ] 测试热加载功能
- [ ] 检查日志文件
---
## 📦 推送后操作
### 1. 在 Gitea 创建 Release可选
1. 访问: https://git.ylcomm.cn/dengxiongjian/mosdns
2. 点击 "发行版" 或 "Releases"
3. 点击 "新建发行版"
4. 填写信息:
- **标签**: `v1.0.0`
- **目标**: `main`
- **标题**: `YLTX-MosDNS v1.0.0 - 完整版`
- **描述**: 复制下面的 Release Notes
#### Release Notes
```markdown
## YLTX-MosDNS v1.0.0
基于 MosDNS v5 的增强版本,专注于智能防污染和易用性。
### 🌟 核心功能
- **🛡️ 智能防污染系统** - 自动检测 DNS 污染并切换上游
- **🎨 Web 管理界面** - Vue 3 可视化管理,无需编辑配置
- **🔄 配置热加载** - 零停机更新配置
- **⚡ 一键部署** - `init` 命令 3 步快速启动
- **🧠 智能拓扑排序** - 支持任意插件配置顺序
- **📡 规则管理优化** - 完整的 CRUD API
### 📦 下载
编译所有平台版本:
bash
bash build-all-platforms.sh <<< "A"
### 🚀 快速开始
bash
# 1. 下载并初始化
./mosdns-linux-amd64 init
# 2. 修改端口(可选)
sed -i 's/:53/:5310/g' config.yaml
# 3. 启动
./mosdns-linux-amd64 start -c config.yaml
访问 http://localhost:5555 进入 Web 管理界面
### 📚 文档
- [README](./README.md)
- [快速部署指南](./快速部署指南.md)
- [CHANGELOG](./CHANGELOG.md)
### 🙏 致谢
感谢 [@IrineSistiana](https://github.com/IrineSistiana) 创建的原始 MosDNS 项目。
```
### 2. 上传编译好的二进制文件(可选)
```bash
# 编译所有平台
bash build-all-platforms.sh <<< "A"
# 打包
cd dist/
tar -czf mosdns-linux-amd64-v1.0.0.tar.gz mosdns-linux-amd64
tar -czf mosdns-linux-arm64-v1.0.0.tar.gz mosdns-linux-arm64
zip mosdns-windows-amd64-v1.0.0.zip mosdns-windows-amd64.exe
tar -czf mosdns-darwin-amd64-v1.0.0.tar.gz mosdns-darwin-amd64
tar -czf mosdns-darwin-arm64-v1.0.0.tar.gz mosdns-darwin-arm64
# 在 Gitea Release 页面上传这些文件
```
---
## 🌐 团队使用
推送后,团队成员可以这样获取:
```bash
# 克隆仓库
git clone https://git.ylcomm.cn/dengxiongjian/mosdns.git
cd mosdns
# 初始化配置
./dist/mosdns-linux-amd64 init
# 启动服务
./dist/mosdns-linux-amd64 start -c config.yaml
```
---
## 📊 推送统计
推送到 Gitea 后,您将看到:
- **新增代码**: ~3,500 行 Go 代码
- **新增文档**: ~10 份 Markdown 文档
- **新增功能**: 6 个重大功能模块
- **Bug 修复**: 6 个关键问题
---
## ⚠️ 注意事项
1. **Web UI 资源**: 确保 `web-ui/dist/` 已构建
```bash
cd web-ui
npm install
npm run build
cd ..
```
2. **敏感信息**: 检查是否有配置文件包含密码
```bash
grep -r "password" *.yaml
```
3. **大文件**: Gitea 默认限制文件大小,避免提交编译产物
```bash
# .gitignore 已配置,但请确认
cat .gitignore | grep dist
```
---
## ✅ 完成清单
推送前最后确认:
- [x] Git 链接已更新
- [x] 推送脚本已创建
- [ ] 代码已测试
- [ ] 文档已检查
- [ ] .gitignore 已配置
- [ ] 准备好推送
**准备好了就运行**: `./推送到Gitea.sh`
---
🎉 **祝推送顺利!**

View File

@ -1,402 +0,0 @@
# 🚀 MosDNS 一键部署
> 在任意服务器上 3 步快速部署智能 DNS 服务器
---
## 💡 核心特性
**一键初始化** - 自动生成配置文件和目录结构
**零配置门槛** - 无需手动编写 YAML 配置
**智能保护** - 自动检测已有文件,避免误删
**完整指引** - 提供详细的后续操作说明
**跨平台支持** - Linux/Windows/macOS/ARM 全平台
---
## 🎯 快速开始3步部署
### 第 1 步:下载程序
```bash
# 下载最新版本
wget https://github.com/your-repo/mosdns/releases/latest/download/mosdns-linux-amd64
chmod +x mosdns-linux-amd64
```
### 第 2 步:初始化配置
```bash
# 运行 init 命令
./mosdns-linux-amd64 init
```
**输出示例:**
```
========================================
🚀 MosDNS 初始化向导
========================================
✅ 配置文件已创建: config.yaml
📁 创建目录结构...
✅ ./data
✅ ./config.d
✅ ./config.d/rules
✅ ./logs
📄 检查数据文件...
✅ 已创建: ./data/chn_ip.txt
✅ 已创建: ./data/geosite_china-list.txt
========================================
🎉 初始化完成!
========================================
```
### 第 3 步:启动服务
```bash
# 非 root 用户(修改端口)
sed -i 's/:53/:5310/g' config.yaml
./mosdns-linux-amd64 start -c config.yaml
# 或使用 root 权限(使用默认端口 53
sudo ./mosdns-linux-amd64 start -c config.yaml
```
**🎉 完成!** 现在可以访问:
- Web 管理界面: http://localhost:5555
- API 接口: http://localhost:8080
- DNS 服务: localhost:53 (或 5310)
---
## 📁 生成的文件结构
```
.
├── mosdns-linux-amd64 # 可执行文件
├── config.yaml # 主配置文件 ⭐
├── data/ # 数据文件目录
│ ├── chn_ip.txt # CN IP 地址段(示例)
│ └── geosite_china-list.txt # CN 域名列表(示例)
├── config.d/ # 配置目录
│ └── rules/ # 规则文件目录(空)
├── logs/ # 日志目录
└── cache.dump # DNS 缓存(运行后生成)
```
---
## ⚙️ init 命令详解
### 基本语法
```bash
./mosdns-linux-amd64 init [flags]
```
### 可用参数
| 参数 | 短参数 | 说明 |
|------|--------|------|
| `--force` | `-f` | 强制覆盖已存在的配置文件 |
| `--help` | `-h` | 显示帮助信息 |
### 使用示例
**1. 首次初始化**
```bash
./mosdns-linux-amd64 init
```
**2. 强制重新初始化(覆盖配置)**
```bash
./mosdns-linux-amd64 init --force
```
**3. 在指定目录初始化**
```bash
mkdir /opt/mosdns && cd /opt/mosdns
./mosdns-linux-amd64 init
```
---
## 🔧 配置说明
### 生成的 config.yaml 包含:
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| **日志** | 日志级别和文件 | level: info |
| **API** | 管理接口地址 | 0.0.0.0:8080 |
| **Web UI** | Web 管理界面 | 0.0.0.0:5555 |
| **国内 DNS** | 阿里云/腾讯云 DNS | 223.5.5.5, 119.29.29.29 |
| **国外 DNS** | Cloudflare/Google DoH | 1.1.1.1, 8.8.8.8 |
| **缓存** | DNS 缓存配置 | 10万条目 |
| **DNS 服务器** | UDP/TCP 监听 | :53 |
### 常用修改
**修改 DNS 端口(非 root**
```bash
sed -i 's/:53/:5310/g' config.yaml
```
**修改 Web UI 端口:**
```bash
sed -i 's/5555/8888/g' config.yaml
```
**修改 API 端口:**
```bash
sed -i 's/8080/9090/g' config.yaml
```
---
## 🌐 部署场景
### 场景 1: 家庭/办公室 DNS 服务器
```bash
# 1. 初始化
./mosdns-linux-amd64 init
# 2. 下载完整数据(可选)
wget -O data/chn_ip.txt \
https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt
# 3. 启动(需 root
sudo ./mosdns-linux-amd64 start -c config.yaml
# 4. 配置路由器 DNS 为服务器 IP
```
### 场景 2: VPS/云服务器
```bash
# 1. SSH 登录
ssh user@your-server
# 2. 创建工作目录
mkdir -p /opt/mosdns && cd /opt/mosdns
# 3. 下载并初始化
wget https://github.com/.../mosdns-linux-amd64
chmod +x mosdns-linux-amd64
./mosdns-linux-amd64 init
# 4. 配置 systemd 服务(见下文)
```
### 场景 3: Docker 容器
**Dockerfile:**
```dockerfile
FROM debian:12-slim
# 安装依赖
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
# 复制程序
COPY mosdns-linux-amd64 /usr/local/bin/mosdns
RUN chmod +x /usr/local/bin/mosdns
# 初始化配置
WORKDIR /opt/mosdns
RUN mosdns init
# 暴露端口
EXPOSE 53/udp 53/tcp 5555/tcp 8080/tcp
# 启动服务
CMD ["mosdns", "start", "-c", "config.yaml"]
```
**构建并运行:**
```bash
docker build -t mosdns:latest .
docker run -d -p 53:53/udp -p 53:53/tcp -p 5555:5555 -p 8080:8080 mosdns:latest
```
---
## 🔄 生产环境部署
### 使用 systemd 管理服务
**1. 创建服务文件:**
```bash
sudo tee /etc/systemd/system/mosdns.service > /dev/null <<EOF
[Unit]
Description=MosDNS DNS Server
Documentation=https://github.com/your-repo/mosdns
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/mosdns
ExecStart=/opt/mosdns/mosdns-linux-amd64 start -c config.yaml
Restart=on-failure
RestartSec=5s
# 安全加固
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
```
**2. 启动并启用服务:**
```bash
sudo systemctl daemon-reload
sudo systemctl enable mosdns
sudo systemctl start mosdns
```
**3. 管理服务:**
```bash
sudo systemctl status mosdns # 查看状态
sudo systemctl stop mosdns # 停止服务
sudo systemctl restart mosdns # 重启服务
journalctl -u mosdns -f # 查看日志
```
---
## ✅ 验证部署
### 1. 检查服务状态
```bash
sudo systemctl status mosdns
```
### 2. 测试 DNS 解析
```bash
# 国内域名
dig @127.0.0.1 -p 5310 baidu.com
# 国外域名
dig @127.0.0.1 -p 5310 google.com
```
### 3. 访问 Web 界面
浏览器打开: http://服务器IP:5555
### 4. 测试 API
```bash
curl http://localhost:8080/api/server/info | jq
```
---
## 📚 高级功能
### 热加载配置(无需重启)
```bash
curl -X POST http://localhost:5555/api/config/reload
```
### 查看缓存统计
```bash
curl http://localhost:8080/api/cache/stats | jq
```
### 清空 DNS 缓存
```bash
curl -X POST http://localhost:8080/api/cache/flush
```
### 添加自定义规则
通过 Web 界面 → 规则管理 → 添加规则
---
## 🛠️ 故障排查
### 问题 1: 端口被占用
```
bind: address already in use
```
**解决:**
```bash
# 检查占用端口的进程
sudo lsof -i :53
sudo lsof -i :5555
# 修改配置文件端口
sed -i 's/:53/:5310/g' config.yaml
```
### 问题 2: 权限不足
```
bind: permission denied
```
**解决:**
```bash
# 使用 sudo 运行
sudo ./mosdns-linux-amd64 start -c config.yaml
# 或修改为非特权端口
sed -i 's/:53/:5310/g' config.yaml
```
### 问题 3: 配置文件已存在
```
⚠️ 配置文件已存在: config.yaml
```
**解决:**
```bash
# 方式1: 备份后重新初始化
mv config.yaml config.yaml.bak
./mosdns-linux-amd64 init
# 方式2: 强制覆盖
./mosdns-linux-amd64 init --force
```
---
## 📖 相关文档
- [快速部署指南](./快速部署指南.md) - 完整部署流程
- [init 功能说明](./init功能说明.md) - 命令详细说明
- [YLTX-DNS 二次开发总结](./YLTX-DNS智能防污染系统-二次开发总结.md) - 项目总结
---
## 💡 小贴士
1. **定期更新数据文件**
```bash
# 更新 CN IP 列表
wget -O data/chn_ip.txt \
https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt
# 热加载配置
curl -X POST http://localhost:5555/api/config/reload
```
2. **监控服务运行**
```bash
# 实时日志
journalctl -u mosdns -f
# 服务状态
curl http://localhost:8080/api/server/info
```
3. **备份配置**
```bash
tar -czf mosdns-backup-$(date +%Y%m%d).tar.gz \
config.yaml data/ config.d/
```
---
**🎉 恭喜!您已成功部署 MosDNS 智能 DNS 服务器!**
*如有问题,请访问 [GitHub Issues](https://github.com/your-repo/mosdns/issues)*

View File

@ -1,147 +0,0 @@
# 🚀 快速启动说明
## 最简单的启动方式
```bash
# 一键启动
./start.sh
```
就这么简单!脚本会自动:
1. ✅ 检查并编译程序(如果需要)
2. ✅ 检查配置文件
3. ✅ 检查必需的数据文件
4. ✅ 启动 MosDNS 服务
---
## 启动后访问
### Web 管理界面
```
http://localhost:5555
```
**功能**:
- 📊 系统状态监控
- 🎯 域名规则管理
- 🔄 配置热加载(无需重启)
- 📁 域名文件管理
- 🔧 MikroTik 路由器配置
### API 接口
```bash
# 查看服务器信息
curl http://localhost:8080/api/server/info
# 热加载配置
curl -X POST http://localhost:8080/api/config/reload
```
### DNS 服务
```bash
# 测试 DNS 解析
dig @localhost baidu.com
dig @localhost google.com
```
---
## 配置文件说明
### 简单配置 (`config.yaml`)
- ✅ 适合开发测试
- ✅ 包含所有核心功能
- ✅ 开箱即用
### 生产配置 (`config-production.yaml`)
- ✅ 性能优化
- ✅ 日志完善
- ✅ 缓存持久化
- ✅ 安全加固
**使用生产配置**:
```bash
./dist/mosdns-linux-amd64 start -c config-production.yaml
```
---
## 常用操作
### 启动服务
```bash
./start.sh
# 或
./dist/mosdns-linux-amd64 start -c config.yaml
```
### 后台运行
```bash
nohup ./start.sh > mosdns.log 2>&1 &
```
### 热加载配置(无需重启)
```bash
# 修改配置文件后
curl -X POST http://localhost:5555/api/config/reload
```
### 查看日志
```bash
tail -f mosdns.log
```
### 停止服务
```bash
pkill mosdns
# 或
kill $(pidof mosdns)
```
---
## 故障排查
### 端口被占用
```bash
# 检查端口占用
sudo netstat -tulpn | grep -E ':53|:5555|:8080'
# 修改配置文件中的端口
vim config.yaml
```
### 权限不足53 端口)
```bash
# 方法 1: 使用 sudo 启动
sudo ./start.sh
# 方法 2: 赋予绑定权限
sudo setcap cap_net_bind_service=+ep dist/mosdns-linux-amd64
# 方法 3: 修改为非特权端口
# 编辑 config.yaml将 53 改为 5353
```
### Web 界面无法访问
```bash
# 检查防火墙
sudo ufw allow 5555/tcp
# 或检查监听
sudo netstat -tulpn | grep 5555
```
---
## 更多信息
详细文档请查看:
- 📖 [启动指南.md](./启动指南.md) - 完整启动文档
- 📖 [YLTX-DNS智能防污染系统-二次开发总结.md](./YLTX-DNS智能防污染系统-二次开发总结.md) - 功能说明
- 📖 [构建脚本使用说明.md](./构建脚本使用说明.md) - 编译说明
---
**💡 提示**: 首次启动后,访问 http://localhost:5555 即可通过 Web 界面管理所有配置!

View File

@ -1,58 +0,0 @@
# 简化配置 - 验证基础功能
log:
level: info
api:
http: "0.0.0.0:8081"
web:
http: "0.0.0.0:5556"
plugins:
# DNS 上游
- tag: forward_local
type: forward
args:
concurrent: 2
upstreams:
- addr: "223.5.5.5"
- addr: "119.29.29.29"
- tag: forward_remote
type: forward
args:
concurrent: 2
upstreams:
- addr: "1.1.1.1"
- addr: "8.8.8.8"
# 缓存
- tag: main_cache
type: cache
args:
size: 10000
lazy_cache_ttl: 3600
# 主序列
- tag: main
type: sequence
args:
- exec: $main_cache
- exec: $forward_local
- matches:
- has_resp
exec: $main_cache
# 服务器
- tag: udp_server
type: udp_server
args:
entry: main
listen: ":5310"
- tag: tcp_server
type: tcp_server
args:
entry: main
listen: ":5310"

View File

@ -1,772 +0,0 @@
# 中国大陆IP地址段表 (CIDR格式)
# 来源https://github.com/misakaio/chnroutes2
# 用于智能防污染插件判断IP归属
# 主要运营商地址段
1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.0.32.0/19
1.1.0.0/24
1.1.2.0/23
1.1.4.0/22
1.1.8.0/24
1.1.16.0/20
1.1.32.0/19
1.1.64.0/18
1.1.128.0/17
1.2.0.0/16
1.3.0.0/16
1.4.1.0/24
1.4.2.0/23
1.4.4.0/22
1.4.8.0/21
1.4.16.0/20
1.4.32.0/19
1.4.64.0/18
1.4.128.0/17
1.5.0.0/16
1.6.0.0/16
1.7.0.0/16
1.8.0.0/16
1.9.0.0/16
1.10.0.0/16
1.11.0.0/16
1.12.0.0/16
1.13.0.0/16
1.14.0.0/16
1.15.0.0/16
1.16.0.0/16
1.17.0.0/16
1.18.0.0/16
1.19.0.0/16
1.20.0.0/16
1.21.0.0/16
1.22.0.0/16
1.23.0.0/16
1.24.0.0/16
1.25.0.0/16
1.26.0.0/16
1.27.0.0/16
1.28.0.0/16
1.29.0.0/16
1.30.0.0/16
1.31.0.0/16
1.32.0.0/16
1.33.0.0/16
1.34.0.0/16
1.35.0.0/16
1.36.0.0/16
1.37.0.0/16
1.38.0.0/16
1.39.0.0/16
1.40.0.0/16
1.41.0.0/16
1.42.0.0/16
1.43.0.0/16
1.44.0.0/16
1.45.0.0/16
1.46.0.0/16
1.47.0.0/16
1.48.0.0/16
1.49.0.0/16
1.50.0.0/16
1.51.0.0/16
1.52.0.0/16
1.53.0.0/16
1.54.0.0/16
1.55.0.0/16
1.56.0.0/16
1.57.0.0/16
1.58.0.0/16
1.59.0.0/16
1.60.0.0/16
1.61.0.0/16
1.62.0.0/16
1.63.0.0/16
# 阿里云地址段
8.129.0.0/16
8.130.0.0/15
8.132.0.0/14
8.136.0.0/13
8.144.0.0/12
8.208.0.0/12
39.96.0.0/13
39.104.0.0/13
39.112.0.0/12
42.120.0.0/15
42.122.0.0/16
42.123.0.0/16
42.156.0.0/16
42.157.0.0/16
42.158.0.0/15
42.160.0.0/12
42.176.0.0/13
42.184.0.0/15
42.186.0.0/16
42.187.0.0/16
42.188.0.0/14
42.192.0.0/11
42.224.0.0/12
42.240.0.0/13
42.248.0.0/15
43.224.0.0/13
43.232.0.0/14
43.236.0.0/15
43.238.0.0/16
43.239.0.0/16
43.240.0.0/13
43.248.0.0/14
43.252.0.0/15
43.254.0.0/16
43.255.0.0/16
45.112.0.0/12
45.248.0.0/14
47.92.0.0/14
47.96.0.0/11
47.128.0.0/10
49.4.0.0/14
49.8.0.0/13
49.16.0.0/12
49.32.0.0/11
49.64.0.0/11
49.96.0.0/11
49.128.0.0/10
59.82.0.0/16
59.83.0.0/16
59.84.0.0/15
59.86.0.0/16
59.87.0.0/16
59.88.0.0/14
59.92.0.0/15
59.94.0.0/16
59.95.0.0/16
59.96.0.0/13
59.104.0.0/14
59.108.0.0/15
59.110.0.0/16
59.111.0.0/16
59.112.0.0/12
59.128.0.0/10
60.0.0.0/11
60.32.0.0/12
60.48.0.0/13
60.56.0.0/14
60.60.0.0/15
60.62.0.0/16
60.63.0.0/16
60.64.0.0/10
60.128.0.0/11
60.160.0.0/12
60.176.0.0/13
60.184.0.0/14
60.188.0.0/15
60.190.0.0/16
60.191.0.0/16
60.192.0.0/10
60.255.0.0/16
61.4.0.0/14
61.8.0.0/13
61.16.0.0/12
61.32.0.0/11
61.64.0.0/10
61.128.0.0/11
61.160.0.0/12
61.176.0.0/13
61.184.0.0/14
61.188.0.0/15
61.190.0.0/16
61.191.0.0/16
61.192.0.0/11
61.224.0.0/12
61.240.0.0/14
61.244.0.0/15
61.246.0.0/16
61.247.0.0/16
61.248.0.0/13
62.8.0.0/13
62.16.0.0/12
62.32.0.0/11
62.64.0.0/10
62.128.0.0/11
62.160.0.0/12
62.176.0.0/13
62.184.0.0/14
62.188.0.0/15
62.190.0.0/16
62.191.0.0/16
62.192.0.0/10
63.64.0.0/10
63.128.0.0/11
63.160.0.0/12
63.176.0.0/13
63.184.0.0/14
63.188.0.0/15
63.190.0.0/16
63.191.0.0/16
63.192.0.0/10
# 腾讯云地址段
14.17.0.0/16
14.18.0.0/15
14.20.0.0/14
14.24.0.0/13
14.32.0.0/11
14.64.0.0/10
14.128.0.0/9
27.128.0.0/10
27.192.0.0/11
27.224.0.0/12
27.240.0.0/13
27.248.0.0/14
27.252.0.0/15
27.254.0.0/16
36.0.0.0/8
39.64.0.0/11
39.128.0.0/10
39.192.0.0/11
39.224.0.0/12
39.240.0.0/13
39.248.0.0/14
39.252.0.0/15
39.254.0.0/16
43.128.0.0/9
49.0.0.0/8
58.16.0.0/13
58.24.0.0/14
58.28.0.0/15
58.30.0.0/16
58.31.0.0/16
58.32.0.0/11
58.64.0.0/10
58.128.0.0/9
59.32.0.0/11
59.64.0.0/10
59.128.0.0/9
60.0.0.0/10
60.64.0.0/11
60.96.0.0/12
60.112.0.0/13
60.120.0.0/14
60.124.0.0/15
60.126.0.0/16
60.127.0.0/16
60.128.0.0/9
61.48.0.0/13
61.56.0.0/14
61.60.0.0/15
61.62.0.0/16
61.63.0.0/16
61.64.0.0/10
61.128.0.0/9
62.64.0.0/10
62.128.0.0/9
63.64.0.0/10
63.128.0.0/9
101.32.0.0/12
101.48.0.0/13
101.56.0.0/14
101.60.0.0/15
101.62.0.0/16
101.63.0.0/16
101.64.0.0/10
101.128.0.0/9
103.0.0.0/8
106.32.0.0/12
106.48.0.0/13
106.56.0.0/14
106.60.0.0/15
106.62.0.0/16
106.63.0.0/16
106.64.0.0/10
106.128.0.0/9
110.0.0.0/8
111.0.0.0/8
112.0.0.0/8
113.0.0.0/8
114.0.0.0/8
115.0.0.0/8
116.0.0.0/8
117.0.0.0/8
118.0.0.0/8
119.0.0.0/8
120.0.0.0/8
121.0.0.0/8
122.0.0.0/8
123.0.0.0/8
124.0.0.0/8
125.0.0.0/8
126.0.0.0/8
139.0.0.0/8
140.0.0.0/8
141.0.0.0/8
142.0.0.0/8
143.0.0.0/8
144.0.0.0/8
145.0.0.0/8
146.0.0.0/8
147.0.0.0/8
148.0.0.0/8
149.0.0.0/8
150.0.0.0/8
151.0.0.0/8
152.0.0.0/8
153.0.0.0/8
154.0.0.0/8
155.0.0.0/8
156.0.0.0/8
157.0.0.0/8
158.0.0.0/8
159.0.0.0/8
160.0.0.0/8
161.0.0.0/8
162.0.0.0/8
163.0.0.0/8
164.0.0.0/8
165.0.0.0/8
166.0.0.0/8
167.0.0.0/8
168.0.0.0/8
169.0.0.0/8
170.0.0.0/8
171.0.0.0/8
172.0.0.0/8
173.0.0.0/8
174.0.0.0/8
175.0.0.0/8
176.0.0.0/8
177.0.0.0/8
178.0.0.0/8
179.0.0.0/8
180.0.0.0/8
181.0.0.0/8
182.0.0.0/8
183.0.0.0/8
184.0.0.0/8
185.0.0.0/8
186.0.0.0/8
187.0.0.0/8
188.0.0.0/8
189.0.0.0/8
190.0.0.0/8
191.0.0.0/8
192.0.0.0/8
193.0.0.0/8
194.0.0.0/8
195.0.0.0/8
196.0.0.0/8
197.0.0.0/8
198.0.0.0/8
199.0.0.0/8
200.0.0.0/8
201.0.0.0/8
202.0.0.0/8
203.0.0.0/8
204.0.0.0/8
205.0.0.0/8
206.0.0.0/8
207.0.0.0/8
208.0.0.0/8
209.0.0.0/8
210.0.0.0/8
211.0.0.0/8
212.0.0.0/8
213.0.0.0/8
214.0.0.0/8
215.0.0.0/8
216.0.0.0/8
217.0.0.0/8
218.0.0.0/8
219.0.0.0/8
220.0.0.0/8
221.0.0.0/8
222.0.0.0/8
223.0.0.0/8
# 华为云地址段
49.4.0.0/14
49.8.0.0/13
49.16.0.0/12
49.32.0.0/11
49.64.0.0/11
49.96.0.0/11
49.128.0.0/10
101.32.0.0/12
101.48.0.0/13
101.56.0.0/14
101.60.0.0/15
101.62.0.0/16
101.63.0.0/16
101.64.0.0/10
101.128.0.0/9
106.32.0.0/12
106.48.0.0/13
106.56.0.0/14
106.60.0.0/15
106.62.0.0/16
106.63.0.0/16
106.64.0.0/10
106.128.0.0/9
110.0.0.0/8
111.0.0.0/8
112.0.0.0/8
113.0.0.0/8
114.0.0.0/8
115.0.0.0/8
116.0.0.0/8
117.0.0.0/8
118.0.0.0/8
119.0.0.0/8
120.0.0.0/8
121.0.0.0/8
122.0.0.0/8
123.0.0.0/8
124.0.0.0/8
125.0.0.0/8
126.0.0.0/8
139.0.0.0/8
140.0.0.0/8
141.0.0.0/8
142.0.0.0/8
143.0.0.0/8
144.0.0.0/8
145.0.0.0/8
146.0.0.0/8
147.0.0.0/8
148.0.0.0/8
149.0.0.0/8
150.0.0.0/8
151.0.0.0/8
152.0.0.0/8
153.0.0.0/8
154.0.0.0/8
155.0.0.0/8
156.0.0.0/8
157.0.0.0/8
158.0.0.0/8
159.0.0.0/8
160.0.0.0/8
161.0.0.0/8
162.0.0.0/8
163.0.0.0/8
164.0.0.0/8
165.0.0.0/8
166.0.0.0/8
167.0.0.0/8
168.0.0.0/8
169.0.0.0/8
170.0.0.0/8
171.0.0.0/8
172.0.0.0/8
173.0.0.0/8
174.0.0.0/8
175.0.0.0/8
176.0.0.0/8
177.0.0.0/8
178.0.0.0/8
179.0.0.0/8
180.0.0.0/8
181.0.0.0/8
182.0.0.0/8
183.0.0.0/8
184.0.0.0/8
185.0.0.0/8
186.0.0.0/8
187.0.0.0/8
188.0.0.0/8
189.0.0.0/8
190.0.0.0/8
191.0.0.0/8
192.0.0.0/8
193.0.0.0/8
194.0.0.0/8
195.0.0.0/8
196.0.0.0/8
197.0.0.0/8
198.0.0.0/8
199.0.0.0/8
200.0.0.0/8
201.0.0.0/8
202.0.0.0/8
203.0.0.0/8
204.0.0.0/8
205.0.0.0/8
206.0.0.0/8
207.0.0.0/8
208.0.0.0/8
209.0.0.0/8
210.0.0.0/8
211.0.0.0/8
212.0.0.0/8
213.0.0.0/8
214.0.0.0/8
215.0.0.0/8
216.0.0.0/8
217.0.0.0/8
218.0.0.0/8
219.0.0.0/8
220.0.0.0/8
221.0.0.0/8
222.0.0.0/8
223.0.0.0/8
# 移动/联通/电信骨干网地址段
36.0.0.0/8
39.0.0.0/8
42.0.0.0/8
43.0.0.0/8
49.0.0.0/8
58.0.0.0/8
59.0.0.0/8
60.0.0.0/8
61.0.0.0/8
101.0.0.0/8
103.0.0.0/8
106.0.0.0/8
110.0.0.0/8
111.0.0.0/8
112.0.0.0/8
113.0.0.0/8
114.0.0.0/8
115.0.0.0/8
116.0.0.0/8
117.0.0.0/8
118.0.0.0/8
119.0.0.0/8
120.0.0.0/8
121.0.0.0/8
122.0.0.0/8
123.0.0.0/8
124.0.0.0/8
125.0.0.0/8
126.0.0.0/8
139.0.0.0/8
140.0.0.0/8
141.0.0.0/8
142.0.0.0/8
143.0.0.0/8
144.0.0.0/8
145.0.0.0/8
146.0.0.0/8
147.0.0.0/8
148.0.0.0/8
149.0.0.0/8
150.0.0.0/8
151.0.0.0/8
152.0.0.0/8
153.0.0.0/8
154.0.0.0/8
155.0.0.0/8
156.0.0.0/8
157.0.0.0/8
158.0.0.0/8
159.0.0.0/8
160.0.0.0/8
161.0.0.0/8
162.0.0.0/8
163.0.0.0/8
164.0.0.0/8
165.0.0.0/8
166.0.0.0/8
167.0.0.0/8
168.0.0.0/8
169.0.0.0/8
170.0.0.0/8
171.0.0.0/8
172.0.0.0/8
173.0.0.0/8
174.0.0.0/8
175.0.0.0/8
176.0.0.0/8
177.0.0.0/8
178.0.0.0/8
179.0.0.0/8
180.0.0.0/8
181.0.0.0/8
182.0.0.0/8
183.0.0.0/8
184.0.0.0/8
185.0.0.0/8
186.0.0.0/8
187.0.0.0/8
188.0.0.0/8
189.0.0.0/8
190.0.0.0/8
191.0.0.0/8
192.0.0.0/8
193.0.0.0/8
194.0.0.0/8
195.0.0.0/8
196.0.0.0/8
197.0.0.0/8
198.0.0.0/8
199.0.0.0/8
200.0.0.0/8
201.0.0.0/8
202.0.0.0/8
203.0.0.0/8
204.0.0.0/8
205.0.0.0/8
206.0.0.0/8
207.0.0.0/8
208.0.0.0/8
209.0.0.0/8
210.0.0.0/8
211.0.0.0/8
212.0.0.0/8
213.0.0.0/8
214.0.0.0/8
215.0.0.0/8
216.0.0.0/8
217.0.0.0/8
218.0.0.0/8
219.0.0.0/8
220.0.0.0/8
221.0.0.0/8
222.0.0.0/8
223.0.0.0/8
# 教育网地址段
101.4.0.0/14
101.8.0.0/13
101.16.0.0/12
101.32.0.0/11
101.64.0.0/10
101.128.0.0/9
106.0.0.0/8
114.28.0.0/16
114.29.0.0/16
114.30.0.0/15
114.32.0.0/12
114.48.0.0/14
114.52.0.0/15
114.54.0.0/16
114.55.0.0/16
114.56.0.0/13
114.64.0.0/10
114.128.0.0/9
115.24.0.0/15
115.26.0.0/16
115.27.0.0/16
115.28.0.0/14
115.32.0.0/12
115.48.0.0/13
115.56.0.0/15
115.58.0.0/16
115.59.0.0/16
115.60.0.0/14
115.64.0.0/10
115.128.0.0/9
116.56.0.0/13
116.64.0.0/10
116.128.0.0/9
117.8.0.0/13
117.16.0.0/12
117.32.0.0/11
117.64.0.0/10
117.128.0.0/9
118.24.0.0/15
118.26.0.0/16
118.27.0.0/16
118.28.0.0/14
118.32.0.0/12
118.48.0.0/13
118.56.0.0/15
118.58.0.0/16
118.59.0.0/16
118.60.0.0/14
118.64.0.0/10
118.128.0.0/9
119.8.0.0/13
119.16.0.0/12
119.32.0.0/11
119.64.0.0/10
119.128.0.0/9
120.24.0.0/15
120.26.0.0/16
120.27.0.0/16
120.28.0.0/14
120.32.0.0/12
120.48.0.0/13
120.56.0.0/15
120.58.0.0/16
120.59.0.0/16
120.60.0.0/14
120.64.0.0/10
120.128.0.0/9
121.8.0.0/13
121.16.0.0/12
121.32.0.0/11
121.64.0.0/10
121.128.0.0/9
122.48.0.0/14
122.52.0.0/15
122.54.0.0/16
122.55.0.0/16
122.56.0.0/13
122.64.0.0/10
122.128.0.0/9
123.8.0.0/13
123.16.0.0/12
123.32.0.0/11
123.64.0.0/10
123.128.0.0/9
124.16.0.0/12
124.32.0.0/11
124.64.0.0/10
124.128.0.0/9
125.32.0.0/11
125.64.0.0/10
125.128.0.0/9
134.175.0.0/16
134.176.0.0/13
134.184.0.0/15
134.186.0.0/16
134.187.0.0/16
134.188.0.0/14
134.192.0.0/11
134.224.0.0/12
134.240.0.0/13
134.248.0.0/15
134.250.0.0/16
134.251.0.0/16
134.252.0.0/14
134.255.0.0/16
161.207.0.0/16
162.105.0.0/16
163.0.0.0/8
166.111.0.0/16
167.139.0.0/16
168.160.0.0/13
168.168.0.0/14
168.172.0.0/15
168.174.0.0/16
168.175.0.0/16
168.176.0.0/13
168.184.0.0/14
168.188.0.0/15
168.190.0.0/16
168.191.0.0/16
168.192.0.0/11
168.224.0.0/12
168.240.0.0/13
168.248.0.0/15
168.250.0.0/16
168.251.0.0/16
168.252.0.0/14
168.254.0.0/16
202.4.0.0/14
202.8.0.0/13
202.16.0.0/12
202.32.0.0/11
202.64.0.0/10
202.128.0.0/9
203.0.0.0/8
210.0.0.0/8
211.0.0.0/8
218.0.0.0/8
219.0.0.0/8
220.0.0.0/8
221.0.0.0/8
222.0.0.0/8

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,119 +0,0 @@
# init 命令功能说明
## 功能描述
`mosdns init` 命令用于在任意服务器上快速初始化 MosDNS 配置和必要的目录结构,实现一键部署。
## 使用方法
### 基本用法
```bash
./mosdns-linux-amd64 init
```
### 强制覆盖模式
```bash
./mosdns-linux-amd64 init --force
# 或
./mosdns-linux-amd64 init -f
```
## 功能特性
1. ✅ 自动生成 config.yaml 配置文件
2. ✅ 创建必要的目录结构data/, config.d/rules/, logs/
3. ✅ 生成示例数据文件CN IP 和域名列表)
4. ✅ 智能检测已存在文件,避免覆盖
5. ✅ 提供详细的后续操作指南
## 生成的文件结构
```
.
├── config.yaml # 主配置文件
├── data/ # 数据文件目录
│ ├── chn_ip.txt # 中国 IP 地址段(示例)
│ └── geosite_china-list.txt # 中国域名列表(示例)
├── config.d/ # 配置目录
│ └── rules/ # 规则文件目录(空)
└── logs/ # 日志目录
```
## 配置文件特点
生成的 config.yaml 包含:
- 完整的注释说明
- 智能 DNS 分流配置
- 国内/国外 DNS 上游
- DNS 缓存配置
- Web 管理界面
- API 接口
## 使用场景
### 场景1: 全新服务器快速部署
```bash
# 1. 上传二进制文件
scp mosdns-linux-amd64 user@server:/opt/mosdns/
# 2. SSH 登录服务器
ssh user@server
# 3. 初始化
cd /opt/mosdns
./mosdns-linux-amd64 init
# 4. 启动(非 root 用户修改端口)
sed -i 's/:53/:5310/g' config.yaml
./mosdns-linux-amd64 start -c config.yaml
```
### 场景2: Docker 容器部署
```dockerfile
FROM debian:12-slim
COPY mosdns-linux-amd64 /usr/local/bin/mosdns
WORKDIR /opt/mosdns
RUN mosdns init
CMD ["mosdns", "start", "-c", "config.yaml"]
```
### 场景3: 测试环境快速搭建
```bash
mkdir test-mosdns && cd test-mosdns
/path/to/mosdns-linux-amd64 init
sed -i 's/:53/:5310/g' config.yaml
/path/to/mosdns-linux-amd64 start -c config.yaml
```
## 代码实现
**文件**: `tools/init.go`
**核心函数**:
- `runInit()`: 主执行函数
- `createConfigFile()`: 创建配置文件
- `createDirectories()`: 创建目录结构
- `createDataFiles()`: 创建示例数据文件
- `showCompletionInfo()`: 显示完成信息
**行数**: ~330 行
## 测试结果
✅ 所有功能测试通过:
- 初次运行创建所有文件
- 再次运行提示文件已存在
- --force 模式可强制覆盖
- 生成的配置文件格式正确
- 目录权限设置正确
## 优势
1. **零配置门槛**: 不需要手动编写配置文件
2. **标准化部署**: 所有服务器使用统一的配置模板
3. **快速迭代**: 几秒钟完成初始化
4. **智能保护**: 自动检测已有文件,避免误删
5. **完整指引**: 提供详细的后续操作说明
---
**✨ 现在可以在任意服务器上一键部署 MosDNS 了!**

View File

@ -1,72 +0,0 @@
#!/bin/bash
# ========================================
# MosDNS 快速启动脚本
# ========================================
set -e
# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
CYAN='\033[0;36m'
NC='\033[0m'
echo ""
echo -e "${CYAN}========================================${NC}"
echo -e "${CYAN} MosDNS 智能防污染 DNS 服务器${NC}"
echo -e "${CYAN}========================================${NC}"
echo ""
# 检查可执行文件
if [ ! -f "dist/mosdns-linux-amd64" ]; then
echo -e "${YELLOW}⚠️ 未找到可执行文件,开始构建...${NC}"
if [ -f "build-all-platforms.sh" ]; then
chmod +x build-all-platforms.sh
echo "1" | ./build-all-platforms.sh
else
echo -e "${RED}❌ 构建脚本不存在${NC}"
exit 1
fi
fi
# 检查配置文件
if [ ! -f "config.yaml" ]; then
echo -e "${RED}❌ 配置文件 config.yaml 不存在${NC}"
echo -e "${YELLOW}💡 请先创建配置文件或复制示例配置${NC}"
exit 1
fi
# 检查 CN IP 数据文件
if [ ! -f "data/chn_ip.txt" ]; then
echo -e "${YELLOW}⚠️ 警告: data/chn_ip.txt 不存在${NC}"
echo -e "${YELLOW} 智能防污染功能需要此文件${NC}"
# 创建最小数据文件
mkdir -p data
echo "# CN IP 地址表(示例)" > data/chn_ip.txt
echo "1.0.0.0/8" >> data/chn_ip.txt
echo ""
fi
echo -e "${GREEN}✅ 准备就绪${NC}"
echo ""
echo -e "${CYAN}启动参数:${NC}"
echo " 可执行文件: dist/mosdns-linux-amd64"
echo " 配置文件: config.yaml"
echo ""
echo -e "${CYAN}服务地址:${NC}"
echo " DNS 服务: 0.0.0.0:53 (UDP/TCP)"
echo " Web 界面: http://localhost:5555"
echo " API 接口: http://localhost:8080"
echo ""
echo -e "${CYAN}========================================${NC}"
echo ""
# 启动 MosDNS
echo -e "${GREEN}🚀 正在启动 MosDNS...${NC}"
echo ""
./dist/mosdns-linux-amd64 start -c config.yaml

130
v2dat.sh
View File

@ -1,130 +0,0 @@
#!/bin/sh
set -e # 如果任何命令失败则退出
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT # 确保脚本退出时删除临时目录
# 创建必要的目录
mkdir -p "$SCRIPT_DIR/geo"
mkdir -p "$SCRIPT_DIR/geosite"
mkdir -p "$SCRIPT_DIR/geoip"
mkdir -p "$SCRIPT_DIR/config"
# 下载 geoip 和 geosite 数据文件到 geo 目录
download_geodata() {
echo "正在下载 geoip.dat..."
curl --connect-timeout 5 -m 60 -kfSL -o "$SCRIPT_DIR/geo/geoip.dat" "https://cdn.jsdelivr.net/gh/Loyalsoldier/geoip@release/geoip.dat"
echo "正在下载 geosite.dat..."
curl --connect-timeout 5 -m 60 -kfSL -o "$SCRIPT_DIR/geo/geosite.dat" "https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat"
echo "正在下载 CN-ip-cidr.txt"
curl --connect-timeout 5 -m 60 -kfSL -o "$SCRIPT_DIR/config/CN-ip-cidr.txt" "https://raw.githubusercontent.com/Hackl0us/GeoIP2-CN/release/CN-ip-cidr.txt"
echo "下载完成"
}
# 下载 v2dat 工具(如果不存在)
download_v2dat() {
if [ ! -f "$SCRIPT_DIR/v2dat" ]; then
echo "正在下载 v2dat 工具..."
curl -fSL -o "$SCRIPT_DIR/v2dat" "https://raw.githubusercontent.com/xukecheng/scripts/main/v2dat"
chmod +x "$SCRIPT_DIR/v2dat"
echo "v2dat 工具下载完成"
else
echo "v2dat 工具已存在"
fi
}
# 过滤 IPv4 地址(去掉 IPv6
filter_ipv4_only() {
local input_file="$1"
local output_file="$2"
if [ ! -f "$input_file" ]; then
echo "警告: 文件 $input_file 不存在,跳过过滤"
return 1
fi
echo "正在过滤 IPv4 地址(去掉 IPv6..."
echo "输入文件: $input_file"
echo "输出文件: $output_file"
# 统计原始行数
original_count=$(wc -l < "$input_file" 2>/dev/null || echo "0")
# 过滤 IPv4 地址:
# 1. 匹配 IPv4 CIDR 格式 (x.x.x.x/xx)
# 2. 排除包含冒号的 IPv6 地址
# 3. 排除空行和注释行
grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(/[0-9]{1,2})?$' "$input_file" > "$output_file" 2>/dev/null || {
echo "错误: 过滤 IPv4 地址失败"
return 1
}
# 统计过滤后行数
filtered_count=$(wc -l < "$output_file" 2>/dev/null || echo "0")
removed_count=$((original_count - filtered_count))
echo "过滤完成:"
echo " 原始条目: $original_count"
echo " IPv4 条目: $filtered_count"
echo " 移除条目: $removed_count (IPv6 和无效条目)"
return 0
}
# 使用 v2dat 工具解包数据
unpack_geodata() {
echo "正在解包 geosite.dat..."
"$SCRIPT_DIR/v2dat" unpack geosite "$SCRIPT_DIR/geo/geosite.dat" -o "$SCRIPT_DIR/geosite"
echo "正在解包 geoip.dat CN 数据..."
"$SCRIPT_DIR/v2dat" unpack geoip "$SCRIPT_DIR/geo/geoip.dat" -o "$SCRIPT_DIR/geoip" -f cn
# 🆕 新增:过滤 IPv4 地址,去掉 IPv6
local geoip_cn_file="$SCRIPT_DIR/geoip/geoip_cn.txt"
local geoip_cn_ipv4_file="$SCRIPT_DIR/config/cn.txt"
if [ -f "$geoip_cn_file" ]; then
echo ""
echo "🔄 正在处理 CN IP 数据..."
filter_ipv4_only "$geoip_cn_file" "$geoip_cn_ipv4_file"
if [ $? -eq 0 ]; then
echo "✅ CN IPv4 地址列表已生成: $geoip_cn_ipv4_file"
echo " 该文件可直接用于 MosDNS 配置中的 geoip_cn"
else
echo "❌ 处理 CN IP 数据失败"
fi
else
echo "⚠️ 警告: 未找到 $geoip_cn_file 文件"
fi
echo ""
echo "解包完成"
}
# 主流程
echo "开始处理..."
download_geodata
download_v2dat
unpack_geodata
echo ""
echo "🎉 所有操作完成!"
echo ""
echo "📁 生成的文件:"
echo " ├── geo/geoip.dat (原始 geoip 数据)"
echo " ├── geo/geosite.dat (原始 geosite 数据)"
echo " ├── geoip/geoip_cn.txt (解包的 CN IP 数据,包含 IPv6)"
echo " ├── config/cn.txt (🆕 过滤后的 CN IPv4 数据)"
echo " ├── config/CN-ip-cidr.txt (备用 CN IP 数据)"
echo " └── geosite/ (解包的域名数据)"
echo ""
echo "💡 使用建议:"
echo " - MosDNS 配置中使用: config/cn.txt (仅 IPv4)"
echo " - 如需 IPv6 支持,使用: geoip/geoip_cn.txt"
echo ""

View File

@ -1,628 +0,0 @@
# YLTX-DNS 智能防污染系统架构设计文档
## 📋 目录
- [1. 项目概述](#1-项目概述)
- [2. 需求分析](#2-需求分析)
- [3. 系统架构设计](#3-系统架构设计)
- [4. 技术方案详述](#4-技术方案详述)
- [5. 开发计划](#5-开发计划)
- [6. 风险评估与应对](#6-风险评估与应对)
- [7. 质量保障](#7-质量保障)
- [8. 部署与运维](#8-部署与运维)
---
## 1. 项目概述
### 1.1 项目背景
传统DNS解析存在污染问题特别是在访问国际服务时容易受到干扰。本项目旨在基于成熟的MosDNS引擎开发一套智能防污染DNS系统实现
- **智能污染检测**自动识别DNS污染行为
- **动态策略切换**根据域名特征和IP归属智能选择解析策略
- **可视化管理**提供直观的Web界面进行配置管理
- **自动化运维**:支持配置热重载和实时监控
### 1.2 项目目标
#### 🎯 核心目标
- **零配置崩溃**解决MosDNS配置顺序敏感导致的崩溃问题
- **智能防污染**实现基于CN IP地址表的智能污染检测和自动切换
- **可视化管理**提供完整的Web界面进行域名规则管理
- **热重载配置**:无需重启服务即可生效配置变更
#### 📊 性能指标
- **响应时间**< 200ms国内DNS< 500ms国际DNS
- **准确率**> 95%(污染检测准确率)
- **可用性**> 99.9%(服务可用性)
- **并发数**> 1000 QPS
### 1.3 项目范围
#### ✅ 包含功能
- 基于MosDNS的二次开发改造
- 智能防污染插件开发
- 配置智能加载和验证系统
- Web管理界面开发
- 域名规则管理API
- CN IP地址表集成
- MikroTik推送集成
#### ❌ 不包含功能
- 完全自主DNS协议栈开发
- 硬件加速优化
- 多地域部署方案
- 商业化SaaS版本
---
## 2. 需求分析
### 2.1 用户痛点
1. **配置复杂**MosDNS配置语法复杂顺序敏感容易出错
2. **污染检测困难**:传统防污染方案依赖人工判断或简单黑名单
3. **管理不便**:缺乏直观的配置管理界面
4. **运维成本高**:配置变更需要重启服务,可用性差
### 2.2 功能需求
#### 核心功能需求
| 功能模块 | 优先级 | 描述 |
|---------|--------|------|
| 智能防污染 | P0 | 先国内DNS查询返回国外IP则自动切换国际DNS |
| 配置智能加载 | P0 | 自动分析依赖关系,解决配置顺序问题 |
| 可视化规则管理 | P1 | Web界面管理域名路由规则 |
| CN IP地址表集成 | P1 | 自动判断IP归属实现精准污染检测 |
| MikroTik推送 | P2 | 支持RouterOS地址列表自动更新 |
| 热重载配置 | P2 | 无需重启即可生效配置变更 |
#### 非功能需求
| 需求类型 | 具体要求 |
|---------|---------|
| 性能 | 响应时间<200msQPS>1000 |
| 可靠性 | 服务可用性>99.9%,自动故障恢复 |
| 可扩展性 | 支持插件化扩展支持多DNS策略 |
| 安全性 | 支持HTTPS管理接口支持API认证 |
| 可维护性 | 模块化设计,详细日志记录 |
### 2.3 用户场景
#### 场景1日常上网防护
```
用户访问各种网站,系统自动:
- 国内网站 → 国内DNS加速解析
- 国际网站 → 自动检测污染并切换国际DNS
- 未知网站 → 智能判断并选择最优解析策略
```
#### 场景2管理员配置管理
```
管理员通过Web界面
- 添加域名规则(支持域名文件导入)
- 配置DNS策略国内/国际/智能防污染)
- 设置MikroTik推送参数
- 查看实时统计和日志
```
#### 场景3故障排查
```
系统出现异常时:
- 详细错误日志便于定位问题
- 实时监控指标帮助诊断
- 配置验证防止人为错误
- 热重载快速恢复服务
```
---
## 3. 系统架构设计
### 3.1 总体架构
```
┌─────────────────────────────────────────────────────────────────┐
│ 用户层 │
├─────────────────────────────────────────────────────────────────┤
│ 🌐 Web浏览器 → Vue前端 → RESTful API → 业务逻辑层 │
├─────────────────────────────────────────────────────────────────┤
│ 服务层 │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Web管理界面 │ │ 配置生成器 │ │ 智能验证器 │ │ 规则引擎 │ │
│ │ Vue3 + TS │ │ Go API │ │ 依赖分析 │ │ 策略路由 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 核心层 │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ MosDNS引擎 │ │ 防污染插件 │ │ 缓存系统 │ │ 上游管理 │ │
│ │ DNS协议栈 │ │ SmartFallback│ │ LRU Cache │ │ 连接池 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 数据层 │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 域名文件 │ │ CN IP表 │ │ 配置存储 │ │ 日志存储 │ │
│ │ .txt格式 │ │ CIDR格式 │ │ YAML文件 │ │ 文件系统 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
### 3.2 模块划分
#### 前端模块 (Vue3 + TypeScript)
- **RulesView.vue**:域名规则管理界面
- **DashboardView.vue**:系统状态监控面板
- **ConfigView.vue**:配置管理界面
- **api/**HTTP客户端和服务接口
#### 后端模块 (Go)
- **coremain/**:核心业务逻辑
- `config.go`:配置加载和智能排序
- `config_validator.go`:配置验证器
- `config_builder.go`:配置生成器
- `api_handlers.go`Web API接口
- **plugin/executable/smart_fallback/**:智能防污染插件
- **pkg/**:通用工具包
#### 数据存储
- **域名文件**`/data/mikrotik/*.txt`
- **CN IP表**`/data/chn_ip.txt`
- **配置文件**`config.yaml` + `config.d/rules/*.yaml`
- **日志文件**`/var/log/mosdns.log`
### 3.3 数据流设计
#### 配置管理流程
```
1. 用户在Web界面添加规则
2. 前端发送POST请求到 /api/rules
3. API调用配置生成器生成YAML
4. 验证器检查配置合法性
5. 保存到 config.d/rules/ 目录
6. 用户点击重载,热重载配置
7. MosDNS重新加载配置无需重启
```
#### DNS查询流程
```
1. 客户端发起DNS查询
2. MosDNS主序列接收请求
3. 根据域名匹配对应规则
4. 执行对应DNS策略
├─ 国内DNS → 直接转发到国内上游
├─ 国际DNS → 转发到国际上游
└─ 智能防污染 → 执行SmartFallback逻辑
5. 返回解析结果
6. 可选推送IP到MikroTik
```
---
## 4. 技术方案详述
### 4.1 核心技术方案
#### 4.1.1 配置智能加载系统
**问题解决**MosDNS配置顺序敏感导致崩溃
**技术方案**
```go
// 核心算法:拓扑排序
func (c *Config) loadPlugins() error {
// 1. 构建依赖图
graph := buildDependencyGraph(c.Plugins)
// 2. 拓扑排序
sorted := topologicalSort(graph)
// 3. 按正确顺序加载
for _, plugin := range sorted {
c.loadPlugin(plugin)
}
}
```
**依赖图构建**
```go
// 分析 $plugin_name 引用关系
func buildDependencyGraph(plugins []PluginConfig) map[string][]string {
graph := make(map[string][]string)
for _, p := range plugins {
graph[p.Tag] = extractDependencies(p.Args)
}
return graph
}
```
#### 4.1.2 智能防污染插件
**核心算法**
```go
func (s *SmartFallback) Exec(ctx context.Context, qCtx *QueryContext) error {
// 1. 先查询国内DNS
err := s.primary.Exec(ctx, qCtx)
// 2. 检查返回IP是否在CN地址表
if s.isResponseFromChina(qCtx.Response()) {
return nil // 是CN IP直接返回
}
// 3. 非CN IP重新查询国际DNS
return s.secondary.Exec(ctx, qCtx)
}
```
**CN IP检测**
```go
func (s *SmartFallback) isResponseFromChina(resp *dns.Msg) bool {
for _, ans := range resp.Answer {
if a, ok := ans.(*dns.A); ok {
ip := netip.AddrFrom4([4]byte(a.A))
// 检查是否在CN地址表
if matched, _ := s.chinaIPList.Match(ip); !matched {
return false // 国外IP
}
}
}
return true // 全部为CN IP
}
```
#### 4.1.3 配置生成器
**规则定义**
```go
type DomainRule struct {
Name string // 规则名称
DomainFile string // 域名文件路径
DNSStrategy string // DNS策略china-dns/overseas-dns/smart-fallback
EnableMikroTik bool // 是否启用MikroTik推送
MikroTikConfig MikroTikConfig // MikroTik配置
}
```
**自动生成配置**
```go
func (b *ConfigBuilder) AddDomainRule(rule DomainRule) error {
// 1. 创建domain_set插件
domainSet := PluginConfig{
Tag: "domains_" + rule.Name,
Type: "domain_set",
Args: map[string]interface{}{
"files": []string{rule.DomainFile},
},
}
// 2. 创建sequence插件
sequence := PluginConfig{
Tag: "rule_" + rule.Name,
Type: "sequence",
Args: map[string]interface{}{
"exec": []map[string]interface{}{
{
"matches": "qname $" + domainSet.Tag,
"exec": "$" + rule.DNSStrategy,
},
},
},
}
// 3. 添加到主序列
b.addToMainSequence(sequence.Tag)
return nil
}
```
### 4.2 前端技术方案
#### 4.2.1 界面设计原则
- **用户友好**:向导式配置,减少技术门槛
- **实时反馈**:即时验证和错误提示
- **状态可视**:实时显示系统运行状态
- **响应式设计**:支持桌面和移动端访问
#### 4.2.2 核心界面组件
**规则管理表单**
```vue
<template>
<!-- 基础信息卡片 -->
<el-card class="form-section">
<template #header>基础信息</template>
<el-form-item label="规则名称" prop="name">
<el-input v-model="form.name" placeholder="请输入规则名称" />
</el-form-item>
</el-card>
<!-- DNS策略卡片 -->
<el-card class="form-section">
<template #header>DNS解析策略</template>
<el-radio-group v-model="form.dnsStrategy">
<el-radio value="china-dns">🇨🇳 国内DNS</el-radio>
<el-radio value="overseas-dns">🌐 国外DNS</el-radio>
<el-radio value="smart-fallback">🛡️ 智能防污染</el-radio>
</el-radio-group>
</el-card>
<!-- MikroTik配置卡片 -->
<el-card class="form-section">
<template #header>
RouterOS推送配置
<el-switch v-model="form.enableMikrotik" />
</template>
<div v-if="form.enableMikrotik">
<!-- MikroTik参数表单 -->
</div>
</el-card>
</template>
```
### 4.3 数据存储方案
#### 4.3.1 域名文件格式
```
# /data/mikrotik/openai.txt
openai.com
api.openai.com
chat.openai.com
*.openai.com
```
#### 4.3.2 CN IP地址表格式
```
# /data/chn_ip.txt (CIDR格式)
1.0.1.0/24
1.0.2.0/23
1.1.0.0/24
# ... 更多地址段
```
#### 4.3.3 配置文件结构
```
config.yaml # 主配置文件
config.d/
└── rules/
├── openai.yaml # OpenAI规则
├── netflix.yaml # Netflix规则
└── game-cn.yaml # 国内游戏规则
```
---
## 5. 开发计划
### 5.1 总体时间线
```
第1-7天核心功能开发
第8-14天管理层开发
第15-21天前端开发与集成
第22-28天测试与优化
```
### 5.2 详细开发计划
#### 第一阶段核心功能改造1周
| 任务 | 负责人 | 时间 | 交付物 |
|-----|--------|------|--------|
| 配置拓扑排序实现 | 后端开发 | 2天 | `coremain/config.go` |
| 智能防污染插件开发 | 后端开发 | 3天 | `plugin/executable/smart_fallback/` |
| 配置验证器开发 | 后端开发 | 2天 | `coremain/config_validator.go` |
**里程碑**核心DNS功能正常工作配置顺序不敏感
#### 第二阶段管理层开发1周
| 任务 | 负责人 | 时间 | 交付物 |
|-----|--------|------|--------|
| 配置生成器开发 | 后端开发 | 3天 | `coremain/config_builder.go` |
| 规则管理API开发 | 后端开发 | 2天 | API接口文档 |
| 基础Web界面集成 | 前端开发 | 2天 | 基本CRUD界面 |
**里程碑**可通过Web界面管理域名规则
#### 第三阶段前端开发与集成1周
| 任务 | 负责人 | 时间 | 交付物 |
|-----|--------|------|--------|
| Vue界面优化 | 前端开发 | 3天 | 完整管理界面 |
| 实时状态显示 | 前端开发 | 2天 | 监控面板 |
| 用户体验完善 | 前端开发 | 2天 | 交互优化 |
**里程碑**:完整的管理界面,支持所有功能
#### 第四阶段测试与优化1周
| 任务 | 负责人 | 时间 | 交付物 |
|-----|--------|------|--------|
| 功能测试 | 测试工程师 | 2天 | 测试报告 |
| 性能测试 | 测试工程师 | 2天 | 性能报告 |
| 用户体验测试 | 产品经理 | 1天 | UX反馈 |
| 部署测试 | 运维工程师 | 2天 | 部署指南 |
**里程碑**:系统稳定可用,性能达标
### 5.3 人力资源配置
| 角色 | 人数 | 职责 |
|-----|------|------|
| 后端开发工程师 | 1 | Go核心功能开发 |
| 前端开发工程师 | 1 | Vue界面开发 |
| 测试工程师 | 1 | 功能和性能测试 |
| 产品经理 | 1 | 需求分析和用户体验 |
| 运维工程师 | 1 | 部署和运维支持 |
---
## 6. 风险评估与应对
### 6.1 技术风险
#### 高风险
- **配置兼容性**:二次开发可能破坏现有配置
- **应对**保留原有API向后兼容提供迁移指南
- **性能回归**新功能可能影响DNS解析性能
- **应对**:性能基准测试,建立性能监控体系
#### 中风险
- **CN IP表准确性**IP地址表可能过期或不准确
- **应对**:提供自动更新机制,多数据源验证
- **MikroTik集成稳定性**RouterOS API可能不稳定
- **应对**添加重试机制异步处理避免阻塞DNS响应
#### 低风险
- **前端兼容性**:不同浏览器可能表现不一致
- **应对**使用主流UI框架确保跨浏览器兼容
### 6.2 项目风险
#### 高风险
- **时间延误**:核心功能开发可能超出预期
- **应对**采用敏捷开发定期review及时调整计划
- **需求变更**:用户需求可能在开发过程中变化
- **应对**:建立变更控制流程,优先级管理
#### 中风险
- **人员变动**:核心开发人员可能变动
- **应对**:知识共享,建立文档体系,交叉培训
- **技术选型错误**:技术方案可能不符合实际需求
- **应对**:快速原型验证,建立技术评审机制
### 6.3 应对策略
#### 风险监控
- 建立风险登记册,定期评估风险状态
- 设置风险阈值,超过阈值立即采取行动
- 定期向项目组汇报风险状态
#### 应急预案
- 核心功能失败回退到原版MosDNS
- 性能问题:优化算法或降低功能复杂度
- 时间延误:压缩测试时间或减少非核心功能
---
## 7. 质量保障
### 7.1 测试策略
#### 单元测试
- 每个核心函数和模块都需要单元测试
- 测试覆盖率 > 80%
- 边界条件和异常情况必须覆盖
#### 集成测试
- 测试完整的功能流程
- 测试配置生成和加载过程
- 测试防污染逻辑的准确性
#### 性能测试
- 基准性能测试(响应时间、吞吐量)
- 负载测试(高并发场景)
- 稳定性测试(长时间运行)
#### 用户验收测试
- 实际使用场景测试
- 用户体验评估
- 功能完整性验证
### 7.2 代码质量
#### 编码规范
- 遵循Go官方编码规范
- 使用 golint、gofmt 等工具检查
- 统一的错误处理模式
#### 文档要求
- 每个函数和模块必须有注释
- 复杂算法需要详细说明
- 配置文件格式需要文档说明
#### 版本控制
- 使用Git进行版本管理
- 建立分支管理策略master/develop/feature
- 代码审查流程PR审查
### 7.3 质量指标
| 指标类型 | 具体指标 | 目标值 |
|---------|---------|--------|
| 功能性 | 功能覆盖率 | 100% |
| 性能 | 平均响应时间 | < 200ms |
| 可靠性 | 服务可用性 | > 99.9% |
| 可维护性 | 技术债务比 | < 5% |
| 安全性 | 安全漏洞数 | 0 |
---
## 8. 部署与运维
### 8.1 部署方案
#### 开发环境
- 本地开发Go 1.19+Node.js 16+
- 代码管理Git + GitHub
- CI/CDGitHub Actions
#### 测试环境
- Docker容器部署
- 自动化测试流水线
- 性能监控集成
#### 生产环境
- 二进制文件部署(推荐)
- Docker容器部署备选
- Systemd服务管理
### 8.2 运维方案
#### 监控体系
- 应用指标监控响应时间、错误率、QPS
- 系统资源监控CPU、内存、磁盘、网络
- 日志聚合和分析
#### 运维工具
- 配置管理Ansible或脚本自动化
- 日志管理ELK Stack或Loki
- 监控告警Prometheus + Grafana
#### 备份策略
- 配置文件自动备份
- 日志文件定期归档
- 域名文件和IP表备份
### 8.3 升级策略
#### 小版本升级
- 配置热重载,无需停机
- 新功能逐步上线,灰度发布
#### 大版本升级
- 蓝绿部署或滚动升级
- 升级前数据备份和兼容性检查
- 升级后全面验证和监控
---
## 📞 联系方式
- 项目负责人yltx
- 技术支持:相关技术群组
- 文档维护GitHub Wiki
---
*本文档最后更新时间2025年10月15日*

View File

@ -1,450 +0,0 @@
# 🔨 MosDNS 多平台构建脚本使用说明
> 支持 Linux、Windows、macOS 全平台编译,自动构建 Web UI
---
## 📋 脚本对比
| 特性 | Windows 版本 | Linux 版本 |
|------|-------------|-----------|
| 文件名 | `build-all-platforms.bat` | `build-all-platforms.sh` |
| 运行环境 | Windows CMD/PowerShell | Linux/macOS Bash |
| 语法 | 批处理 (.bat) | Shell Script (.sh) |
| 颜色支持 | ✅ 有限支持 | ✅ 完整 ANSI 色彩 |
| 交互菜单 | ✅ | ✅ |
| 自动构建 Vue | ✅ | ✅ |
---
## 🚀 快速开始
### Linux/macOS 使用方法
```bash
# 1. 赋予执行权限
chmod +x build-all-platforms.sh
# 2. 运行脚本
./build-all-platforms.sh
```
### Windows 使用方法
```cmd
# 直接运行批处理文件
build-all-platforms.bat
```
---
## 📝 功能特性
### 1. 自动环境检查
**检查项目**:
- ✅ Go 环境是否安装
- ✅ Node.js 环境(用于构建 Vue
- ✅ npm 包管理器
- ✅ Vue 前端是否已构建
**自动处理**:
```bash
# 如果 web-ui/dist 不存在,自动执行:
cd web-ui
npm install # 安装依赖
npm run build # 构建前端
cd ..
```
---
### 2. 交互式菜单
```
╔════════════════════════════════════════════╗
║ MosDNS 多平台构建工具 (带 Web UI) ║
╚════════════════════════════════════════════╝
请选择要编译的平台:
[1] Linux AMD64 (x86_64 服务器)
[2] Linux ARM64 (树莓派、ARM 服务器)
[3] Windows AMD64 (Windows 64位)
[4] macOS AMD64 (Intel Mac)
[5] macOS ARM64 (Apple Silicon M1/M2/M3)
[6] 编译所有 Linux 版本 (AMD64 + ARM64)
[7] 编译所有 macOS 版本 (AMD64 + ARM64)
[8] 编译所有 Windows 版本 (仅 AMD64)
[A] 编译全部平台 (推荐用于发布)
[0] 退出
```
---
### 3. 支持的平台
| 平台 | 架构 | 输出文件 | 用途 |
|------|------|---------|------|
| **Linux** | AMD64 | `mosdns-linux-amd64` | x86_64 服务器 |
| **Linux** | ARM64 | `mosdns-linux-arm64` | 树莓派、ARM 服务器 |
| **Windows** | AMD64 | `mosdns-windows-amd64.exe` | Windows 64位 |
| **macOS** | AMD64 | `mosdns-darwin-amd64` | Intel Mac |
| **macOS** | ARM64 | `mosdns-darwin-arm64` | Apple Silicon (M1/M2/M3) |
---
### 4. 构建参数
**自动设置**:
```bash
VERSION="v5.0.0-webui"
BUILD_TIME=$(date '+%Y-%m-%d %H:%M:%S')
CGO_ENABLED=0
LDFLAGS="-s -w -X 'main.version=$VERSION' -X 'main.buildTime=$BUILD_TIME'"
```
**编译优化**:
- `-s`: 去除符号表(减小体积)
- `-w`: 去除 DWARF 调试信息(减小体积)
- `CGO_ENABLED=0`: 静态编译,无需外部依赖
---
## 📊 构建流程
### 完整流程示意图
```
┌─────────────────────────────────────────┐
│ 1. 检查 Go 环境 │
└─────────────┬───────────────────────────┘
┌─────────────────────────────────────────┐
│ 2. 检查/构建 Vue 前端 │
│ - 检查 web-ui/dist/index.html │
│ - 如不存在npm install && npm build │
└─────────────┬───────────────────────────┘
┌─────────────────────────────────────────┐
│ 3. 显示平台选择菜单 │
└─────────────┬───────────────────────────┘
┌─────────────────────────────────────────┐
│ 4. 初始化构建参数 │
│ - 设置版本号、构建时间 │
│ - 创建 dist/ 目录 │
│ - 设置 LDFLAGS │
└─────────────┬───────────────────────────┘
┌─────────────────────────────────────────┐
│ 5. 执行跨平台编译 │
│ - 设置 GOOS, GOARCH │
│ - go build -ldflags="..." │
└─────────────┬───────────────────────────┘
┌─────────────────────────────────────────┐
│ 6. 显示构建结果 │
│ - 列出构建产物 │
│ - 显示文件大小 │
│ - 提供使用说明 │
└─────────────┬───────────────────────────┘
┌─────────────────────────────────────────┐
│ 7. 询问是否继续 (循环) │
└─────────────────────────────────────────┘
```
---
## 🎨 输出示例
### 成功构建
```bash
════════════════════════════════════════════
🎉 构建完成!
📦 构建产物列表:
mosdns-darwin-amd64
mosdns-darwin-arm64
mosdns-linux-amd64
mosdns-linux-arm64
mosdns-windows-amd64.exe
📊 文件大小详情:
mosdns-linux-amd64 - 24M
mosdns-linux-arm64 - 23M
mosdns-windows-amd64.exe - 24M
mosdns-darwin-amd64 - 24M
mosdns-darwin-arm64 - 23M
════════════════════════════════════════════
📝 使用方法:
Linux:
chmod +x dist/mosdns-linux-amd64
./dist/mosdns-linux-amd64 start -c config.yaml
Windows:
dist\mosdns-windows-amd64.exe start -c config.yaml
macOS:
chmod +x dist/mosdns-darwin-amd64
./dist/mosdns-darwin-amd64 start -c config.yaml
🌐 Web 管理界面: http://localhost:5555
💡 提示: 所有可执行文件已内嵌 Web 资源,可独立运行
```
---
## 🔧 高级用法
### 1. 仅构建 Vue 前端
```bash
cd web-ui
npm install
npm run build
```
### 2. 手动编译单个平台
```bash
# Linux AMD64
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags="-s -w" -o dist/mosdns-linux-amd64 .
# macOS ARM64
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \
go build -ldflags="-s -w" -o dist/mosdns-darwin-arm64 .
# Windows AMD64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
go build -ldflags="-s -w" -o dist/mosdns-windows-amd64.exe .
```
### 3. 自定义版本号
**编辑脚本**:
```bash
# Linux 脚本 (build-all-platforms.sh)
VERSION="v5.0.0-webui" # 修改此行
# Windows 脚本 (build-all-platforms.bat)
set "VERSION=v5.0.0-webui" # 修改此行
```
### 4. 自定义输出目录
```bash
# Linux 脚本
OUTPUT_DIR="dist" # 修改为 "release" 或其他目录
# Windows 脚本
set "OUTPUT_DIR=dist" # 修改为 "release" 或其他目录
```
---
## 🐛 故障排查
### 问题 1: Go 环境未找到
**错误信息**:
```
❌ Go 未安装或不在 PATH 中
```
**解决方案**:
```bash
# 检查 Go 是否安装
which go
go version
# 如未安装,请访问 https://golang.org/dl/
# 或使用包管理器安装
sudo apt install golang-go # Debian/Ubuntu
brew install go # macOS
```
---
### 问题 2: Node.js 环境未找到
**错误信息**:
```
❌ Node.js 未安装,无法构建 Vue 前端
```
**解决方案**:
```bash
# 检查 Node.js
node --version
npm --version
# 如未安装
sudo apt install nodejs npm # Debian/Ubuntu
brew install node # macOS
# 或访问 https://nodejs.org/
```
---
### 问题 3: Vue 构建失败
**错误信息**:
```
❌ Vue 构建失败
ERROR: "type-check" exited with 1.
```
**解决方案**:
```bash
# 已修复 TypeScript 类型错误
# 确保使用最新代码
cd web-ui
npm install
npm run build
```
---
### 问题 4: 权限不足 (Linux/macOS)
**错误信息**:
```
bash: ./build-all-platforms.sh: Permission denied
```
**解决方案**:
```bash
# 赋予执行权限
chmod +x build-all-platforms.sh
# 或使用 bash 执行
bash build-all-platforms.sh
```
---
## 📦 构建产物说明
### 文件大小
| 平台 | 预期大小 | 说明 |
|------|---------|------|
| Linux AMD64 | ~24MB | 包含完整 Web UI |
| Linux ARM64 | ~23MB | ARM 架构稍小 |
| Windows AMD64 | ~24MB | .exe 可执行文件 |
| macOS AMD64 | ~24MB | Intel Mac |
| macOS ARM64 | ~23MB | Apple Silicon |
### 内嵌资源
每个可执行文件都包含:
- ✅ MosDNS 核心引擎
- ✅ 所有插件(包括 smart_fallback, mikrotik_addresslist 等)
- ✅ Vue 3 Web 管理界面(完整 SPA
- ✅ 热加载功能
- ✅ RESTful API
**优势**:
- 🚀 单文件部署,无需额外依赖
- 📦 开箱即用,无需安装 Node.js
- 🔒 资源嵌入二进制,安全可靠
---
## 🎯 最佳实践
### 1. 发布版本构建
```bash
# 选择 [A] 编译全部平台
./build-all-platforms.sh
# 输入: A
# 构建产物
dist/
├── mosdns-darwin-amd64
├── mosdns-darwin-arm64
├── mosdns-linux-amd64
├── mosdns-linux-arm64
└── mosdns-windows-amd64.exe
```
### 2. 测试单平台
```bash
# 选择 [1] 仅编译 Linux AMD64
./build-all-platforms.sh
# 输入: 1
# 立即测试
chmod +x dist/mosdns-linux-amd64
./dist/mosdns-linux-amd64 start -c config.yaml
```
### 3. CI/CD 集成
```yaml
# GitHub Actions 示例
- name: Build all platforms
run: |
chmod +x build-all-platforms.sh
echo "A" | ./build-all-platforms.sh
```
---
## 📚 相关文档
- [Go 跨平台编译文档](https://golang.org/doc/install/source#environment)
- [MosDNS 项目文档](./README.md)
- [Vue 3 构建配置](./web-ui/README.md)
- [热加载功能说明](./热加载功能实现总结.md)
- [TypeScript 类型修复](./TypeScript类型错误修复.md)
---
## 🎉 总结
### Linux 版本脚本特性
**完整功能对等** - 与 Windows 版本功能完全一致
**彩色输出** - 使用 ANSI 色彩增强可读性
**交互式菜单** - 友好的用户界面
**错误处理** - 完善的错误检测和提示
**跨平台编译** - 支持 5 种平台架构
**自动化流程** - Vue 前端自动构建
### 使用场景
- 🖥️ **Linux 服务器**: 直接在服务器上构建
- 🍎 **macOS 开发机**: 本地开发和测试
- 🐳 **Docker 容器**: 容器化构建环境
- 🔄 **CI/CD 管道**: 自动化构建和发布
---
**🔨 构建脚本已准备就绪,开始构建您的 MosDNS**
*更新时间: 2025-10-16*
*版本: v1.0*

View File

@ -1,459 +0,0 @@
# 🎉 YLTX-DNS 项目最终总结
> 完成时间: 2025-10-16
> 状态: ✅ 全部完成并可生产使用
---
## 📊 项目概览
### 完成的主要功能
| 功能模块 | 状态 | 代码量 | 说明 |
|---------|------|--------|------|
| **智能防污染** | ✅ 完成 | 268行 | CN IP检测 + 自动切换DNS |
| **配置热加载** | ✅ 完成 | 161行 | 无需重启即可重新加载配置 |
| **拓扑排序** | ✅ 修复 | 175行 | 支持任意配置顺序 |
| **Web 管理界面** | ✅ 完成 | 2080行 | Vue 3 完整管理系统 |
| **构建脚本** | ✅ 完成 | 379行 | 多平台编译支持 |
| **配置文件** | ✅ 完成 | 5个 | 开发/生产/测试配置 |
| **启动脚本** | ✅ 完成 | 3个 | 一键启动 |
| **文档体系** | ✅ 完成 | 10份 | 完整的使用和开发文档 |
---
## 🔧 今日完成的工作
### 1. 拓扑排序Bug修复 ⭐ **核心修复**
**问题**:
- 服务器插件无法检测依赖关系(`entry: main`
- 拓扑排序算法逻辑错误,结果颠倒
**修复**:
```go
// pkg/utils/toposort.go
// 1. 增强依赖检测 - 支持 entry: 字段
entryPrefix := "entry:"
for {
idx := stringIndexFrom(configStr, entryPrefix, entryIdx)
if idx == -1 {
break
}
// 提取 entry 值
entryValue := configStr[start:end]
deps = append(deps, entryValue)
}
// 2. 修正拓扑排序算法
// 反转依赖图,正确计算入度
reversedGraph := make(map[string][]string)
for node := range graph {
for _, dep := range graph[node] {
reversedGraph[dep] = append(reversedGraph[dep], node)
}
}
inDegree := make(map[string]int)
for node := range allNodes {
inDegree[node] = len(graph[node]) // 直接使用依赖数量
}
```
**结果**: ✅ 插件可以任意顺序编写,自动按依赖关系排序
---
### 2. 热加载功能实现
**文件**: `coremain/hot_reload.go` (161行)
**核心功能**:
```go
type HotReloadManager struct {
mosdns *Mosdns
mu sync.RWMutex
isReloading bool
configPath string
}
func (hrm *HotReloadManager) Reload() (int, error) {
// 1. 加载新配置
// 2. 验证配置
// 3. 备份旧插件
// 4. 加载新插件
// 5. 失败时回滚
// 6. 关闭旧插件
// 7. 更新配置引用
}
```
**API**: `POST /api/config/reload`
**测试**: ✅ 成功实现零停机配置更新
---
### 3. TypeScript类型错误修复
**问题**:
1. ESLint配置类型推断错误
2. DNS策略类型缺少 `smart-fallback`
**修复**:
```typescript
// web-ui/eslint.config.ts
import type { Linter } from 'eslint'
export default defineConfigWithVueTs(...) as Linter.Config[]
// web-ui/src/api/rules.ts
dns_strategy: 'china' | 'cloudflare' | 'google' | 'hybrid' | 'anti-pollution' | 'smart-fallback'
```
**结果**: ✅ 前端可以正常编译构建
---
### 4. Linux构建脚本
**文件**: `build-all-platforms.sh` (379行)
**特性**:
- ✅ 彩色交互式菜单
- ✅ 自动检测环境
- ✅ 自动构建Vue前端
- ✅ 支持5个平台编译
- ✅ 详细的构建报告
---
### 5. 配置文件生成
| 文件 | 用途 | 特点 |
|------|------|------|
| `config.yaml` | 标准配置 | 包含所有功能 |
| `config-production.yaml` | 生产环境 | 性能优化 |
| `config-working.yaml` | 最小配置 | 快速测试 |
| `config-simple.yaml` | 简化版 | 调试用 |
| `config-test.yaml` | 测试用 | 最小功能 |
---
### 6. 启动方案
#### 快速启动脚本
```bash
./start.sh # 一键启动,自动检测和编译
```
#### systemd 服务
```bash
sudo systemctl start mosdns
```
#### Docker 容器
```bash
docker run -d mosdns:latest
```
---
### 7. 文档体系
| 文档 | 大小 | 说明 |
|------|------|------|
| `YLTX-DNS智能防污染系统-二次开发总结.md` | 30KB | 完整总结 |
| `yltx-dns-智能防污染系统-架构设计文档.md` | 20KB | 架构设计 |
| `功能实现清单.md` | 11KB | 功能清单 |
| `快速参考.md` | 9.1KB | 快速参考 |
| `启动指南.md` | 9.6KB | 启动说明 |
| `构建脚本使用说明.md` | - | 编译指南 |
| `拓扑排序修复说明.md` | - | 修复文档 |
| `README-启动说明.md` | 2.4KB | 快速入门 |
---
## 📈 代码统计
### 总代码量
```
后端核心代码: ~3,500 行 Go
前端代码: ~2,080 行 Vue/TS
配置文件: ~500 行 YAML
测试脚本: ~400 行 Bash
文档: ~80KB (10份)
────────────────────────────────
总计: ~6,500 行代码
```
### 关键文件
| 文件 | 行数 | 说明 |
|------|------|------|
| `coremain/api_handlers.go` | 1,161 | API接口 |
| `coremain/rule_handlers.go` | 638 | 规则管理 |
| `coremain/config_builder.go` | 428 | 配置生成 |
| `coremain/config_validator.go` | 302 | 配置验证 |
| `coremain/web_ui.go` | 278 | Web服务器 |
| `plugin/executable/smart_fallback/` | 268 | 智能防污染 |
| `coremain/hot_reload.go` | 161 | 热加载 |
| `pkg/utils/toposort.go` | 175 | 拓扑排序 |
| `build-all-platforms.sh` | 379 | 构建脚本 |
---
## ✅ 测试验证
### 功能测试
| 测试项 | 结果 |
|--------|------|
| ✅ 拓扑排序 | 通过 - 任意配置顺序正常加载 |
| ✅ 热加载 | 通过 - 插件数量从2个→3个 |
| ✅ 智能防污染 | 通过 - CN IP检测正常 |
| ✅ Web管理界面 | 通过 - 所有页面正常访问 |
| ✅ API接口 | 通过 - 20+接口全部正常 |
| ✅ DNS解析 | 通过 - UDP/TCP正常工作 |
| ✅ 跨平台编译 | 通过 - 5个平台全部成功 |
| ✅ 配置验证 | 通过 - 启动前完整验证 |
### 性能测试
```
启动时间: < 2秒
内存占用: 30-50MB (空载)
DNS延迟: 20-30ms (国内), 80-120ms (智能防污染)
缓存命中率: 85%+
并发能力: 3000+ qps (单核)
```
---
## 🎯 使用指南
### 快速启动
```bash
# 方式1: 一键启动(推荐)
./start.sh
# 方式2: 直接运行
./dist/mosdns-linux-amd64 start -c config.yaml
# 方式3: systemd服务
sudo systemctl start mosdns
```
### 访问服务
```
DNS 服务: localhost:5310 (或 :53 使用sudo)
Web 管理界面: http://localhost:5555
API 接口: http://localhost:8080
```
### 热加载配置
```bash
# 修改配置文件后
curl -X POST http://localhost:5555/api/config/reload
```
### 测试 DNS
```bash
dig @localhost -p 5310 baidu.com
dig @localhost -p 5310 google.com
```
---
## 📚 文档导航
### 新手入门
1. 📖 `README-启动说明.md` - **从这里开始!**
2. 📖 `启动指南.md` - 完整启动文档
3. 📖 `快速参考.md` - 常用命令
### 开发文档
1. 📖 `YLTX-DNS智能防污染系统-二次开发总结.md` - 完整总结
2. 📖 `yltx-dns-智能防污染系统-架构设计文档.md` - 架构设计
3. 📖 `拓扑排序修复说明.md` - Bug修复记录
### 运维文档
1. 📖 `构建脚本使用说明.md` - 编译指南
2. 📖 `功能实现清单.md` - 功能清单
---
## 🏆 项目亮点
### 技术亮点
1. **智能拓扑排序**
- 自动分析依赖关系
- 支持任意配置顺序
- 检测循环依赖
2. **配置热加载**
- 零停机更新
- 自动回滚机制
- 完整错误处理
3. **智能防污染**
- CN IP精准检测
- 自动切换DNS
- 性能优化(顺序/并行模式)
4. **Web 管理界面**
- Vue 3 + TypeScript
- 响应式设计
- 一键操作
5. **单文件部署**
- 20MB二进制文件
- 内嵌Web资源
- 开箱即用
---
### 用户体验亮点
1. **零配置门槛**
- Web界面可视化管理
- 表单驱动配置生成
- 无需理解YAML语法
2. **一键启动**
- `./start.sh` 即可
- 自动检测和编译
- 详细状态提示
3. **完整文档**
- 10份文档80KB+
- 从入门到精通
- 实例丰富
4. **开发友好**
- 热加载配置
- 详细日志
- API完整
---
## 🚀 后续规划
### 可选扩展功能
1. **配置文件监控**
- 自动检测文件变化
- 可选的自动热加载
2. **热加载历史**
- 记录每次热加载
- 配置版本管理
- 一键回滚
3. **分阶段热加载**
- 先加载新插件
- 平滑切换流量
- 渐进式更新
4. **插件级别热加载**
- 只重载指定插件
- 更细粒度控制
5. **Docker优化**
- 官方Docker镜像
- docker-compose示例
- K8s部署yaml
---
## 💾 交付清单
### 源代码
- ✅ 后端核心代码 (3,500行 Go)
- ✅ 前端代码 (2,080行 Vue/TS)
- ✅ 构建脚本 (2个)
- ✅ 测试脚本 (3个)
### 配置文件
- ✅ 生产配置 × 1
- ✅ 开发配置 × 1
- ✅ 测试配置 × 3
- ✅ 数据文件 (CN IP、域名)
### 文档
- ✅ 完整文档体系 (10份80KB+)
- ✅ API文档
- ✅ 架构文档
- ✅ 使用指南
### 构建产物
- ✅ Linux AMD64二进制 (26MB)
- ✅ 包含完整Web界面
- ✅ 生产就绪
---
## 🎊 总结
### 完成度: **100%**
所有计划功能已全部实现并测试通过:
1. ✅ 智能防污染系统
2. ✅ 配置热加载
3. ✅ Web管理界面
4. ✅ 拓扑排序修复
5. ✅ 完整文档体系
6. ✅ 构建和部署方案
### 代码质量: ⭐⭐⭐⭐⭐
- 完整的错误处理
- 详细的注释文档
- 符合Go最佳实践
- 通过所有测试
### 用户体验: ⭐⭐⭐⭐⭐
- 一键启动
- Web可视化管理
- 零配置门槛
- 完整文档支持
---
## 📞 技术支持
### 常见问题
**Q: 启动失败怎么办?**
A: 查看 `启动指南.md` 的"故障排查"章节
**Q: 如何修改配置?**
A: 访问 Web界面 http://localhost:5555 或编辑 config.yaml
**Q: 如何热加载配置?**
A: `curl -X POST http://localhost:5555/api/config/reload`
**Q: 如何编译其他平台?**
A: 运行 `./build-all-platforms.sh` 选择对应平台
---
**🎉 YLTX-DNS 智能防污染系统开发完成!**
*完成时间: 2025-10-16*
*开发周期: ~2天*
*代码质量: ⭐⭐⭐⭐⭐*
*项目状态: ✅ 生产就绪*
---
**感谢使用 YLTX-DNS**