Master
setuid=pdns
setgid=pdns
launch=gsqlite3
gsqlite3-database=/etc/pdns/pdns.db
experimental-json-interface=yes
experimental-api-key=changeme
webserver=yes
webserver-address=0.0.0.0
webserver-port=8081
allow-axfr-ips=10.0.0.0/8
allow-recursion=10.0.0.0/8
disable-axfr=no
experimental-logfile=/var/log/pdns.log
loglevel=5
master=yes
recursor=8.8.8.8
super Slave
slave=yes
slave-cycle-interval=10
launch=gsqlite3
gsqlite3-database=/etc/pdns/pdns.db
experimental-api-key=changeme
experimental-json-interface=yes
webserver=yes
webserver-address=0.0.0.0
recursor=8.8.8.8
guardian=yes
setuid=pdns
setgid=pdns
SQLite Schema
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE comments (
id INTEGER PRIMARY KEY,
domain_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) DEFAULT NULL,
comment VARCHAR(65535) NOT NULL,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE cryptokeys (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE domainmetadata (
id INTEGER PRIMARY KEY,
domain_id INT NOT NULL,
kind VARCHAR(32) COLLATE NOCASE,
content TEXT,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE domains (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL COLLATE NOCASE,
master VARCHAR(128) DEFAULT NULL,
last_check INTEGER DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INTEGER DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL
);
CREATE TABLE records (
id INTEGER PRIMARY KEY,
domain_id INTEGER DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(65535) DEFAULT NULL,
ttl INTEGER DEFAULT NULL,
prio INTEGER DEFAULT NULL,
change_date INTEGER DEFAULT NULL,
disabled BOOLEAN DEFAULT 0,
ordername VARCHAR(255),
auth BOOL DEFAULT 1,
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL COLLATE NOCASE,
account VARCHAR(40) NOT NULL
);
CREATE TABLE tsigkeys (
id INTEGER PRIMARY KEY,
name VARCHAR(255) COLLATE NOCASE,
algorithm VARCHAR(50) COLLATE NOCASE,
secret VARCHAR(255)
);
CREATE INDEX comments_domain_id_index ON comments (domain_id);
CREATE INDEX comments_nametype_index ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE INDEX domainmetaidindex ON domainmetadata(domain_id);
CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX orderindex ON records(ordername);
CREATE INDEX rec_name_index ON records(name);
COMMIT;
Super Slave
INSERT INTO "supermasters" VALUES('10.0.0.11','dns1','master');
.dump
# echo ".dump" | sqlite3 /etc/pdns/pdns.db | grep 'testlocal'
INSERT INTO "records" VALUES(1,1,'testlocal','SOA','dns-1.testlocal. hostmaster.dns.testlocal. 2016010805 10800 3600 1814400 86400',86400,0,NULL,0,NULL,1);
INSERT INTO "records" VALUES(2,2,'0.0.10.in-addr.arpa','SOA','dns-1.testlocal. hostmaster.testlocal. 2016011402 10800 3600 1814400 86400',86400,0,NULL,0,NULL,1);
INSERT INTO "records" VALUES(11,1,'testlocal','NS','dns-1.testlocal',86400,0,NULL,0,NULL,1);
INSERT INTO "records" VALUES(12,1,'testlocal','NS','dns-2.testlocal',86400,0,NULL,0,NULL,1);
INSERT INTO "records" VALUES(13,1,'dns-1.testlocal','A','10.0.0.11',86400,0,NULL,0,NULL,1);
INSERT INTO "records" VALUES(14,1,'dns-2.testlocal','A','10.0.0.12',86400,0,NULL,0,NULL,1);
INSERT INTO "records" VALUES(15,2,'11.0.0.10.in-addr.arpa','PTR','dns-1.testlocal',86400,0,NULL,0,NULL,1);
INSERT INTO "records" VALUES(16,2,'12.0.0.10.in-addr.arpa','PTR','dns-2.testlocal',86400,0,NULL,0,NULL,1);
notify
# pdns_control notify testlocal
Added to queue
master
dns-2.testlocal.domain > dns-1.testlocal.18698: 26797 notify Refused*- 0/0/0 (27)
slave
dns-2.testlocal.domain > dns-1.18698: 26797 notify Refused*- 0/0/0 (27)
logs
Apr 4 12:32:59 dns-2 pdns[5539]: Done launching threads, ready to distribute questions
Apr 6 10:41:23 dns-2 pdns[5539]: Received NOTIFY for testlocal from 10.0.0.11 for which we are not authoritative
Apr 6 10:41:23 dns-2 pdns[5539]: Unable to find backend willing to host testlocal for potential supermaster 10.0.0.11. 4 remote nameservers:
Apr 6 10:41:23 dns-2 pdns[5539]: dns-1.testlocal
Apr 6 10:41:23 dns-2 pdns[5539]: dns-2.testlocal
Apr 6 10:41:23 dns-2 pdns[5539]: 10.0.0.11
Apr 6 10:41:23 dns-2 pdns[5539]: 10.0.0.12
Apr 6 11:03:14 dns-2 pdns[5539]: AXFR of domain 'testlocal' initiated by 10.0.0.11
Apr 6 11:03:14 dns-2 pdns[5539]: AXFR of domain 'testlocal' denied: client IP 10.0.0.11 has no permission
Apr 6 11:03:14 dns-2 pdns[5539]: AXFR of domain 'testlocal' failed: 10.0.0.11 cannot request AXFR