PowerDNS DNS Manager¶
Overview¶
The PowerDNS plugin provides a full-featured authoritative DNS management interface. It supports zone management, record editing, DNSSEC, geo records, smart routing rules, and zone synchronisation between multiple StarkOne servers.
Requires the powerdns plugin to be enabled. All endpoints require superuser.
Status & Configuration¶
# PowerDNS service status
GET /api/powerdns/status
# Install PowerDNS (if not already installed)
POST /api/powerdns/install
# Get PowerDNS configuration
GET /api/powerdns/config
# Update configuration
POST /api/powerdns/config
{
"allow-recursion": "127.0.0.1",
"max-tcp-connections": "20"
}
# Statistics
GET /api/powerdns/stats
Zone Management¶
List Zones¶
Create a Zone¶
POST /api/powerdns/zones
{
"name": "example.com.",
"kind": "Native",
"nameservers": ["ns1.starkone.io.", "ns2.starkone.io."]
}
Get a Zone¶
Delete a Zone¶
Export / Import Zone (BIND format)¶
POST /api/powerdns/zones/:zone/export
POST /api/powerdns/zones/:zone/import
{ "zone_data": "example.com. 300 IN SOA ..." }
DNS Records¶
Update Records (low-level PowerDNS API format)¶
PATCH /api/powerdns/zones/:zone/records
{
"rrsets": [
{
"name": "www.example.com.",
"type": "A",
"ttl": 300,
"changetype": "REPLACE",
"records": [
{ "content": "1.2.3.4", "disabled": false }
]
}
]
}
Add Record (simplified)¶
POST /api/powerdns/zones/:zone/records/simple
{
"name": "www",
"type": "A",
"content": "1.2.3.4",
"ttl": 300
}
Delete Record (simplified)¶
Add Geo Record¶
Geo records route DNS responses based on the client's country:
POST /api/powerdns/zones/:zone/geo-record
{
"name": "cdn",
"default_ip": "1.2.3.4",
"geo_rules": [
{ "country": "US", "ip": "5.6.7.8" },
{ "country": "EU", "ip": "9.10.11.12" }
]
}
DNSSEC¶
# Get DNSSEC status and keys
GET /api/powerdns/zones/:zone/dnssec
# Enable DNSSEC
POST /api/powerdns/zones/:zone/dnssec
# Disable DNSSEC
DELETE /api/powerdns/zones/:zone/dnssec
DNS Templates¶
Save and apply common zone record sets as templates:
# List templates
GET /api/powerdns/templates
# Create template
POST /api/powerdns/templates
{
"name": "Standard Web + Mail",
"records": [
{ "name": "@", "type": "A", "content": "{{IP}}", "ttl": 300 },
{ "name": "www", "type": "CNAME", "content": "@", "ttl": 300 },
{ "name": "@", "type": "MX", "content": "10 mail.{{DOMAIN}}", "ttl": 300 }
]
}
# Apply template to a zone
POST /api/powerdns/templates/:id/apply/:zone
{
"variables": { "IP": "1.2.3.4", "DOMAIN": "example.com" }
}
# Update template
PUT /api/powerdns/templates/:id
# Delete template
DELETE /api/powerdns/templates/:id
Smart DNS Rules¶
Route DNS responses dynamically based on policies:
# List smart rules
GET /api/powerdns/smart-rules
# Create smart rule
POST /api/powerdns/smart-rules
{
"name": "Fail-over to backup",
"domain": "api.example.com",
"primary_ip": "1.2.3.4",
"backup_ip": "5.6.7.8",
"check_url": "https://api.example.com/health"
}
PUT /api/powerdns/smart-rules/:id
DELETE /api/powerdns/smart-rules/:id
Replication Between PowerDNS Servers¶
GET /api/powerdns/replication
POST /api/powerdns/replication
{
"servers": [
{ "host": "ns2.example.com", "api_key": "secret" }
]
}
Zone Sync (StarkOne-to-StarkOne)¶
Sync zones between multiple StarkOne servers:
# Get sync server list
GET /api/powerdns/sync-servers
# Save sync servers
POST /api/powerdns/sync-servers
{
"servers": [
{ "host": "ns2.example.com", "token": "secret" }
]
}
# Push a zone to all sync servers
POST /api/powerdns/sync-push
{ "zone": "example.com." }
# Get sync status
GET /api/powerdns/sync-status
# Create sync API key
POST /api/powerdns/sync-api-key
Receiving endpoint (public, authenticated by X-StarkOne-Sync-Key header):