PowerDNS: upgrade fácil de versão
O upgrade de versão do PowerDNS autoritativo exige uma atualização de tabelas e criação de outras. Isso pode não ser uma tarefa simples dependendo do seu ambiente.
Uma das opções que a documentação fala, utilizando o bindbackend (os dados ficam armazenados em arquivos no mesmo formato que ficam no bind) é a criação de uma base específica para os dados de DNSSEC conforme descrito aqui. A parte interessante do PowerDNS é que podemos ter a informação em mais de um lugar, e ligar vários backends ao mesmo tempo. Esses backends normalmente são diferentes uns dos outros, porém podemos utilizar o mesmo backend mais de uma vez. Para isso criamos um apelido para uma das intâncias.
Então, da mesma forma que criamos um backend de banco de dados em cima do bindbackend, podemos criar um backend de banco de dados em cima de outro.
Esta configuração também é muito conveniente para testes, sem estragar o que já está em produção. Mãos à massa
psql
ze=# create database powerdnssec;
ze=# \l powerdnssec
create table domains (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL
);
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id SERIAL PRIMARY KEY,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(4096) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
CONSTRAINT domain_exists
FOREIGN KEY(domain_id) REFERENCES domains(id)
ON DELETE CASCADE
);
CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
create table supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);
GRANT SELECT ON supermasters TO pdns;
GRANT ALL ON domains TO pdns;
GRANT ALL ON domains_id_seq TO pdns;
GRANT ALL ON records TO pdns;
GRANT ALL ON records_id_seq TO pdns;
alter table records add ordername VARCHAR(255);
alter table records add auth bool;
create index orderindex on records(ordername);
create table domainmetadata (
id SERIAL PRIMARY KEY,
domain_id INT REFERENCES domains(id) ON DELETE CASCADE,
kind VARCHAR(16),
content TEXT
);
create table cryptokeys (
id SERIAL PRIMARY KEY,
domain_id INT REFERENCES domains(id) ON DELETE CASCADE,
flags INT NOT NULL,
active BOOL,
content TEXT
);
GRANT ALL ON domainmetadata TO pdns;
GRANT ALL ON domainmetadata_id_seq TO pdns;
GRANT ALL ON cryptokeys TO pdns;
GRANT ALL ON cryptokeys_id_seq TO pdns;
create table tsigkeys (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
algorithm VARCHAR(255),
secret VARCHAR(255)
);
create unique index namealgoindex on tsigkeys(name, algorithm);
GRANT ALL ON tsigkeys TO pdns;
GRANT ALL ON tsigkeys_id_seq TO pdns;
alter table records alter column type type VARCHAR(10);
Assumindo que a base legada se chama powerdns, temos a seguinte configuração
--- /etc/pdns/pdns.conf --- launch=gpgsql,gpgsql:sec gpgsql-user=pdns gpgsql-dbname=powerdns gpgsql-sec-user=pdns gpgsql-sec-dbname=powerdnssec gpgsql-sec-dnssec=yes
Assumindo que já exista o domínio "benetasso.com" dentro da base powerdns, o que precisamos fazer para ter os dados assinados é o seguinte procedimento:
# su - pdns -s /bin/bash
$ psql powerdnssec -c "insert into domains (name, type) values ('benetasso.com', 'NATIVE');"
$ pdnssec set-nsec3 benetasso.com '1 1 1 ab' narrow
$ pdnssec rectify-zone benetasso.com
Pronto! agora só falta publicar a DS:
$ pdnssec show-zone benetasso.com Zone has NARROW hashed NSEC3 semantics, configuration: 1 1 1 ab Zone is not presigned keys: ID = 1 (KSK), tag = 15812, algo = 8, bits = 2048 Active: 1 KSK DNSKEY = benetasso.com IN DNSKEY 257 3 8 AwEAAZSglooxX8aSJvvi/FtLX2A5FZ6FLGQAkcETE3hdLOJG/AWb0/... DS = benetasso.com IN DS 15812 8 1 75ab832514dc25ffdf4791a71c3b371accea8539 DS = benetasso.com IN DS 15812 8 2 7412bdb8d54165453ed9d9e5d91ab8095ab2c3c30309a5dd91c1289ddfc51402 ID = 2 (ZSK), tag = 57109, algo = 8, bits = 1024 Active: 1 ID = 3 (ZSK), tag = 53724, algo = 8, bits = 1024 Active: 0
Posted at 11:23AM Jan 21, 2012 by ze in PowerDNS | Comments[0]
