REDE ONLINE · 7 fabricantes · 84 artigos · 1.2k comandos
v2.1.0 PT_BR
CircuitoCarioca
Home
↳ Visão geral Datacom Nokia Huawei Mikrotik Cisco Intelbras Parks
↳ Visão geral VLAN QinQ MPLS BGP OSPF
Ferramentas
↳ Visão geral Linux Windows Zabbix Grafana LibreNMS Firewall VPN Hardening
Wiki Comunidade Sobre
entrar cadastrar
dns · autoritativo · backend em banco de dados

PowerDNS

Servidor DNS autoritativo com backend em banco de dados — arquitetura, API, DNSSEC integrado e integração real com sistemas de provisionamento de ISP.

Nesta página

1. Contexto e histórico 2. Arquitetura interna 3. Instalação 4. Backend gmysql e modelo de dados 5. Gerenciamento de zonas — pdnsutil 6. API HTTP — automação real 7. Master/Slave e replicação 8. DNSSEC integrado 9. PowerDNS Recursor 10. Performance e dimensionamento 11. Segurança e hardening 12. Monitoramento 13. Backup e recuperação 14. Comparação com BIND e outros 15. Troubleshooting 16. Glossário 17. Referências

1. Contexto e histórico

O PowerDNS foi criado em 1999 na Holanda, por Bert Hubert, com uma premissa radicalmente diferente do BIND: em vez de ler zonas de arquivos texto, o PowerDNS foi projetado desde o início para armazenar registros DNS em backends de banco de dados — MySQL, PostgreSQL, SQLite, LDAP, e até backends customizados via pipe ou Lua. Essa arquitetura o tornou a escolha natural para ISPs e empresas que precisam integrar DNS com sistemas de provisionamento, portais de autoatendimento e APIs.

O projeto é dividido em dois componentes independentes: o Authoritative Server (que responde por zonas próprias) e o Recursor (resolvedor recursivo para clientes). Ambos são mantidos pela PowerDNS.COM BV e pela comunidade open‑source (GPLv2).

2. Arquitetura interna

O PowerDNS Authoritative Server é composto por:

  • Core (pdns_server) — recebe consultas DNS, gerencia cache e orquestra o fluxo.
  • Backends — plugins que conectam o core a diferentes fontes de dados (gmysql, gpgsql, sqlite3, pipe, remote).
  • Packet Cache — cache de respostas inteiras, baseado na consulta exata (incluindo flags). Extremamente rápido (in‑memory).
  • Query Cache — cache de resultados de consultas ao backend. Reduz a carga no banco de dados.
  • Webserver interno — serve a API REST (seção 6) e estatísticas.

2.1 Tipos de zona (Kind)

TipoDescrição
NativeZona gerenciada localmente, sem replicação built‑in (a replicação fica a cargo do banco de dados ou de AXFR externo).
MasterEnvia notificações (NOTIFY) e permite AXFR para slaves.
SlaveRecebe zona via AXFR/IXFR de um master e armazena no backend.

3. Instalação (Debian/Ubuntu)

apt update
apt install pdns-server pdns-backend-mysql mariadb-server

pdns_server --version

4. Backend gmysql e modelo de dados

4.1 Criação do banco e schema

mysql -u root -p -e "CREATE DATABASE pdns;"
mysql -u root -p pdns < /usr/share/doc/pdns-backend-mysql/schema.mysql.sql

mysql -u root -p -e "
CREATE USER 'pdns'@'localhost' IDENTIFIED BY 'senha-forte-aqui';
GRANT ALL PRIVILEGES ON pdns.* TO 'pdns'@'localhost';
FLUSH PRIVILEGES;"

4.2 Tabelas principais do schema

TabelaFunção
domainsLista de zonas (nome, tipo, master, serial).
recordsRegistros DNS propriamente ditos (nome, tipo, conteúdo, TTL).
supermastersLista de masters autorizados a criar zonas slave automaticamente.
domainmetadataMetadados da zona (ex.: chaves DNSSEC, NSEC3 params).
cryptokeysChaves DNSSEC (KSK e ZSK) armazenadas no banco.
tsigkeysChaves TSIG para autenticação de transferências de zona.

4.3 Configuração do backend

# /etc/powerdns/pdns.conf
launch=gmysql
gmysql-host=127.0.0.1
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=senha-forte-aqui
gmysql-dnssec=yes

systemctl restart pdns

5. Gerenciamento de zonas — pdnsutil

pdnsutil create-zone exemplo-isp.com.br ns1.exemplo-isp.com.br
pdnsutil add-record exemplo-isp.com.br www A 203.0.113.20
pdnsutil add-record exemplo-isp.com.br radius A 10.0.0.5
pdnsutil add-record exemplo-isp.com.br @ MX "10 mail.exemplo-isp.com.br"
pdnsutil replace-rrset exemplo-isp.com.br www A "203.0.113.21"
pdnsutil edit-zone exemplo-isp.com.br
pdnsutil list-all-zones
pdnsutil check-zone exemplo-isp.com.br

6. API HTTP — automação real

A API REST do PowerDNS é o diferencial mais relevante para ISPs com portal de provisionamento. Com ela, é possível criar, editar e remover registros DNS programaticamente, sem tocar no banco de dados diretamente:

# /etc/powerdns/pdns.conf
api=yes
api-key=chave-de-api-forte-aqui
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081
# Criar registro A via API
curl -X PATCH http://127.0.0.1:8081/api/v1/servers/localhost/zones/exemplo-isp.com.br. \
  -H "X-API-Key: chave-de-api-forte-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "rrsets": [{
      "name": "novo-cliente.exemplo-isp.com.br.",
      "type": "A",
      "ttl": 3600,
      "changetype": "REPLACE",
      "records": [{"content": "203.0.113.99", "disabled": false}]
    }]
  }'

7. Master/Slave e replicação

# Master
pdnsutil set-kind exemplo-isp.com.br master

# Slave — pdns.conf
slave=yes
allow-notify-from=203.0.113.1

# Registrar zona slave
pdnsutil create-secondary-zone exemplo-isp.com.br 203.0.113.1

PowerDNS interopera com BIND via AXFR/IXFR padrão. A replicação do banco de dados (ex.: MySQL Group Replication) pode substituir a replicação DNS tradicional em ambientes que preferem consistência via banco.

8. DNSSEC integrado

Diferente do BIND, onde a assinatura gera um arquivo .signed separado, o PowerDNS gerencia todo o ciclo de vida do DNSSEC internamente, armazenando chaves no banco de dados:

pdnsutil secure-zone exemplo-isp.com.br
pdnsutil show-zone exemplo-isp.com.br
# Exibe o registro DS a ser enviado ao registrador

9. PowerDNS Recursor

O pdns-recursor é um binário separado, especializado em recursão DNS com validação DNSSEC. A separação física entre autoritativo e recursivo é uma decisão de arquitetura que aumenta a segurança e o isolamento de falhas — recomendado para ISPs que precisam de ambos os papéis.

10. Performance e dimensionamento

O PowerDNS com backend MySQL pode lidar com dezenas de milhares de consultas/segundo se bem configurado. Fatores críticos:

  • Packet Cache — ativado por padrão (cache-ttl), reduz drasticamente as consultas ao banco.
  • Query Cachequery-cache-ttl armazena resultados de consultas ao backend.
  • Índices no banco — garanta índices em records(name, type) e domains(name).
  • Replicação de banco — use slaves MySQL para distribuir consultas de leitura.
  • Anycast — múltiplos servidores PowerDNS compartilhando o mesmo IP via BGP.

11. Segurança e hardening

  • Restringir transferência de zonaallow-axfr-ips apenas para IPs dos slaves.
  • Rate limiting — configurar max-qper-qdomain para evitar amplificação.
  • API protegidaapi-key forte, webserver restrito a localhost ou IPs confiáveis.
  • TSIG — autenticar transferências de zona com chave criptográfica.
  • DNSSEC — assinar zonas para prevenir cache poisoning.

12. Monitoramento

O PowerDNS expõe métricas via API (/api/v1/servers/localhost/statistics) e também pode ser consultado via pdns_control. Script de health check para Zabbix/PRTG:

#!/bin/bash
# check_pdns.sh
dig @localhost exemplo-isp.com.br SOA +short +time=2
if [ $? -eq 0 ]; then
  echo "OK: PowerDNS respondendo"
  exit 0
else
  echo "CRITICAL: PowerDNS não responde"
  exit 2
fi

13. Backup e recuperação

No PowerDNS, o backup é centrado no banco de dados:

  • Banco pdns (tabelas domains, records, cryptokeys).
  • Arquivo /etc/powerdns/pdns.conf (configuração).
  • Chaves DNSSEC também estão no banco — um dump completo do banco as preserva.

Use restic ou Borg com a regra 3‑2‑1‑1‑0. A restauração consiste em recriar o banco, reinstalar o PowerDNS e apontar para o banco restaurado.

14. Comparação com BIND e outros

CaracterísticaPowerDNSBIND9
ArmazenamentoBanco de dados (MySQL, PostgreSQL, SQLite)Arquivos de zona texto
API nativaSim (REST)Não (depende de ferramentas externas)
DNSSECIntegrado ao banco (chaves no schema)Arquivos separados (.signed, .key)
Views (Split DNS)Não (usa‑se instâncias separadas)Sim, nativas
RecursãoBinário separado (pdns-recursor)Mesmo daemon (opcional)
Ideal paraAutomação, integração com sistemasAmbientes tradicionais, todas as funcionalidades

15. Troubleshooting

pdns não inicia após configurar backend

Verificar journalctl -u pdns — credencial errada ou schema não importado.

Registro criado via pdnsutil não resolve

PowerDNS consulta o banco a cada requisição — verifique com pdnsutil list-zone se o registro foi de fato gravado.

API retorna 401

Header X-API-Key ausente ou divergente do api-key em pdns.conf.

16. Glossário

Backend Plugin que conecta o PowerDNS a uma fonte de dados (MySQL, PostgreSQL, pipe, etc.).
pdnsutil Ferramenta de linha de comando para gerenciar zonas, registros e DNSSEC.
Packet Cache Cache in‑memory de respostas DNS completas, reduz latência e carga no banco.
Query Cache Cache de resultados de consultas SQL ao backend.
Native Tipo de zona gerenciada localmente, sem replicação DNS built‑in.
Supermaster Master autorizado a criar zonas slave automaticamente no servidor.
TSIG Transaction Signature — autenticação criptográfica para transferências de zona.
API REST Interface HTTP para gerenciamento programático de zonas e registros.

17. Referências

  • Documentação oficial PowerDNS (doc.powerdns.com) — Authoritative Server, backends, API.
  • RFC 1034/1035 — Domain Names (base do protocolo DNS).
  • RFC 4033/4034/4035 — DNSSEC.
  • Páginas relacionadas: BIND9, DNSSEC, Unbound.

Conteúdo técnico independente. Nenhum trecho é cópia literal de fonte de terceiro.