用 BIND 自建 DNS 并配上中文管理面板:从零到一的完整安装演示(nodejs 主力版)
本文目录
如果你自己管着一台服务器、又想让域名解析不再依赖注册商的控制台,自建一套 DNS 是个不错的选择。最近把一套 BIND9 的中文管理面板开源整理出来了,本文就以 nodejs 主力分支 为例,把从零到一怎么装、怎么配、怎么用完整走一遍。
项目地址:dns-hanyuxin-BIND
为什么自建 DNS
大多数人对 DNS 的认知停留在「在注册商后台加点解析记录」。这套面板要解决的是更认真运维时的几个痛点:
- 不想登录注册商后台,想有一个自托管的、统一管理多个域名的解析控制台
- 需要主备:一台 DNS 挂了,另一台能顶上
- 要 DNSSEC:签名、DS 提交、退役,手动操作很繁琐
- 想用 AI 直接管:用自然语言改解析记录,而不是点十几个下拉框
这套项目就是围绕这些需求做的,而且为了照顾不同环境,提供了三个语言版本,按分支维护。
三分支怎么选
| 分支 | 技术栈 | 定位 | 安装 |
|---|---|---|---|
pythonbcp |
Python 3 + Flask + SQLite | BIND 控制面板,单机自建首选,轻量装完即用 | git clone + sudo bash install.sh |
nodejs |
Node.js 22 + Fastify + Vue 3 | 主力版本,功能最全:多节点主备、DNSSEC、URL 转发、AI(MCP)、整机备份恢复、在线更新 | curl ... install-nodejs.sh | sudo bash |
java |
Java 21(纯 JDK 标准库) | 独立域名控制台/API:域名 CRUD、解析记录、TXT 所有权验证、支付订单入口 | curl ... install-java.sh | sudo bash |
选型很简单:
- 就想快速把服务器变成 DNS 服务器、界面简洁够用 → pythonbcp
- 认真运维一套 DNS:主备、DNSSEC、监控、备份、AI 助手 → nodejs
- 只要一个对外域名控制台(不含 BIND 管理)→ java
接下来全程以 nodejs 主力版 为例。
安装演示(nodejs 主力版)
0. 前置要求
生产部署要满足下面几点,缺一个都可能卡住:
- Linux 发行版:支持
apt-get(Debian/Ubuntu)、dnf(Rocky/Fedora)或yum(CentOS)任一包管理方式 - systemd:面板以 systemd 服务托管,需可用
- root 权限:安装器用
sudo执行,因为要装 Node.js、Nginx,并让面板控制 BIND(53 端口需要 root) - 网络可达:服务器要能访问代码仓库、Node.js 官方发布源和系统软件源
- 一台干净的 Linux 服务器(建议 1 核 1G 起步,实际跑 BIND 按你的域名量来)
1. 一键安装
curl -fsSL https://cnb.cool/hanyuxin/dns-hanyuxin-BIND/-/git/raw/nodejs/install-nodejs.sh \
| sudo bash
安装器会自动完成这些事:
- 读取 Node.js 官方发布表,安装或升级到最新 LTS(当前为 Node.js 22)
- Nginx 使用官方 mainline 软件源
- 程序先在暂存目录构建,再替换并验证本次部署
- 构建或验证失败会自动回滚,不会把半成品留在线上
装完默认访问 http://服务器IP:16723,程序目录 /opt/bind-panel,systemd 服务名 bind-panel。
2. 域名 + HTTPS 反代
想让面板走 https://panel.example.com(而不是裸 IP 端口),先把面板域名解析到这台服务器,再执行(把 panel.example.com 换成你的域名):
curl -fsSL https://cnb.cool/hanyuxin/dns-hanyuxin-BIND/-/git/raw/nodejs/install-nodejs.sh \
| sudo env \
PANEL_HOST=0.0.0.0 \
PANEL_DOMAIN=panel.example.com \
PANEL_PUBLIC_URL=https://panel.example.com \
bash
证书这块:
- 默认用免费的 Let's Encrypt,走 HTTP-01 文件验证,不需要 EAB
- 要求 TCP 80 公网可达(验证用)、TCP 443 用于面板 HTTPS
- 证书由 Certbot 管理,续期部署钩子自动重载 Nginx
- 证书申请失败时会保留 HTTP 反代,安装输出会说明实际可用地址
- 已有证书可复用;要收续期邮件可设
ACME_EMAIL
若只在本机反代后面跑、不直接暴露面板,可把
PANEL_HOST设为127.0.0.1,更安全。
3. 首次登录
默认管理员用户名为 hanyuxin,初始密码每台主控独立随机生成,安装日志不会输出密码。在服务器上查看:
sudo cat /opt/bind-panel/instance/bootstrap-admin.json
登录后务必到「账号安全」改密码——改完会自动删掉这个初始化文件。
如果你不想用随机密码,安装时可直接指定初始账号:
... | sudo env \
PANEL_ADMIN_USERNAME=admin \
PANEL_ADMIN_PASSWORD=你的强密码 \
bash
已有管理员不会因重启、重新安装或在线更新被重置。
⚠️ 注意:面板能登录 ≠ DNS 已就绪。装完还要在「一键安装」页安装并检查 BIND;已有 BIND 配置可在「域名管理」扫描接管。
4. 常用安装参数
| 参数 | 默认值 / 用途 |
|---|---|
APP_DIR |
程序目录,默认 /opt/bind-panel |
SERVICE_NAME |
systemd 服务名,默认 bind-panel,不带 .service |
RUNTIME_ENV_FILE |
运行配置,默认 /etc/bind-panel/runtime.env |
PANEL_HOST |
主服务监听地址,默认 0.0.0.0;仅经本机反代访问可设 127.0.0.1 |
PANEL_PORT |
主服务端口,默认 16723 |
PANEL_DOMAIN |
安装 Nginx 域名反代并申请证书 |
PANEL_PUBLIC_URL |
面板公网地址,用于来源校验和 OAuth 回调 |
PANEL_MAINTENANCE_PORT |
独立维护服务端口,默认主端口 +2,仅监听回环地址 |
PANEL_INSTANCE_DIR |
实例目录,默认 <APP_DIR>/instance |
PANEL_DEFAULT_NS1/2 |
新区域默认 NS,也可在后台设置 |
PANEL_TRUST_PROXY |
可信代理 IP/CIDR,默认 127.0.0.1,::1 |
NGINX_MAINLINE |
默认 1,使用 Nginx 官方 mainline 源 |
REPO_BRANCH / REPO_COMMIT |
安装分支或锁定提交,分支默认 nodejs |
重新安装会读取原运行配置,显式传入的参数优先;自定义 APP_DIR 后升级时继续沿用。
5. 常用运维命令
以下用默认安装目录和服务名,自定义部署时替换对应名称:
# 查看主面板和独立维护服务
sudo systemctl status bind-panel.service bind-panel-maintenance.service --no-pager
# 重启主面板
sudo systemctl restart bind-panel.service
# 查看近期日志
sudo journalctl -u bind-panel.service -n 100 --no-pager
# 检查本机运行身份
curl -fsS http://127.0.0.1:16723/api/v2/health
# 检查 Nginx 配置
sudo nginx -t
默认路径一览:
| 路径 | 内容 |
|---|---|
/opt/bind-panel/instance |
数据库、原实例密钥、日志、配置及任务数据 |
/opt/bind-panel/instance.maintenance |
独立维护凭据、状态与恢复事务 |
/etc/bind-panel/runtime.env |
安装器托管的运行配置(权限 600) |
/etc/nginx/conf.d/bind-panel-managed.conf |
面板域名反代配置 |
/var/www/bind-panel-acme |
HTTP-01 文件验证目录 |
卸载使用安装目录内的脚本(会先核对实例和服务归属,默认保留数据库、密钥、备份、证书及防火墙规则):
sudo bash /opt/bind-panel/uninstall.sh
nodejs 主力版功能亮点
装好之后,你拿到的是一套完整的中文运维后台:
- 域名与记录:区域创建与接管、域名分组、WHOIS、所有权验证、记录增删改与批量删除、停用与备注
- 记录增强:保存前校验、顶点 CNAME 自动扁平化与聚合显示、解析线路、递归 ACL、RRL 响应速率限制、记录级拨测
- TXT 导入导出:导出可直接重新导入的
.txt,排除默认 NS,重导可还原停用/备注状态 - URL 转发:子域名转发到目标地址,NGINX 配置由面板通过 SSH 一键自动部署,支持海内外多节点
- BIND 配置:安装 BIND、编辑配置、并发版本校验、多文件保存和冲突草稿
- DNSSEC:在实际主 DNS 上签名、展示可提交的 DS、异步退役及密钥清理
- 节点与主备:SSH 密码/密钥装 Agent、日志浮窗、选主备节点、区域同步与状态检查
- 服务器监控:15 秒巡检、离线/恢复提醒,多渠道通知(SMTP/Webhook/钉钉/飞书/企微/Telegram/Discord)带重试
- 账号与认证:管理员/解析员权限、域名授权、API Key、SSO 与账号绑定
- 备份与恢复:配置备份、数据库快照、同实例整机加密备份恢复、独立维护通道
- 在线更新:独立更新任务、健康验证、失败回滚
多节点主备怎么做
主控负责浏览器管理和任务调度,Agent 负责节点上的 BIND。主控角色与「某个域名的主 DNS 角色」不是一回事:
- 「节点管理」填 Agent 地址和 SSH 信息(密码或密钥)
- 从面板执行节点安装,安装器注入 Agent 角色、端口和 Token,锁定提交并验证
- 「主备 DNS 配置」选域名,指定主 DNS 和备 DNS(本机主控也可当主 DNS)
- 填两台 DNS 互通的 IP,开放 UDP/TCP 53,保存后检查主备状态与 SOA 序列号
- 在注册商设两个 NS 分别指向两台服务器;域内 NS 还要配 Glue
通过 SSH 装的 Agent 默认只监听 127.0.0.1,不用开公网 Agent 端口。SSH 会核对 known_hosts 记录主机指纹,之后拒绝不匹配的主机。
亮点:MCP,让 AI 管 DNS
这是最「新」的一块——面板自带独立 stdio MCP 服务(20 个工具)。ZCode、Claude Desktop、Cursor 等 AI 客户端配一个 API 令牌,就能用自然语言管理区域、解析记录、SOA、DNSSEC 和 URL 转发,同时复用面板的记录校验、CNAME 扁平化和审计,不会额外扩大面板的暴露面。
MCP 受「总开关 + 按用户授权」双层控制,开关在「用户与授权」页,给谁用、给多少权限都能管。
三个面板能共存吗
可以。三个面板默认端口不同(pythonbcp/nodejs 都是 16723,java 是 16724),能在同一台机器共存;但 BIND 服务(53 端口)一台机器只能跑一份。面板控制 BIND 需要 root 权限,生产环境建议用防火墙限制面板访问来源。
小结
自建 DNS 的门槛从来不是 BIND 本身,而是「怎么舒服地管它」。这套面板把主备、DNSSEC、备份、AI 这些日常运维动作都做成了点选式操作。如果你也想要一个中文的 BIND 管理后台,nodejs 分支按上面的步骤从零装到能用,十分钟内就能跑起来。
仓库地址:cnb.cool/hanyuxin/dns-hanyuxin-BIND(各分支 README 有完整功能列表与运维文档;nodejs 分支另有 API / MCP / 主备 / DNSSEC / 备份等专项文档索引)