144 lines
4.4 KiB
Markdown
144 lines
4.4 KiB
Markdown
Для использования SQLIte копируем схему из https://doc.powerdns.com/authoritative/backends/generic-sqlite3.html
|
|
```sh
|
|
sudo apt-get install pdns-backend-sqlite3 -y
|
|
```
|
|
|
|
```sh
|
|
sudo apt install sqlite3 -y
|
|
```
|
|
|
|
Create database:
|
|
```sh
|
|
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 ".databases" &&
|
|
sudo chown pdns:pdns /var/lib/powerdns/pdns.sqlite3
|
|
```
|
|
Create database structure
|
|
```sql
|
|
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 <<'EOF'
|
|
|
|
PRAGMA foreign_keys = 1;
|
|
|
|
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(8) NOT NULL,
|
|
notified_serial INTEGER DEFAULT NULL,
|
|
account VARCHAR(40) DEFAULT NULL,
|
|
options VARCHAR(65535) DEFAULT NULL,
|
|
catalog VARCHAR(255) DEFAULT NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX name_index ON domains(name);
|
|
CREATE INDEX catalog_idx ON domains(catalog);
|
|
|
|
|
|
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,
|
|
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 INDEX records_lookup_idx ON records(name, type);
|
|
CREATE INDEX records_lookup_id_idx ON records(domain_id, name, type);
|
|
CREATE INDEX records_order_idx ON records(domain_id, ordername);
|
|
|
|
|
|
CREATE TABLE supermasters (
|
|
ip VARCHAR(64) NOT NULL,
|
|
nameserver VARCHAR(255) NOT NULL COLLATE NOCASE,
|
|
account VARCHAR(40) NOT NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);
|
|
|
|
|
|
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 INDEX comments_idx ON comments(domain_id, name, type);
|
|
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
|
|
|
|
|
|
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 INDEX domainmetaidindex ON domainmetadata(domain_id);
|
|
|
|
|
|
CREATE TABLE cryptokeys (
|
|
id INTEGER PRIMARY KEY,
|
|
domain_id INT NOT NULL,
|
|
flags INT NOT NULL,
|
|
active BOOL,
|
|
published BOOL DEFAULT 1,
|
|
content TEXT,
|
|
FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
CREATE INDEX domainidindex ON cryptokeys(domain_id);
|
|
|
|
|
|
CREATE TABLE tsigkeys (
|
|
id INTEGER PRIMARY KEY,
|
|
name VARCHAR(255) COLLATE NOCASE,
|
|
algorithm VARCHAR(50) COLLATE NOCASE,
|
|
secret VARCHAR(255)
|
|
);
|
|
|
|
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
|
|
|
|
EOF
|
|
```
|
|
|
|
Configure database connection from PowerDNS to SQLIte
|
|
```sh
|
|
sudo tee /etc/powerdns/pdns.d/pdns.local.sqlite.conf <<'EOF'
|
|
launch=gsqlite3
|
|
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
|
|
EOF
|
|
```
|
|
Set access level to file
|
|
```sh
|
|
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.sqlite.conf &&
|
|
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.sqlite.conf
|
|
```
|
|
|
|
In PowerDNS configured to auto read config from dir /etc/powerdns/pdns.d/
|
|
|
|
|
|
|
|
|
|
For delete record from SQLite run:
|
|
```sh
|
|
cp /var/lib/powerdns/pdns.sqlite3 /var/lib/powerdns/pdns.sqlite3.bak
|
|
sqlite3 /var/lib/powerdns/pdns.sqlite3
|
|
SELECT id, name FROM domains WHERE name = 'locust.ge';
|
|
SELECT id, name, type, content FROM records WHERE name = 'locust.ge.locust.ge' AND type = 'NS';
|
|
DELETE FROM records WHERE id IN (25, 26, 27, 28);
|
|
.exit
|
|
pdns_control notify locust.ge
|
|
```
|