Skip to main content

Como realizar a instalação de um Slave com Pdns

Crie um servidor com as seguinte especificações:

CPU: 2

Memória RAM: 2GB

Disco: 50GB

Realize uma instalação minima de Alma Linux 8, esse sistema vem por padrão com SElinux que impede o Pdns de executar seus processos da maneira correta, por isso ele deve ser desabilitado:

Edite o arquivo de configuração dele;

vim /etc/selinux/config

Deixe o arquivo da seguinte forma;

# This file controls the state of SELinux on the system. 
# SELINUX= can take one of these three values: 
#     enforcing - SELinux security policy is enforced. 
#     permissive - SELinux prints warnings instead of enforcing. 
#     disabled - No SELinux policy is loaded. 
SELINUX=disabled
# SELINUXTYPE= can take one of these three values: 
#     targeted - Targeted processes are protected, 
#     minimum - Modification of targeted policy. Only selected processes are protected.  
#     mls - Multi Level Security protection. 
SELINUXTYPE=targeted

Salve o arquivo e reinicie o server;

reboot now

Desabilite o Firewalld;

#Comando abaixo verifica se o Firewall Está ativo
firewall-cmd --state

#Comando abaixo para o firewall
sudo systemctl stop firewalld

#comando abaixo desativa o firewall da inicialização do OS
systemctl disable firewalld

#Impedir que outros serviços iniciem o firewall
systemctl mask --now firewalld

Instale o pdns e o maridaDB;

O ideal é que ambos, master e slave, tenham a mesma versão.
Caso seja necessário realizar a instalação de uma versão mais antiga os pacotes podem ser encontrados no site oficial do PowerDNS.

yum -y update
yum -y install epel-release
yum -y install bind-utils pdns pdns-backend-mysql mariadb mariadb-server

Após iniciar o modo de instalação segura do MySQL, recomendamos realizar os ajustes da seguinte forma, exatamente nessa ordem.

Set root password? [Y/n]
Y

New password:
Re-enter new password:

[Informe o Password do root]

Remove anonymous users? [Y/n]
Y

Disallow root login remotely? [Y/n]
Y

Remove test database and access to it? [Y/n]
Y

Reload privilege tables now? [Y/n]
Y

Thanks for using MariaDB!

Acesse o MySQL e crie o banco e as tabelas necessárias para o funcionamento do pdns com backend-mysql:

Para criar o banco:

CREATE DATABASE powerdns;
create user 'powerdns'@'localhost' identified by 'Aqui-vai-a-senha-do-usuário';
grant all privileges on powerdns.* to 'powerdns'@'localhost';
flush privileges;
use powerdns;

Para criar as tabelas:

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);

Com as tabelas criadas adicione os servidores masters na tabela 'supermasters', com o seguinte comando no banco de dados:

INSERT INTO supermasters (ip, nameserver, account) VALUES ('ip do master','ns primario dos dominios deste master','Nome da conta que esse master será identificado');

Isso deve ser realizado para cada um dos masters.

Antes de ajustar a configuração nos arquivos altere a permissão deles para que sejam acessíveis.

chmod 750 /etc/pdns/
chmod 640 /etc/pdns/*.conf
chown -R root:pdns /etc/pdns

Com os ajustes do banco banco concluídos podemos seguir com a configuração do PowerDNS, utilize o editor de texto da sua preferência para acessar o seguinte arquivo "/etc/pdns/pdns.conf" e edite as seguintes configurações:

allow-axfr-ips=ip-do-master
allow-notify-from=ip-do-master
allow-unsigned-autoprimary=yes
allow-unsigned-supermaster=yes
autosecondary=yes

 launch=gmysql
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=4,RHSaHZGsxeGGFN
gmysql-dbname=powerdns

local-address=ip-publico

secondary=yes

Para finalizar basta reiniciar o serviço com o seguinte comando:

systemctl restart pdns.service

E adicionar o IP desse novo slave na configuração do master nas seguintes entradas: "allow-axfr-ips" e "also-notify".