Example of PowerDNS web API usage
Prepare
Create a base zone
$ curl -X POST -H 'X-API-Key: powerdns' \
-d '{"name": "kubes.unix7.org.", "kind": "Native", "masters": [], \
"nameservers": ["v7.unix7.org."]}' \
http://v7.unix7.org:8081/api/v1/servers/localhost/zones
{
"soa_edit_api" : "DEFAULT",
"edited_serial" : 2023041101,
"masters" : [],
"api_rectify" : false,
"dnssec" : false,
"rrsets" : [
{
"ttl" : 180,
"records" : [
{
"content" : "a.misconfigured.dns.server.invalid. hostmaster.kubes.unix7.org. 2023041101 10800 3600 604800 3600",
"disabled" : false
}
],
"comments" : [],
"name" : "kubes.unix7.org.",
"type" : "SOA"
},
{
"records" : [
{
"disabled" : false,
"content" : "v7.unix7.org."
}
],
"ttl" : 180,
"type" : "NS",
"name" : "kubes.unix7.org.",
"comments" : []
}
],
"soa_edit" : "",
"nsec3param" : "",
"last_check" : 0,
"master_tsig_key_ids" : [],
"account" : "",
"catalog" : "",
"slave_tsig_key_ids" : [],
"kind" : "Native",
"notified_serial" : 0,
"name" : "kubes.unix7.org.",
"url" : "/api/v1/servers/localhost/zones/kubes.unix7.org.",
"serial" : 2023041101,
"id" : "kubes.unix7.org.",
"nsec3narrow" : false
}
Show the base zone
$ curl -X GET -H 'X-API-Key: powerdns' \
http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kubes.unix7.org/export
kubes.unix7.org. 180 IN NS v7.unix7.org.
kubes.unix7.org. 180 IN SOA a.misconfigured.dns.server.invalid. hostmaster.kubes.unix7.org. 2023041101 10800 3600 604800 3600
Usage
Create of delegated NS record for subzone
$ curl -X PATCH -H 'X-API-Key: powerdns' \
-d '{"rrsets": [{"name": "kube7.kubes.unix7.org.", "type": "NS", "ttl": 300, \
"changetype": "REPLACE", "records": [{"content": "v7.unix7.org.", "disabled": false}]}]}' \
http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kubes.unix7.org
Show prepared base zone
$ curl -X GET -H 'X-API-Key: powerdns' \
http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kubes.unix7.org/export
kube7.kubes.unix7.org. 300 IN NS v7.unix7.org.
kubes.unix7.org. 180 IN NS v7.unix7.org.
kubes.unix7.org. 180 IN SOA a.misconfigured.dns.server.invalid. hostmaster.kubes.unix7.org. 2023041102 10800 3600 604800 3600
Create sub-zone
$ curl -X POST -H 'X-API-Key: powerdns' \
-d '{"name": "kube7.kubes.unix7.org.", "kind": "Native", "masters": [], "nameservers": ["v7.unix7.org."]}' \
http://v7.unix7.org:8081/api/v1/servers/localhost/zones
{
"account" : "",
"api_rectify" : false,
"catalog" : "",
"dnssec" : false,
"edited_serial" : 2023041101,
"id" : "kube7.kubes.unix7.org.",
"kind" : "Native",
"last_check" : 0,
"master_tsig_key_ids" : [],
"masters" : [],
"name" : "kube7.kubes.unix7.org.",
"notified_serial" : 0,
"nsec3narrow" : false,
"nsec3param" : "",
"rrsets" : [
{
"comments" : [],
"name" : "kube7.kubes.unix7.org.",
"records" : [
{
"content" : "a.misconfigured.dns.server.invalid. hostmaster.kube7.kubes.unix7.org. 2023041101 10800 3600 604800 3600",
"disabled" : false
}
],
"ttl" : 180,
"type" : "SOA"
},
{
"comments" : [],
"name" : "kube7.kubes.unix7.org.",
"records" : [
{
"content" : "v7.unix7.org.",
"disabled" : false
}
],
"ttl" : 180,
"type" : "NS"
}
],
"serial" : 2023041101,
"slave_tsig_key_ids" : [],
"soa_edit" : "",
"soa_edit_api" : "DEFAULT",
"url" : "/api/v1/servers/localhost/zones/kube7.kubes.unix7.org."
}
Show raw sub-zone
$ curl -X GET -H 'X-API-Key: powerdns' \
http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kube7.kubes.unix7.org/export
kube7.kubes.unix7.org. 180 IN NS v7.unix7.org.
kube7.kubes.unix7.org. 180 IN SOA a.misconfigured.dns.server.invalid. hostmaster.kube7.kubes.unix7.org. 2023041101 10800 3600 604800 3600
Add A-address record to subzone
$ curl -X PATCH -H 'X-API-Key: powerdns' \
-d '{"rrsets": [{"name": "gitlab.kube7.kubes.unix7.org.", "type": "A", "ttl": 300, \
"changetype": "REPLACE", "records": [{"content": "176.118.164.136", "disabled": false}]}]}' \
http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kube7.kubes.unix7.org
Show raw sub-zone
$ curl -X GET -H 'X-API-Key: powerdns' \
http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kube7.kubes.unix7.org/export
gitlab.kube7.kubes.unix7.org. 300 IN A 176.118.164.136
kube7.kubes.unix7.org. 180 IN NS v7.unix7.org.
kube7.kubes.unix7.org. 180 IN SOA a.misconfigured.dns.server.invalid. hostmaster.kube7.kubes.unix7.org. 2023041102 10800 3600 604800 3600
Check A record from subzone with third party servers
$ host gitlab.kube7.kubes.unix7.org. 1.1.1.1
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases:
gitlab.kube7.kubes.unix7.org has address 176.118.164.136
$ host gitlab.kube7.kubes.unix7.org. 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
gitlab.kube7.kubes.unix7.org has address 176.118.164.136