PowerDNS: transforme o seu PC com Linux num servidor de DNS
Um dos serviços/protocolos mais importantes em qualquer rede de dados é o DNS (Domain Name System). Tal como o nome sugere, o DNS traduz nomes em endereços IPs e vice-versa. Hoje ensinamos a instalar e a configurar o PowerDNS.
O PowerDNS é um software servidor de DNS (Domain Name System) que pode ser usado para gerir e resolver domínios na Internet ou em redes privadas. É uma alternativa popular a servidores como o BIND, oferecendo maior flexibilidade e suporte a bases de dados como MariaDB, PostgreSQL e SQLite.
Principais características do PowerDNS
- Modularidade
- Pode utilizar diferentes backends (como MySQL, PostgreSQL, LDAP, entre outros) para armazenar registos DNS.
- Eficiência e escalabilidade
- Suporta multithreading e consegue lidar com um elevado volume de tráfego.
- Segurança
- Inclui funcionalidades como DNSSEC, que protege contra ataques de envenenamento de cache (cache poisoning).
- Interface de administração
- Pode ser gerido através do PowerDNS Admin, uma interface gráfica.
- Dois modos de funcionamento
- Pode ser configurado como um servidor DNS autoritativo, para gerir domínios, ou como um servidor recursivo, para resolver consultas.
Componentes principais do PowerDNS
- PowerDNS Authoritative Server – Responde a consultas DNS para domínios específicos.
- PowerDNS Recursor – Resolve nomes de domínio consultando outros servidores DNS.
Resource Records utilizados em zonas DNS
Toda a informação associada a um domínio DNS é registada nos ficheiros de zonas através de resource records. Os resource records permitem definir um tipo de apontador para endereços IP, nomes, etc. Por exemplo, quando criar um registo no DNS relativo a um servidor de e-mail, usamos o resource records MX (Mail Exchanger)
Tipos de resource records mais importantes:
- A – Address: Associação de um nome a um endereço (mapeamento direto)
- AAAA – Address IPv6; Associação de um nome a um endereço IPv6
- NS (NameServer); Indica o nome de um servidor de DNS do domínio ou subdomínio;
- CNAME – (Canonical NAME); um alias (nome alternativo) para um host;
- MX - (Mail eXchanger); Definição de servidores de correio eletrónico do domínio ou subdomínio;
- PTR – (PoinTeR); Associação de um endereço a um nome (reverse DNS – mapeamento inverso)
- SOA – (Start Of Authority); Identificação de cabeçalhos de zonas
- SRV - (SeRVice); permite definir serviços disponíveis num domínio
- TXT – Definição de informação textual sobre o domínio
Como transformar um PC num servidor de DNS com o PowerDNS?
Instalação do PowerDNS
Quando se fala em serviços de DNS para Linux, os nomes mais populares são o Bind9 ou djbdns. Para hoje a nossa sugestão vai para o PowerDNS pois é um serviço bastante leve e com muitas funcionalidades. Para instalar o PowerDNS no RockyLinux devem começar por instalar um sistema de gestão de base de dados.
Passo 1: Instalar MariaDB (ou MySQL)
sudo dnf install -y mariadb-server mariadb sudo systemctl enable --now mariadb |
Agora, executem o assistente de configuração segura:
sudo mysql_secure_installation |
Passo 2: Criar Base de Dados e Utilizador
Aceda ao MariaDB
sudo mysql -u root -p |
Crie uma base de dados e um utilizador para o PowerDNS:
CREATE DATABASE powerdns; GRANT ALL ON powerdns.* TO 'pdns'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; EXIT; |
Agora, descarregue o schema SQL para criar as tabelas:
sudo dnf install -y wget wget https://raw.githubusercontent.com/PowerDNS/pdns/master/modules/gsql/backend-schema.mysql.sql mysql -u pdns -p powerdns < backend-schema.mysql.sql |
Passo 3: Instalar o poweDNS
Neste passo vamos instalar o PowerDNS e o backend MySQL
sudo dnf install -y epel-release sudo dnf install -y pdns pdns-backend-mysql |
Passo 4: Configurar o poweDNS
Edite o ficheiro de configuração
sudo nano /etc/pdns/pdns.conf |
Adicione ou edite as seguintes linhas:
launch=gmysql
gmysql-host=127.0.0.1
gmysql-dbname=powerdns
gmysql-user=pdns
gmysql-password=password |
Guarde e saia (CTRL+X, Y, Enter). Reinicie o serviço:
sudo systemctl enable --now pdns sudo systemctl restart pdns |
Passo 5: Configurar um recursor
Antes de definirmos a nossa zona no DNS, é necessário indicar qual o servidor de DNS que vai resolver nomes fora do nosso domínio. Para este exemplo vamos usar o servidor da Google (8.8.8.8). Esse informação é configurada no ficheiro /etc/powerdns/pdns.conf podendo ser usado o seguinte comando para tal:
sudo sed -i 's/# recursor=/recursor=8.8.8.8/g' /etc/powerdns/pdns.conf |
Depois de configurado devemos fazer um restart ao serviço pdns e instalar o dnsutils
sudo service pdns restart sudo apt-get install dnsutils |
Depois de reiniciarem o serviço e instalar o dnsutils, podem testar usando, por exemplo, o comando
nslookup pplware.com localhost |
Configurar uma ZONA no PowerDNS
Como referido, toda a informação associada a um domínio DNS é registada nos ficheiros de zonas. Para isso vamos abrir o ficheiro /etc/powerdns/bindbackend.conf e indicar a zona para o nosso domínio DNS interno. Para este tutorial, vamos considerar que o domínio DNS é pplware.com
zone "pplware.com" { type master; file "/etc/powerdns/bind/pplware.com.zone"; allow-update { none; }; }; |
De seguida vamos criar o ficheiro /etc/powerdns/bind/pplware.com.zone onde vamos colocar a informação da nossa zona. Para isso começamos por criar o diretório /etc/powerdns/bind (para termos o serviço organizado)
sudo mkdir /etc/powerdns/bind |
Em seguida criamos e editamos o ficheiro /etc/powerdns/bind/pplware.com.zone e colocamos lá a seguinte informação:
Nota: De referir que o endereço 192.168.1.97 corresponde ao meu PI. Devem alterar pelo IP que está atribuído ao vosso.
$ORIGIN pplware.com ; base for unqualified names $TTL 1h ; default time-to-live @ IN SOA ns.pplware.com hostmaster.pplware.com ( 1; serial 1d; refresh 2h; retry 4w; expire 1h; minimum time-to-live ) IN NS ns IN A 192.168.1.97 ns IN A 192.168.1.97 |
E está feito. O nosso servidor de DNS está instalado, configurado e pronto a ser usado.
Adicionar novos registos
Como este serviço vai ficar a funcionar na rede local, podemos atribuir um nome a todos os dispositivos que estão nessa rede. Por exemplo, vamos considerar que queremos dar o nome gwmeo ao router que tem o endereço 192.168.1.254. Para isso, basta acrescentar ao ficheiro anterior a seguinte linha:
gwmeo IN A 192.168.1.254 |
Caso o utilizador pretenda que este equipamento tenha um nome alternativo (CNAME) pode configurar algo do tipo:
gwmeo IN A 192.168.1.254 router IN CNAME gwmeo |
Com a informação anterior, qualquer dispositivo que tenha configurado como servidor de DNS o PI, poderá aceder ao router através do nome gwmeo ou router.
No final da configuração devem reiniciar novamente o serviço pdns.
Sempre que queiram acrescentar novas máquinas, basta acrescentar essa informação ao ficheiro /etc/powerdns/bind/pplware.com.zone.
Quem está com vontade de dizer “tanto trabalho para quê” que pense um bcadinho. Porque quand o DNS do google e cloudflaiere começar a bloquera tudo o que mexe quem tiver um servidor DNS destes é REI!!!
XD yaya é isso e imprimir nota propria para nao depender do euro
e que nameservers vais usar para ser rei? ou vais martelar as entradas uma a uma?
Já as martelo há mais de 10 anos. O meu DNS é uma obra prima.
Configurar/instalar o mysql e depois não o usar? ♂️
Nem tinha lido o artigo e fui cuscar.. realmente as tuas skills são top, manda-me o teu cv que vens já para a minha equipa com 100k de ordenado para começar
então e eu?
tu estás melhor a vender banha da cobra
banha de cobra a boiar, não te esqueças LOL
Technitium DNS Server de longe o melhor !
Obrigado.
o que define um DNS Server como sendo o melhor?
aqui usamos infoblox, achas que isso se vai sequer comparar, ou com um bluecat ou EIP?
têm de começar a ter calma com os superlativos absolutos
O melhor para situações a que se refere o artigo.