v0.5.2 提供的功能
- 在多个节点间保持域名服务器记录一致,并通过身份验证安全地复制 DNS-01 验证数据。
- 通过本地证书颁发机构和明确的后端 CIDR 允许列表,支持私有网络部署。
- 为自行处理 TLS 的服务导出证书和密钥,包括 ocserv。
从 v0.4.x 升级?替换现有安装之前,请先按照迁移指南操作。 迁移指南
使用公共服务
无需注册账户或域名。后端必须使用允许访问的公网 IP,并在 80 端口上运行 DNSBox 可以访问的 HTTP 服务。
将 198.51.100.20 替换为服务器的公网 IPv4 地址:
https://198-51-100-20.dnsbox.io
DNS 将主机名解析到 DNSBox 代理。代理终止 HTTPS 连接,再通过 HTTP 将请求转发到主机名中编码的 IP 地址。它不会在你的服务器上安装证书。
Let's Encrypt 通过 DNS-01 验证主机名。证书签发给该主机名,而非裸 IP 地址。首次 TLS 连接可能需要等待证书签发,因此耗时较长。
浏览器与 DNSBox 之间使用 HTTPS。DNSBox 与后端之间使用 HTTP。支持升级为 WebSocket 连接。
IPv6 后端可编码为 2a01-4f8-c17-b8f--1.dnsbox.io。一个连字符代表一个冒号,两个连字符代表 ::。
先检查 DNS 解析,再检查 HTTPS。请使用你自己的、可访问的 HTTP 后端进行测试:
dig +short 198-51-100-20.dnsbox.io
curl -v https://198-51-100-20.dnsbox.io/
DNS 响应返回的是代理地址。TLS 连接有效与后端 HTTP 响应成功是两项独立的检查。
在私有网络中运行
本地 TLS 模式无需公网 DNS、端口转发或互联网连接。DNSBox 会创建自己的证书颁发机构(CA),客户端必须信任该 CA。
示例:DNSBox 位于 192.168.1.2,HTTP 后端位于 192.168.1.0/24 网段:
./dnsboxd --domain=home.arpa --ip=192.168.1.2 \
--tls-mode=local --allowed-cidrs=192.168.1.0/24 \
--dns-listen=192.168.1.2:53 --https-listen=192.168.1.2:443 \
--data-dir=/var/lib/dnsbox
在局域网 DNS 解析器上,仅将 home.arpa 区域的查询转发到 192.168.1.2。DNSBox 是其区域的权威服务器,不是通用的递归解析器。
先签发一个本地证书以创建 CA,再将 /var/lib/dnsbox/ca/root.crt 安装到每个客户端的受信任 CA 存储中。请妥善保密 root.pem。部署指南中提供了初始化命令。
如果后端地址为 192.168.1.50,请打开 https://192-168-1-50.home.arpa。局域网客户端需要能够访问 DNSBox 的 DNS 和 HTTPS 端口;DNSBox 需要能够访问后端的 HTTP 端口。
自行部署并使用 Let's Encrypt
使用你控制的域名或子域名,并将其 DNS 区域委派给 DNSBox 域名服务器。一个节点即可提供该区域的服务,多个节点则可提供冗余。
进行公网 DNS-01 验证时,需要允许入站 UDP 53 和 TCP 53、出站 HTTPS 以及 DNS 解析。无需开放入站 80 端口。443 端口只需对预期使用服务的客户端可达。
只要 DNS-01 验证可在公网完成,私有网络中的 HTTP 后端也能使用公开受信任的主机名证书。请通过 --allowed-cidrs 明确允许这些后端,并为客户端配置 DNS 和路由。
使用多个节点时,请在每个节点上配置相同的域名服务器列表和记录,并为验证数据复制配置双向 TLS。只有所有已配置的对等节点确认收到验证数据后,证书签发才会继续。
提供 Linux、macOS 和 Windows 的发行包。安装程序支持 --no-systemd,可手动启动或使用其他进程管理工具。安装程序不会禁用系统 DNS 解析器。
为 ocserv 和其他服务提供证书
公共服务不会导出其私钥。如果你的服务需要证书文件,请自行部署 DNSBox,并将你控制的 DNS 区域委派给它。
使用该区域下包含编码 IP 地址的主机名运行 --issue。DNSBox 会将 PEM 证书链和私钥写入 <data-dir>/certs,然后退出。通过 ACME 签发证书时会提供 DNS 服务,但不会占用 HTTPS 端口 443。
通过显式 A/AAAA 记录,将该主机名直接指向你的服务。对于 ocserv,请配置 server-cert 和 server-key。DNSBox 的 HTTP 代理不实现 OpenConnect 或 DTLS。
请安排证书续期,并在文件更改后让服务重新加载。一次性命令退出后不会继续续期证书。不要让两个 DNSBox 进程同时使用同一个数据目录。
常见问题
可以通过公共服务访问私有 IP 吗?
不可以。公共代理仅用于允许访问的公网后端。如需使用私有地址,请运行自己的实例,并明确配置 CIDR 允许列表。
IP 地址更改后会怎样?
IP 是主机名的一部分。请为新 IP 使用新主机名;仍使用旧主机名的客户端会继续访问旧地址。
DNSBox 能证明后端 IP 的所有权吗?
DNS-01 证明的是对 DNS 主机名的控制权,并不验证后端 IP 或其所提供内容的所有权。
证书会自动续期吗?
运行中的 DNSBox 服务会为其管理的证书续期。导出的证书需要安排续期流程,并让使用它们的服务重新加载。
如果后端离线会怎样?
DNS 和 TLS 可能仍能正常工作,但代理无法返回应用内容。请检查后端的 HTTP 监听服务、防火墙和网络可达性。
在哪里报告问题?
请在 GitHub 上提交 issue,附上 DNSBox 版本、部署模式和相关错误信息。提交前请移除私钥、令牌和其他机密信息。
技术参考
- 通过 UDP 和 TCP 提供权威 DNS 服务。包含编码 IP 地址的主机名会解析到所配置的代理地址,而非直接解析到后端。
- 支持自定义 A、AAAA、CNAME、MX 和 TXT 记录,以及可在后台刷新的区域根节点 ALIAS 记录。
- 使用 ACME DNS-01 或本地 CA。集群复制传输临时 TXT 验证记录;证书私钥保留在各自的节点上。
- 管理 API 仅绑定到回环接口,默认地址为 127.0.0.1:8080。远程访问使用 SSH 隧道。