Welcome to the documentation for the SoluteDNS Core which is an library for DNS Management of PowerDNS nameservers with an MySQL back-end. The Core is an development friendly solution which can be used stand-alone or together with our integrations.


For a new installation rename the file to config.php.


If you have an license for the SoluteDNS core enter it here. If you want to use the free edition remove the license option from the configuration or leave it empty.


Depending on your PowerDNS configuration set the type value accordingly. Typically the master type is used when you use AXFR zone transfer and the native type is used when you use database replication.


The allowed options gives you the ability to limit the allowed records types. Please note this is an global setting.

Using the limit option you can set an maximum allowed records per zone. Leave it 0 to disable.

The :domain: selector in the hostmaster value is replaced by the zone name. If custom_primary is set to true this can be overwritten. Otherwise the default hostmaster will be used every time the SOA record is updated.


Add all the nameservers which belong to your DNS cluster here. The first nameserver is the primary nameserver which is connected to the SoluteDNS Core.


The self_check option checks if the nameservers are set correctly on all levels.

The consistency_check will check if all nameservers in the cluster have the same SOA serial.

The record_check is performed by PowerDNS and will check for any errors within the zone.


When debug mode is enabled it will print all info, warning and error messages. Also see the Error Manual for more information.

Custom Regex

For selected validation rules you can set an custom regex. Only add the custom regex values to the configuration file when needed.

return [
  'license' => 'PRO_xxxxxxxxxxxxxxxxx',
  'database' => [
    'host' => '',
    'port' => '',
    'name' => 'ns',
    'user' => 'pdns',
    'pass' => 'password',
    'type' => 'native' # native/master
  'ssh' => [
    'host' => '',
    'port' => '',
    'user' => 'pdns',
    'pass' => 'password',
    'private_key' => '',
    'powerdns_version' => '4' # 3/4
  'nameservers' => [
    '0' => '',
    '1' => '',
    '2' => ''
  'records' => [
    'limit' => 0,
    'soa' => [
      'hostmaster' => 'hostmater.:domain:',
      'serial' => 'default', # default/epoch/last
      'refresh' => 3600,
      'retry' => 600,
      'expire' => 604800,
      'ttl' => 3600
    'custom_primary' => true,
    'disable_soa' => false,
  'zones' => [
    'unique_only' => false,
  'dnssec' => [
    'enabled' => true,
    'auto_rectify' => true,
    'auto_keys' => true,
    'auto_nsec3' => true,
  'health' => [
    'self_check' => true,
    'consistency_check' => true,
    'record_check' => true,
  'system' => [
    'debug' => false,
    'regex' => [
      'VALIDATE_IPV4' => '#[\s\S]#',
      'VALIDATE_IPV6' => '#[\s\S]#',
      'VALIDATE_FQHN' => '#[\s\S]#',
      'VALIDATE_FQDN' => '#[\s\S]#',
      'VALIDATE_TYPES' => '#[\s\S]#',
      'VALIDATE_QUOTED' => '#[\s\S]#'

Include the Core

You can include the SoluteDNS Core in your script by simply including the init.php php file.

If you are using autoload you can also load the Core using:

$loader->addPsr4('solutedns\\', __DIR__);

Depending on which required dependencies you have you might also need to autoload scripts from the vendor directory of the SoluteDNS Core. The init.php can be used as example.

Read Only Mode

The Records class has an read only modes which can be enabled by calling the readonly function as shown in the example below:

$records = new Records();