PowerDNS API 需显式启用并正确配置:在 pdns.conf 中设 api=yes、api-key=强随机值、webserver=yes,必要时配置 webserver-address 和 webserver-allow-from,重启后检查 8081 端口;MySQL 必须使用官方 schema 初始化 records 和 domains 等标准表,否则 API 调用返回空、404 或 500。

能直接用 API 管理解析,但必须开 api 并配对 api-key,且 MySQL 表结构要完整(尤其 records 和 domains),否则调用 /api/v1/servers/localhost/zones 会返回空或 404。
确认 PowerDNS 启用了 API 模式
PowerDNS 的 API 不是默认开启的,仅靠装包或启动服务不会自动启用。必须在 /etc/pdns/pdns.conf 中显式配置:
- 设置
api=yes(不是api=true或其他值) - 指定一个强随机
api-key,比如api-key=U7xKq2vR9tLmNpY4(别用示例值,生产环境至少 16 位含大小写+数字) - 确保
webserver=yes,否则 API HTTP 接口不监听 - 若需远程访问,加
webserver-address=0.0.0.0和webserver-allow-from=0.0.0.0/0(内网可接受;公网务必限制 CIDR)
改完后重启服务:systemctl restart pdns,再检查端口:ss -tlnp | grep :8081(默认 webserver-port=8081)。
MySQL 数据库必须含标准 PowerDNS Schema
API 操作依赖数据库中预定义的表结构。用错 schema 或漏建表,会导致 POST /zones 失败或返回 500。常见错误现象:创建 zone 成功但无记录、curl -X GET 返回空 JSON 数组。
- 使用官方 schema 文件初始化:
mysql -u powerdns -p powerdns (路径以实际安装版本为准) - 关键表必须存在:
domains(存 zone 名和类型)、records(存 A/CNAME/MX 等记录)、cryptokeys(DNSSEC 可选)、domainmetadata(可选元数据) - 字段名大小写敏感:
records.auth必须是布尔型,records.name和records.content必须为 TEXT;若手动建表,别用varchar(255)替代
用 curl 直接调用 API 创建和更新解析记录
PowerDNS API 是 RESTful 风格,所有操作走 HTTP 方法 + JSON body。不需要额外中间件,但要注意 Content-Type 和认证头。
- 创建新 zone:
curl -X POST http://localhost:8081/api/v1/servers/localhost/zones -H 'X-API-Key: U7xKq2vR9tLmNpY4' -H 'Content-Type: application/json' -d '{"name":"example.internal.","kind":"Native","masters":[]}' - 向 zone 添加 A 记录:
curl -X PATCH http://localhost:8081/api/v1/servers/localhost/zones/example.internal. -H 'X-API-Key: U7xKq2vR9tLmNpY4' -H 'Content-Type: application/json' -d '{"rrsets":[{"name":"www.example.internal.","type":"A","ttl":300,"records":[{"content":"192.168.10.20","disabled":false}]}]}' - 注意:
name值末尾必须带点(example.internal.),否则会被当成相对域名处理,导致查询失败 - 修改后无需 reload — PowerDNS 实时读库,但 DNS 缓存(如客户端或递归服务器)可能延迟生效
权限与安全容易被忽略的点
API 虽方便,但暴露在内网也需最小权限控制。生产环境常踩的坑不在功能,而在边界。
-
api-key是全局凭证,不能硬编码在脚本里;建议用环境变量或密钥管理工具注入 - MySQL 用户(如
powerdns@'10.%')只需SELECT,INSERT,UPDATE,DELETE权限,禁止DROP或FILE权限 - 若用 PowerDNS-Admin,它通过 API 代理操作,此时
api-key要和 Admin 后端配置一致,且 Admin 自身数据库(如pdnsadmin)和 PowerDNS 数据库(如powerdns)必须分离 - API 默认不校验请求来源 IP,靠
webserver-allow-from控制;若前端有 dnsdist 或 Nginx,记得透传真实源 IP 并在webserver-allow-from中放行
最易出问题的是 schema 版本和 API 版本错配 —— 比如用 4.4 的 schema 配 4.9 的 pdns-server,records.ordername 字段缺失会导致 zone 创建静默失败。部署前务必核对 pdns_server --version 和对应文档中的 schema 路径。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











