删除多个文档和脚本,包括构建说明、Gitea 发布指南、初始化命令说明及相关配置文件,简化项目结构以提升可维护性和用户体验。
Some checks are pending
Test mosdns / build (push) Waiting to run
Some checks are pending
Test mosdns / build (push) Waiting to run
This commit is contained in:
parent
253ae57393
commit
94be66ae6e
178
BUILD-USAGE.md
178
BUILD-USAGE.md
@ -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
110
Gitea.sh
@ -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 "========================================="
|
||||
370
Gitea发布指南.md
370
Gitea发布指南.md
@ -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 服务器!** 🚀
|
||||
|
||||
294
Gitea更新说明.md
294
Gitea更新说明.md
@ -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`
|
||||
|
||||
---
|
||||
|
||||
🎉 **祝推送顺利!**
|
||||
|
||||
402
README-一键部署.md
402
README-一键部署.md
@ -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)*
|
||||
|
||||
147
README-启动说明.md
147
README-启动说明.md
@ -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 界面管理所有配置!
|
||||
@ -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"
|
||||
|
||||
772
data/chn_ip.txt
772
data/chn_ip.txt
@ -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
|
||||
116332
data/geosite_china-list.txt
116332
data/geosite_china-list.txt
File diff suppressed because it is too large
Load Diff
BIN
dist/mosdns-linux-amd64
vendored
BIN
dist/mosdns-linux-amd64
vendored
Binary file not shown.
119
init功能说明.md
119
init功能说明.md
@ -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 了!**
|
||||
72
start.sh
72
start.sh
@ -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
130
v2dat.sh
@ -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 ""
|
||||
@ -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 | 无需重启即可生效配置变更 |
|
||||
|
||||
#### 非功能需求
|
||||
|
||||
| 需求类型 | 具体要求 |
|
||||
|---------|---------|
|
||||
| 性能 | 响应时间<200ms,QPS>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/CD:GitHub Actions
|
||||
|
||||
#### 测试环境
|
||||
- Docker容器部署
|
||||
- 自动化测试流水线
|
||||
- 性能监控集成
|
||||
|
||||
#### 生产环境
|
||||
- 二进制文件部署(推荐)
|
||||
- Docker容器部署(备选)
|
||||
- Systemd服务管理
|
||||
|
||||
### 8.2 运维方案
|
||||
|
||||
#### 监控体系
|
||||
- 应用指标监控(响应时间、错误率、QPS)
|
||||
- 系统资源监控(CPU、内存、磁盘、网络)
|
||||
- 日志聚合和分析
|
||||
|
||||
#### 运维工具
|
||||
- 配置管理:Ansible或脚本自动化
|
||||
- 日志管理:ELK Stack或Loki
|
||||
- 监控告警:Prometheus + Grafana
|
||||
|
||||
#### 备份策略
|
||||
- 配置文件自动备份
|
||||
- 日志文件定期归档
|
||||
- 域名文件和IP表备份
|
||||
|
||||
### 8.3 升级策略
|
||||
|
||||
#### 小版本升级
|
||||
- 配置热重载,无需停机
|
||||
- 新功能逐步上线,灰度发布
|
||||
|
||||
#### 大版本升级
|
||||
- 蓝绿部署或滚动升级
|
||||
- 升级前数据备份和兼容性检查
|
||||
- 升级后全面验证和监控
|
||||
|
||||
---
|
||||
|
||||
## 📞 联系方式
|
||||
|
||||
- 项目负责人:yltx
|
||||
- 技术支持:相关技术群组
|
||||
- 文档维护:GitHub Wiki
|
||||
|
||||
---
|
||||
|
||||
*本文档最后更新时间:2025年10月15日*
|
||||
450
构建脚本使用说明.md
450
构建脚本使用说明.md
@ -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*
|
||||
|
||||
459
项目最终总结.md
459
项目最终总结.md
@ -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!**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user