Skip to main content

PowerDNS Requirements

This page covers PowerDNS-specific requirements for DNS-as-a-Service in CMP. Complete the common prerequisites first.

info

PowerDNS is a standalone integration in CMP — it works independently of any compute orchestrator and provides DNS management for customer domains.

warning

Supported PowerDNS version: 4.8.3+

Exact information to share with StackConsole

For PowerDNS, StackConsole only needs the values below. Send this list to the StackConsole team (fill in your real values).

Nothing else is required as “requirements to share” — API setup, pdns.conf, DNSSEC, and connectivity checks further down this page are for you to prepare and verify so these values work.

1. DNS Server Details

FieldWhat to send (example)Your value
API Endpoint (DNS Host)https://dns.yourcompany.com/api
API KeyLong secret from openssl rand -hex 32
Web Server Port8081 (default)

2. DNS Name Servers

FieldWhat to send (example)Your value
Primary NSns1.yourcompany.com
Secondary NSns2.yourcompany.com

You may add more NS hostnames if you have them. These NS records are added to all customer-created zones in CMP.


1. DNS Server Details to Provide

Required — share with StackConsole. CMP uses these to connect to your PowerDNS API.

FieldValue
API Endpoint (DNS Host)(for example https://dns.yourcompany.com/api)
API Key(generated via openssl rand -hex 32 — see Generate a secure API key)
Web Server Port(default: 8081)

2. DNS Name Servers

Required — share with StackConsole. Provide your authoritative name server list. These NS records are added to all customer-created zones:

Name ServerExample
Primary NSns1.yourcompany.com
Secondary NSns2.yourcompany.com

Verification and preparation (do not confuse with “what to share”)

The steps below are not additional items to invent for StackConsole. Use them only to prepare PowerDNS and confirm the DNS Server Details and Name Servers above are correct and reachable.

Enable the PowerDNS API

CMP integrates with PowerDNS via its REST API. The API must be enabled in your PowerDNS configuration.

Reference: PowerDNS HTTP API Documentation

Configure /etc/powerdns/pdns.conf

Update your pdns.conf to enable the web server and API. Below is a recommended configuration:

sudo tee /etc/powerdns/pdns.conf > /dev/null << 'EOF'
# Network settings
local-address=0.0.0.0
local-port=53

# Backend
launch=gsqlite3
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
gsqlite3-dnssec=yes

# Security
setuid=pdns
setgid=pdns

# Logging
log-dns-queries=yes
log-dns-details=yes
loglevel=5

# Performance
cache-ttl=60
negquery-cache-ttl=60
query-cache-ttl=20

# REST API & Web UI
api=yes
api-key=YOUR_STRONG_API_KEY_HERE
webserver=yes
webserver-address=0.0.0.0
webserver-port=8081
webserver-allow-from=127.0.0.1,::1,<CMP_SERVER_IP>
EOF
warning

Change webserver-allow-from to include the CMP server's IP address so CMP can reach the PowerDNS API. Replace <CMP_SERVER_IP> with the actual IP.

Generate a secure API key

openssl rand -hex 32

Use this output as your api-key value in pdns.conf, and provide the same value in DNS Server Details. Store it securely.

Enable DNSSEC

DNSSEC must be enabled in PowerDNS. CMP creates DNS records with DNSSEC-secured zones by default.

Verify this line is present in your pdns.conf:

gsqlite3-dnssec=yes

CMP VM → PowerDNS connectivity

From the CMP server, access is needed to the PowerDNS web server on the configured webserver-port (default: 8081).

Verify API access from the DNS server itself:

curl -s -H 'X-API-Key: YOUR_API_KEY' \
http://127.0.0.1:8081/api/v1/servers | python3 -m json.tool

Verify API access from the CMP server:

curl -s -H 'X-API-Key: YOUR_API_KEY' \
http://<PDNS_SERVER_IP>:8081/api/v1/servers | python3 -m json.tool

A successful response returns a JSON array with server information.

Verify zone creation (optional pre-check)

You can verify PowerDNS is working correctly by creating a test zone from the command line:

# Create zone
sudo pdnsutil create-zone example.com

# Add SOA record
sudo pdnsutil add-record example.com '' SOA \
'ns1.example.com. hostmaster.example.com. 2024041301 10800 3600 604800 3600'

# Add NS records
sudo pdnsutil add-record example.com '' NS 'ns1.example.com.'

# Add A records
sudo pdnsutil add-record example.com 'ns1' A '192.168.1.1'
sudo pdnsutil add-record example.com 'www' A '192.168.1.10'

# Rectify the zone
sudo pdnsutil rectify-zone example.com

Verify the zone:

sudo pdnsutil list-zone example.com
sudo pdnsutil check-zone example.com

# Test DNS resolution
dig @127.0.0.1 www.example.com A +short

Reference: PowerDNS Zone API


Checklist

Confirm the requirements and verification steps before scheduling installation:

Requirements to provide (send to StackConsole)

  • API Endpoint (DNS Host) — for example https://dns.yourcompany.com/api
  • API Key
  • Web Server Port — usually 8081
  • Primary NS — for example ns1.yourcompany.com
  • Secondary NS — for example ns2.yourcompany.com (and any additional NS)

Verification

  • PowerDNS version 4.8.3+ installed
  • API enabled in pdns.conf
  • Strong API key generated and set in pdns.conf
  • DNSSEC enabled (gsqlite3-dnssec=yes)
  • Web server configured with CMP server IP in webserver-allow-from
  • API accessible from CMP server (verified with curl)