PowerDNS API需手动启用并严格配置:在pdns.conf中设webserver=yes、api=yes、api-key=强字符串,用官方MySQL schema初始化表,调用时必带X-API-Key和Content-Type头。

PowerDNS 的 API 不是开箱即用的,必须显式启用、配对 MySQL 表结构、并严格校验认证头,否则 curl 调用只会返回空数组、404 或 500。
确认 PowerDNS 已启用 Webserver 和 API 模块
仅安装 pdns-server 并启动服务,不会自动开启 HTTP API。必须在 /etc/pdns/pdns.conf 中明确设置:
-
webserver=yes—— 否则8081端口根本不监听 -
api=yes—— 注意不是api=true或enable-api,拼错值会导致静默失效 -
api-key=后接至少 16 位强随机字符串(大小写字母 + 数字),别用admin123类弱值 - 如需远程调用,加
webserver-address=0.0.0.0和webserver-allow-from=192.168.10.0/24(切勿在公网设0.0.0.0/0)
改完后执行 systemctl restart pdns,再用 ss -tlnp | grep :8081 确认端口已绑定。若无输出,说明 webserver 未生效。
MySQL 必须使用官方 schema 初始化 records/domains 表
API 的 /zones 列表、/zones/{name} 更新全部依赖数据库字段语义。常见失败现象:POST /zones 返回 201 但后续 GET /zones 为空,或 PATCH 提交后记录不写入 records 表。
- 必须用 PowerDNS 官方提供的 SQL schema 初始化库,路径通常为
/usr/share/doc/pdns-backend-mysql/schema.mysql.sql(版本不同路径可能变) - 关键表不可缺失:
domains(存 zone 名、type、notified_serial)、records(含auth布尔字段、name和content为TEXT类型) - 手动建表时,
records.auth若定义成TINYINT或缺省值,会导致 API 写入失败且无明确报错 - 表名和字段名大小写敏感,
RECORDS或Records都不被识别
用 curl 直接调用 API 创建 zone 和添加 A 记录
所有操作走标准 REST,无需额外 SDK。但必须带两个请求头:X-API-Key 和 Content-Type: application/json,漏任一都会返回 401 或 400。
- 创建 zone:
curl -X POST http://localhost:8081/api/v1/servers/localhost/zones -H 'X-API-Key: U7xKq2vR9tLmNpY4' -H 'Content-Type: application/json' -d '{"name":"test.internal.","kind":"Native","masters":[]}' - 添加 A 记录:
curl -X PATCH http://localhost:8081/api/v1/servers/localhost/zones/test.internal. -H 'X-API-Key: U7xKq2vR9tLmNpY4' -H 'Content-Type: application/json' -d '{"rrsets":[{"name":"www.test.internal.","type":"A","ttl":300,"records":[{"content":"192.168.1.100","disabled":false}]}]}' - 注意:zone 名末尾必须带点(
test.internal.),否则 API 会静默忽略或报422 - 更新时用
PATCH(非PUT),且 body 中rrsets是数组,哪怕只改一条记录
调试时最容易被忽略的三个点
很多问题卡在看似无关的细节上:
-
pdns.conf中若同时存在launch=gmysql和launch=bind,gmysql 后端可能未加载,导致 API 读不到数据库——检查journalctl -u pdns -n 50是否有Failed to launch backend - MySQL 用户权限不足,例如没给
INSERT/UPDATE权限到records表,API 返回500但日志里只写Backend error - 系统时间不同步(尤其容器环境),会导致 MySQL 的
ON UPDATE CURRENT_TIMESTAMP字段异常,间接引发 zone 通知逻辑失败
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











