DNS Robusto e fácil com PowerDNS e MySQL

O PowerDNS é um dos muitos softwares de DNS, ele é muito poderoso, pode fazer milhares de resoluções por segundo, e o que mais me chamou atenção, pode-se comunicar com vários backends, includindo MySQL, PostgreSQL, LDAP, Oracle e outros.

Para se ter uma idéia, existem grandes implementações feitas com ele, incluindo register.com e tucows.com, e, segundo o site oficial, existem aproximadamente 4000 servidores em serviços secundários ativos na internet, que servem aproximadamente 10 milhões de zonas e um imenso núumero de domínios. Testes no primeiro nível do domínios .EU demonstraram que o PowerDNs pode prover 50.000 resoluções por segundo num único servidor, com um hardware simples. No GOOGLE encontrei relatos de testes feitos inclusive pelo registro.br para utilização do mesmo.

A única desvantagem evidente é que o PowerDNS ainda não prevê uma implementação completa do DNSSEC. (O que pra muitos é irrelevante, visto que poucos são aqueles que implementaram DNSSEC em seus servidores)

Utilizar o PowerDNS inclusive como cache de DNS é uma ótima pedida devido a sua excelente performance.

Já tenho usado o PowerDNS há pelo menos 2 anos como servidor secundário e a pouco menos de 1 ano como servidor primário. Utilizo-o bastante também como caching de DNS, ele é extremamente rápido.

Estarei descrevendo abaixo os passos para instalação do PowerDNS no Debian, mas com um pouco de conhecimento pode ser instalado em qualquer distribuição através do código fonte.

—————————————————————————

1º Ambiente – Somente recursão de nomes (DNS cache, caching)

#apt-get install pdns-recursor

Edite o arquivo /etc/powerdns/recursor.conf:

Descomente a linha allow-from e insira os endereços ou classes ips autorizadas a fazer a recursão de nomes.

allow-from=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10

Para evitar que vejam a exibição da versão do PowerDNS.

version-string=DENIED

Edite o arquivo /etc/resolv.conf e altere a linha nameserver para 127.0.0.1 (Isso fará com que a pesquisa de DNS seja feita no servidor local)

Pronto, você já está apto a fazer consultas de dns através do seu dns caching.

—————————————————————————

2º Ambiente – Servidor de nomes e recursão

Considerando que o mysql já está instalado no servidor.

Instale o PowerDNS com suporte a Mysql

#apt-get install pdns-backend-mysql

Entre no MySQL e execute os comandos abaixo para criar o usuário, senha, banco e setar as permissões pertinentes.

#mysql

#——- Recortar Aqui
CREATE USER ‘pdns’@ ‘%’ IDENTIFIED BY ‘sua-senha’;
GRANT USAGE ON * . * TO ‘pdns’@ ‘%’ IDENTIFIED BY ‘sua-senha’ WITH
MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE `pdns` ;
GRANT ALL PRIVILEGES ON `pdns` . * TO ‘pdns’@ ‘%’;
#——-

Agora vamos criar as tabelas conforme o modelo do PowerDNS.

#mysql -u pdns -psua-senha -D pdns < /usr/share/doc/pdns-backend-mysql/mysql.sql
Então vamos copiar o arquivo padrão de configurações do backend para o diretório de configuração.

#cp /usr/share/doc/pdns-backend-mysql/examples/pdns.local.gmysql /etc/powerdns/pdns.d/

Edite o arquivo /etc/powerdns/pdns.d/pdns.local.gmysql

Altere o arquivo conforme suas preferencias.

gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=sua-senha

Como seu servidor de DNS também fará a recursão de nomes, é importante limitar a recursividade do seu servidor de nomes aos IP’s de sua(s) rede(s), isso impede o conhecido OPEN DNS.

Edite o arquivo /etc/powerdns/pdns.conf.

Descomente a linha allow-recursion e insira os endereços dos quais os servidor de nomes vai servir.

allow-recursion=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10

Descomente a linha launch e insira os backends a serem carregados

launch=bind,gmysql

Se você irá replicar as Zonas, precisa inserir os endereços ips dos servidores dos quais irá fazer transferência de Zonas.

allow-axfr-ips=200.200.200.200
(onde 200.200.200.200 é o endereço ip do seu servidor de dns que será replicado)

Precisa também permitir as transferências de zonas.

disable-axfr=no

Altere a porta do recursor para uma porta diferente do servidor de nomes, para isso edite o arquivo /etc/powerdns/recursor.conf

local-port=2525

Agora vamos inserir o recursor no servidor de nomes, para quem ele faça recursão caso não encontre no servidor de nomes local. Para isso edite o arquivo edite o arquivo /etc/powerdns/pdns.conf.

recursor=127.0.0.1:2525

É isso, seu servidor de nomes já está ativo e com suporte a recursão.
Para testar o servidor de nomes local, vamos inserir um registro de exemplo.

# mysql

#——- Recortar Aqui
insert into domains (name,type) values (‘teste.com.br’,’NATIVE’);
insert into records (content,type,domain_id,name) values (’127.0.0.1′,’A’,’1′,’www.teste.com.br’)
#——-

Teste o a resolução de seu domínio.
Lembre-se que para fazer o teste, vc deve ter o endereço local de seu servidor no arquivo /etc/resolv.conf

Aproveite! =)

—————————————————————————

3º Ambiente – Servidor de nomes e sem recursão

Repita o procedimento do ambiente 2, apenas não instalando o Recursor.

—————————————————————————

Abaixo três interfaces gráficas para gerenciamento do PowerDNS

PowerAdmin – http://www.poweradmin.org/ (O Mais completo)
proFTPd Administrator – proftpd-adm.sourceforge.net
ZoneAdmin – http://open.megabit.net/index.php?section=pro_home&project=ZoneAdmin

Fonte: http://www.powerdns.com/

Rolar para cima