146 lines
4.5 KiB
Markdown
146 lines
4.5 KiB
Markdown
```sh
|
|
sudo apt-get install pdns-backend-mysql -y
|
|
```
|
|
|
|
Create database to MarinaDB
|
|
```sh
|
|
sudo mysql -u root -p
|
|
```
|
|
Create new user into MarinaDB
|
|
```sh
|
|
CREATE USER 'poweruser'@'%' IDENTIFIED BY 'uFqqXQEQwErjkQga6rcz';
|
|
GRANT ALL PRIVILEGES ON *.* TO 'poweruser'@'%';
|
|
FLUSH PRIVILEGES;
|
|
REVOKE ALL PRIVILEGES ON *.* FROM 'powerdns'@'%';
|
|
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON poweruser.* TO 'poweruser'@'%';
|
|
FLUSH PRIVILEGES;
|
|
```
|
|
```sh
|
|
SELECT User, Host FROM mysql.user WHERE User = 'poweruser';
|
|
```
|
|
|
|
Create database
|
|
```sh
|
|
CREATE DATABASE powerdns;
|
|
GRANT ALL PRIVILEGES ON powerdns.* TO 'poweruser'@'%';
|
|
FLUSH PRIVILEGES;
|
|
```
|
|
|
|
Create file with SQL to create database, text from https://doc.powerdns.com/authoritative/backends/generic-mysql.html
|
|
```sql
|
|
sudo mysql -u poweruser -p powerdns <<'EOF'
|
|
|
|
CREATE TABLE domains (
|
|
id INT AUTO_INCREMENT,
|
|
name VARCHAR(255) NOT NULL,
|
|
master VARCHAR(128) DEFAULT NULL,
|
|
last_check INT DEFAULT NULL,
|
|
type VARCHAR(8) NOT NULL,
|
|
notified_serial INT UNSIGNED DEFAULT NULL,
|
|
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
|
|
options VARCHAR(64000) DEFAULT NULL,
|
|
catalog VARCHAR(255) DEFAULT NULL,
|
|
PRIMARY KEY (id)
|
|
) Engine=InnoDB CHARACTER SET 'latin1';
|
|
|
|
CREATE UNIQUE INDEX name_index ON domains(name);
|
|
CREATE INDEX catalog_idx ON domains(catalog);
|
|
|
|
CREATE TABLE records (
|
|
id BIGINT AUTO_INCREMENT,
|
|
domain_id INT DEFAULT NULL,
|
|
name VARCHAR(255) DEFAULT NULL,
|
|
type VARCHAR(10) DEFAULT NULL,
|
|
content VARCHAR(64000) DEFAULT NULL,
|
|
ttl INT DEFAULT NULL,
|
|
prio INT DEFAULT NULL,
|
|
disabled TINYINT(1) DEFAULT 0,
|
|
ordername VARCHAR(255) BINARY DEFAULT NULL,
|
|
auth TINYINT(1) DEFAULT 1,
|
|
PRIMARY KEY (id)
|
|
) Engine=InnoDB CHARACTER SET 'latin1';
|
|
|
|
CREATE INDEX nametype_index ON records(name,type);
|
|
CREATE INDEX domain_id ON records(domain_id);
|
|
CREATE INDEX ordername ON records (ordername);
|
|
|
|
CREATE TABLE supermasters (
|
|
ip VARCHAR(64) NOT NULL,
|
|
nameserver VARCHAR(255) NOT NULL,
|
|
account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
|
|
PRIMARY KEY (ip, nameserver)
|
|
) Engine=InnoDB CHARACTER SET 'latin1';
|
|
|
|
CREATE TABLE comments (
|
|
id INT AUTO_INCREMENT,
|
|
domain_id INT NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
type VARCHAR(10) NOT NULL,
|
|
modified_at INT NOT NULL,
|
|
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
|
|
comment TEXT CHARACTER SET 'utf8' NOT NULL,
|
|
PRIMARY KEY (id)
|
|
) Engine=InnoDB CHARACTER SET 'latin1';
|
|
|
|
CREATE INDEX comments_name_type_idx ON comments (name, type);
|
|
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
|
|
|
|
CREATE TABLE domainmetadata (
|
|
id INT AUTO_INCREMENT,
|
|
domain_id INT NOT NULL,
|
|
kind VARCHAR(32),
|
|
content TEXT,
|
|
PRIMARY KEY (id)
|
|
) Engine=InnoDB CHARACTER SET 'latin1';
|
|
|
|
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
|
|
|
|
CREATE TABLE cryptokeys (
|
|
id INT AUTO_INCREMENT,
|
|
domain_id INT NOT NULL,
|
|
flags INT NOT NULL,
|
|
active BOOL,
|
|
published BOOL DEFAULT 1,
|
|
content TEXT,
|
|
PRIMARY KEY(id)
|
|
) Engine=InnoDB CHARACTER SET 'latin1';
|
|
|
|
CREATE INDEX domainidindex ON cryptokeys(domain_id);
|
|
|
|
CREATE TABLE tsigkeys (
|
|
id INT AUTO_INCREMENT,
|
|
name VARCHAR(255),
|
|
algorithm VARCHAR(50),
|
|
secret VARCHAR(255),
|
|
PRIMARY KEY (id)
|
|
) Engine=InnoDB CHARACTER SET 'latin1';
|
|
|
|
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
|
|
|
|
EOF
|
|
```
|
|
Проверяем создалась ли таблицы в базе
|
|
```sh
|
|
mysql -u poweruser -p -e "SHOW TABLES FROM powerdns;"
|
|
```
|
|
|
|
----------------------------------------------------------------------------------------------------
|
|
Configure database connection from PowerDNS to SQLIte
|
|
```sh
|
|
sudo tee /etc/powerdns/pdns.d/pdns.local.mysql.conf <<'EOF'
|
|
launch=gmysql
|
|
gmysql-host=127.0.0.1
|
|
gmysql-port=3306
|
|
gmysql-user=poweruser
|
|
gmysql-password=uFqqXQEQwErjkQga6rcz
|
|
gmysql-dbname=powerdns
|
|
gmysql-dnssec=yes
|
|
EOF
|
|
```
|
|
|
|
Set access level to file
|
|
```sh
|
|
sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.mysql.conf &&
|
|
sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.mysql.conf
|
|
```
|