聚合 DNS 管理系统,自建三网分流优选 IP

聚合 DNS 管理系统,自建三网分流优选 IP

群友 Jin x 推荐的神器,彩虹聚合 DNS 管理系统,抱着玩玩看的心态部署了一个,看了一下确实很强大,现将部署过程与大家分享一下

项目简介

彩虹聚合 DNS 管理系统 是一款基于 ThinkPHP 开发的网站程序,可实现在单一网站内管理多个平台的域名解析,目前已支持的域名解析平台有:阿里云、腾讯云、华为云、百度云、西部数码、火山引擎、DNSLA、CloudFlare、Namesilo、PowerDNS

功能特性

  • 多用户管理: 可为每个用户可分配不同的域名解析权限;
  • 提供 API 接口: 可获取域名单独的登录链接,方便各种 IDC 系统对接;
  • 容灾切换功能: 支持 ping、tcp、http(s) 检测协议并自动暂停/修改域名解析,并支持发送通知;
  • 定时切换功能: 设置在指定时间/周期,自动修改/开启/暂停/删除域名解析;
  • CF 优选 IP 功能: 支持获取最新的 Cloudflare 优选 IP,并自动更新到解析记录;
  • SSL 证书申请与自动部署: 支持从 Let’s Encrypt 等渠道申请 SSL 证书,并自动部署到各种面板、云服务商、服务器等;
  • 多种通知渠道: 支持邮件、微信公众号、Telegram、钉钉、飞书、企业微信等。

官方仓库

部署方式

官方提供了两种部署方式:

  • PHP 程序 —— 可部署到 VPS 或虚拟主机
  • DOCKER —— 可部署于 VPS 或支持 docker 的容器,如 zeabur、leaflow、爪云、猫云等

本文只讲 PHP 部署,并以 Serv00 虚拟主机为例

需要其他部署方式的,请移步官方仓库 README.md 文件

步骤一:创建数据库

在 Serv00 上创建一个 mysql 类型的数据库,你也可以在自己的服务器上创建,或在免费的 db4free 上免费创建一个

此处以 Serv00 为例(下文若无特殊说明,均以 Serv00 为例)

  • 登录 Serv00 网页面板
  • 依次点击左侧 mysql → 顶部标签 Add database

image.png

  • 记录以下数据备用
    • HOST:数据库域名,如 mysql10.serv00.com,如果你是 S11 服务器,那域名就是 mysql11.serv00.com
    • Database name:数据库名称
    • Username:数据库用户名
    • Password:数据库密码

步骤二:创建网站

  • 依次点击 WWW websiteAdd new website
  • 填入你自己的域名,可以是托管在 CF 的,也可以是未托管的,点击 添加

image.png

步骤三:申请证书

  • 点击 Manage SSL certificates 标签,出现两个 IP
  • 将其中一个 IP 解析到你的域名,暂不开启小黄云
  • 解析完成后,点击 IP 后面的 manage 按钮,开始添加证书

image.png

  • 如果你的域名托管在 CF,可以先到 CF 那里申请 15 年源证书并分别保存到记事本
  • 然后选择你刚刚创建的域名,将证书上传到此处

image.png

  • 如果你不会申请 CF 证书,Type 那里选择自签证书,并选择你的域名

image.png

  • 现在访问你的域名,已经可以打开默认的首页

步骤四:部署项目

1. 到官方仓库下载源码

下载当前最新版本 Releases · netcccyun/dnsmgr

2. 上传源码

  • 回到主机的网页管理面板,点击 File manager 进入文件管理器
  • 在文件列表中找到你的域名文件夹,将刚刚下载的 ZIP 包上传到 public_html 目录下,完整路径 /domains/你的域名/public_html
  • 上传完成后双击进入压缩包,全选所有文件,右键选择 解压
  • 全部解压到 /domains/你的域名/public_html

image.png

3. 重写根路径

由于项目是用 think php 开发,其根路径没有 index.php 文件,而是在 /public 文件夹下

因此现在直接访问域名无法进入项目,需要访问 https://域名/public 才能进入首页

对于完美主义者,这当然不能接受,我们可以重写路径来解决

  • 方法一:(推荐)
    • /domains/你的域名/public_html 下新建 .htaccess 文件,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 基础安全设置
Options -Indexes
RewriteEngine On

# 2. 核心重定向逻辑
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

# 3. 拦截敏感文件(防止直接访问根目录下的隐私文件)
<FilesMatch "^\.env|composer\.(json|lock)|package\.json|(?i:readme|license|changelog)\.md|^\.git|^\.htaccess">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
</IfModule>
</FilesMatch>
  • 方法二:
    • 通过 SSH 连接服务器,运行以下命令:
1
devil www edit <此处改为你的域名> public_directory /public_html/public

4. 进入主页初始化项目

现在访问你的域名 https://项目域名,进入到初始化页面

按照要求填写数据库相关信息,以及管理员账号和密码,然后登录

image.png

进阶玩法

实现自动查询域名到期时间(不支持二级域名)、证书到期时间并定时通知

  • 进入虚拟主机管理页面,点击 cron-job 定时任务
  • 添加一个定时任务,每 5 分钟执行一次以下命令
1
pgrep -f "think certtask" > /dev/null || (cd /usr/home/你的用户名/domains/你的项目域名/public_html/ && /usr/local/bin/php think certtask > /dev/null 2>&1)

image.png

启动自动容灾服务

  • 服务用途:支持 ping、tcp、http(s) 检测协议并自动暂停/修改域名解析

  • 默认情况下,项目后台管理中看到的这个服务是停止状态

  • 按以下步骤来启动它:

    • 连接 ssh 登录 Serv00
    • 执行命令 find /usr/local/lib/php -name "swoole.so" 2>/dev/null
    • 如果返回类似 /usr/local/lib/php/20230831/swoole.so 这样的代码,说明你的主机支持 Swoole组件,记住这个路径,继续往下操作
    • 如果没有返回或提示找不到,去 github 看看有没有已经编译好的 FreeBSD 系统的 swoole.so
    • 如果也没有,那就放弃这一步
  • 依次运行以下命令启动服务

1
2
3
cd /usr/home/yutian010/domains/s10dns.kaic.hidns.co/public_html
nohup php -d extension=/usr/local/lib/php/20230831/swoole.so think dmtask
# 此处路径必须与ssh中返回的路径一致
  • 现在再去看项目管理后台的容灾服务,已经处于运行状态

image.png

  • 设置定时任务确保服务不会终止
    • 回到 Serv00 管理面板的定时任务中,添加两条,执行的命令为
1
2
pgrep -f "think dmtask" > /dev/null || (cd /usr/home/你的用户名/domains/你的项目域名/public_html/ && /usr/local/bin/php -d extension=/usr/local/lib/php/20230831/swoole.so think dmtask > /dev/null 2>&1)
# 注意此处的 swoole.so 文件路径必须与 ssh 中返回的文件路径保持一致

image.png

至此,项目部署已经完成。关于如何添加域名账户、域名管理、CF 优选 IP 等等,就自行摸索去吧

#容器 #域名 #建站 #DNS