Add complete French (fr) and Chinese (zh) translations for all documentation: - Root files: README, CHANGELOG, SECURITY, BETA-RELEASE - docs/: All 16 core documentation files - DOCS/: All 19 deep-dive documents including embedded/ and archive/ - package/secubox/: All 123+ package READMEs - Misc: secubox-tools/, scripts/, EXAMPLES/, config-backups/, streamlit-apps/ Total: 346 translation files created Each file includes language switcher links for easy navigation between English, French, and Chinese versions. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
121 lines
3.8 KiB
Markdown
121 lines
3.8 KiB
Markdown
[English](README.md) | [Francais](README.fr.md) | 中文
|
||
|
||
# secubox-app-dns-provider
|
||
|
||
通过提供商 REST API 进行程序化 DNS 记录管理。SecuBox 生态系统的一部分。
|
||
|
||
## 概述
|
||
|
||
通过 OVH、Gandi 和 Cloudflare API 管理 DNS 区域。提供 CLI 工具(`dnsctl`)用于记录的增删改查、HAProxy vhost 同步、DNS 传播验证和 ACME DNS-01 证书签发。
|
||
|
||
## 架构
|
||
|
||
```
|
||
dnsctl (CLI)
|
||
|-- load_provider() -> 加载 /usr/lib/secubox/dns/{provider}.sh
|
||
|-- cmd_list/add/rm -> 委托给 dns_list/dns_add/dns_rm
|
||
|-- cmd_sync -> 遍历 HAProxy UCI vhosts -> 每个域名执行 dns_add
|
||
|-- cmd_verify -> 在 1.1.1.1, 8.8.8.8, 9.9.9.9 上 nslookup
|
||
+-- cmd_acme_dns01 -> 导出提供商环境变量 -> acme.sh --dns
|
||
```
|
||
|
||
## 提供商适配器
|
||
|
||
`/usr/lib/secubox/dns/` 中的每个适配器实现:
|
||
|
||
| 函数 | 描述 |
|
||
|---|---|
|
||
| `dns_list(zone)` | 列出区域中的所有记录 |
|
||
| `dns_add(zone, type, subdomain, target, ttl)` | 创建记录 |
|
||
| `dns_rm(zone, type, subdomain)` | 删除记录 |
|
||
| `dns_verify(fqdn)` | 检查解析 |
|
||
| `dns_test_credentials()` | 验证 API 密钥 |
|
||
|
||
### 支持的提供商
|
||
|
||
- **OVH** -- HMAC-SHA1 签名的 API v1(app_key + app_secret + consumer_key)
|
||
- **Gandi** -- 使用 Bearer token 的 LiveDNS v5
|
||
- **Cloudflare** -- 使用 Bearer token + zone_id 的 API v4
|
||
|
||
## UCI 配置
|
||
|
||
```
|
||
/etc/config/dns-provider
|
||
config dns_provider 'main' -> enabled, provider, zone
|
||
config ovh 'ovh' -> endpoint, app_key, app_secret, consumer_key
|
||
config gandi 'gandi' -> api_key
|
||
config cloudflare 'cloudflare' -> api_token, zone_id
|
||
```
|
||
|
||
## CLI 使用方法
|
||
|
||
### 基本操作
|
||
|
||
```bash
|
||
dnsctl status # 显示配置状态
|
||
dnsctl test # 验证 API 凭证
|
||
dnsctl list # 列出区域记录
|
||
dnsctl add A myservice 1.2.3.4 # 创建 A 记录
|
||
dnsctl add CNAME www mycdn.net # 创建 CNAME
|
||
dnsctl update A myservice 5.6.7.8 # 更新现有记录
|
||
dnsctl get A www # 获取记录值
|
||
dnsctl rm A myservice # 删除记录
|
||
dnsctl domains # 列出账户中的所有域名
|
||
```
|
||
|
||
### HAProxy 同步
|
||
|
||
```bash
|
||
dnsctl sync # 将 HAProxy vhosts 同步到 DNS A 记录
|
||
dnsctl verify myservice.example.com # 检查传播(1.1.1.1, 8.8.8.8, 9.9.9.9)
|
||
```
|
||
|
||
### 子域名生成器
|
||
|
||
```bash
|
||
dnsctl generate gitea # 使用公网 IP 自动创建 gitea.zone
|
||
dnsctl generate api prod # 创建 prod-api.zone
|
||
dnsctl suggest web # 显示子域名建议
|
||
dnsctl suggest mail # 建议:mail, smtp, imap, webmail, mx
|
||
dnsctl suggest dev # 建议:git, dev, staging, test, ci
|
||
```
|
||
|
||
### 动态 DNS
|
||
|
||
```bash
|
||
dnsctl dyndns # 使用 WAN IP 更新根 A 记录
|
||
dnsctl dyndns api 300 # 更新 api.zone,TTL 为 5 分钟
|
||
```
|
||
|
||
### 邮件 DNS 设置
|
||
|
||
```bash
|
||
dnsctl mail-setup # 创建 MX、SPF、DMARC 记录
|
||
dnsctl mail-setup mail 10 # 自定义主机名和优先级
|
||
dnsctl dkim-add mail '<public-key>' # 添加 DKIM TXT 记录
|
||
```
|
||
|
||
### SSL 证书
|
||
|
||
```bash
|
||
dnsctl acme-dns01 example.com # 通过 DNS-01 挑战签发证书
|
||
dnsctl acme-dns01 '*.example.com' # 通过 DNS-01 签发通配符证书
|
||
```
|
||
|
||
## 依赖
|
||
|
||
- `curl` -- 用于 API 调用的 HTTP 客户端
|
||
- `openssl-util` -- HMAC-SHA1 签名(OVH)
|
||
- `jsonfilter` -- JSON 解析(OpenWrt 原生)
|
||
- `acme.sh` -- 证书签发(可选,用于 DNS-01)
|
||
|
||
## 文件
|
||
|
||
```
|
||
/etc/config/dns-provider UCI 配置
|
||
/usr/sbin/dnsctl CLI 控制器
|
||
/usr/lib/secubox/dns/ovh.sh OVH 适配器
|
||
/usr/lib/secubox/dns/gandi.sh Gandi 适配器
|
||
/usr/lib/secubox/dns/cloudflare.sh Cloudflare 适配器
|
||
```
|