MySQL DNS · 6 min read · Oct 02, 2025

Executando um Servidor DNS Baseado em MySQL: MyDNS

Este é um “copiar e colar” HowTo! A maneira mais fácil de seguir este tutorial é usar um cliente de linha de comando/cliente SSH (como o PuTTY para Windows) e simplesmente copiar e colar os comandos (exceto onde você deve fornecer suas próprias informações, como endereços IP, nomes de host, senhas,…). Isso ajuda a evitar erros de digitação.

Executando um Servidor DNS Baseado em MySQL: MyDNS

Versão 1.0
Autor: Falko Timme
Última edição: 01/02/2006

Neste tutorial, descreverei como instalar e configurar o MyDNS, um servidor DNS que usa um banco de dados MySQL como backend em vez de arquivos de configuração como, por exemplo, Bind ou djbdns. Isso tem a vantagem de que você pode facilmente usar frontends baseados na web para administrar seus registros DNS. Você poderia até escrever seu próprio frontend, por exemplo, usando PHP, para interagir com o banco de dados MyDNS. O MyDNS simplesmente lê os registros do banco de dados, e não precisa ser reiniciado/recarregado quando os registros DNS mudam ou zonas são criadas/editadas/excluídas! Esta é uma grande vantagem.

Eu também mostrarei como configurar um servidor DNS secundário, mas não usarei transferências de zona normais para obter os registros do servidor DNS primário para o secundário; em vez disso, usarei replicação de banco de dados MySQL. Eu simplesmente replicarei os dados do servidor primário para o secundário.

Existem vários frontends web para o MyDNS. Claro, você pode usar o phpMyAdmin para a administração do MyDNS, ou pode usar o frontend web que vem com o MyDNS (que não é para iniciantes porque falta as descrições dos campos), ou pode usar o MyDNSConfig, uma ferramenta escrita por mim. Eu mostrarei como instalar cada um deles.

No geral, o MyDNS me deixou uma impressão muito boa, e eu acho que o futuro pertence a serviços que usam um banco de dados como backend em vez de arquivos de configuração.

Eu usei um sistema Debian Sarge para esta configuração. No entanto, a maioria das etapas descritas aqui também deve se aplicar a outras distribuições como Fedora, SuSE, Mandriva, etc.

Quero dizer primeiro que esta não é a única maneira de configurar tal sistema. Existem muitas maneiras de alcançar esse objetivo, mas este é o caminho que eu sigo. Não dou nenhuma garantia de que isso funcionará para você!

1 Instalar MySQL E MyDNS

Primeiro, certifique-se de que você tem uma instalação básica do Debian funcionando, conforme descrito em https://www.howtoforge.com/perfect_setup_debian_sarge e https://www.howtoforge.com/perfect_setup_debian_sarge_p2 (por favor, consulte o respectivo documento “Perfect Setup” no HowtoForge se você usar outra distribuição).

Em seguida, instale o MySQL:

apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin

Você será solicitado a responder algumas perguntas:

Habilitar suExec? <– Sim
Qual servidor web você gostaria de reconfigurar automaticamente? <– apache, apache2
Você quer que eu reinicie o apache agora? <– Sim

Defina uma senha root do MySQL assim:

mysqladmin -u root password sua_senha_sql_root

A instalação do MyDNS é fácil. Basta seguir estas etapas:

cd /tmp/
wget http://mydns.bboy.net/download/mydns-1.0.0.tar.gz
tar xvfz mydns-1.0.0.tar.gz
cd mydns-1.0.0/
./configure
make
make install

Agora precisamos criar o banco de dados MyDNS (chamado mydns) e um usuário do banco de dados MyDNS (também chamado mydns, com mydns_password como senha):

mysql -u root -p
Digite a senha:

Agora, no shell do MySQL, criamos o banco de dados mydns e o usuário mydns:

CREATE DATABASE mydns;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.
TO ‘mydns’@’localhost’ IDENTIFIED BY ‘mydns_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns. TO ‘mydns’@’localhost.localdomain’ IDENTIFIED BY ‘mydns_password’;
FLUSH PRIVILEGES;
quit;

De volta ao shell normal, criamos as tabelas no banco de dados mydns:

mydns –create-tables | mysql -u root -p mydns
Digite a senha:

Se você ver erros como estes:

mydns[14287]: erro ao carregar gid para o grupo nobody' mydns[14287]: usando gid 65534 do usuárionobody’

d não se preocupe, você pode esquecê-los.

Em seguida, adicionamos mais duas colunas à tabela soa do banco de dados mydns:

mysql -u root -p
Digite a senha:
ALTER TABLE mydns.soa ADD COLUMN active ENUM(‘Y’,’N’) NOT NULL;
ALTER TABLE mydns.soa ADD INDEX (active);
ALTER TABLE mydns.soa ADD COLUMN xfer CHAR(255) NOT NULL;
quit;

Com a coluna active, você pode simplesmente habilitar/desabilitar zonas mais tarde, e a coluna xfer pode ser usada para transferências de zona (que não precisamos porque usaremos replicação de banco de dados MySQL para obter os dados para o servidor DNS secundário, mas menciono isso para completar) (se você quiser usar transferências de zona em vez de replicação de banco de dados, então a coluna xfer deve conter um ou mais endereços IP separados por vírgulas. Esses endereços IP serão permitidos para transferir a zona.).

Agora criamos o arquivo de configuração do MyDNS /etc/mydns.conf executando este comando:

cd /tmp/mydns-1.0.0/
make conf

Em seguida, editamos /etc/mydns.conf para que fique assim:

| ## ## /etc/mydns.conf ## Sex Out 21 16:36:32 2005 ## Para mais informações, veja mydns.conf(5). ## # INFORMAÇÕES DO BANCO DE DADOS db-host = localhost # Nome do host do servidor SQL db-user = mydns # Nome de usuário do servidor SQL db-password = mydns_password # Senha do servidor SQL database = mydns # Nome do banco de dados MyDNS # OPÇÕES GERAIS user = nobody # Executar com as permissões deste usuário group = nogroup # Executar com as permissões deste grupo listen = * # Ouvir nesses endereços ('*' para todos) # OPÇÕES DE CACHE zone-cache-size = 1024 # Número máximo de elementos armazenados no cache de zona zone-cache-expire = 60 # Número de segundos após os quais as zonas em cache expiram reply-cache-size = 1024 # Número máximo de elementos armazenados no cache de resposta reply-cache-expire = 30 # Número de segundos após os quais as respostas em cache expiram # ESOTÉRICA log = LOG_DAEMON # Instalação a ser usada para a saída do programa (LOG_*/stdout/stderr) pidfile = /var/run/mydns.pid # Caminho para o arquivo PID timeout = 120 # Número de segundos após os quais as consultas expiram multicpu = 1 # Número de CPUs instaladas em seu sistema allow-axfr = no # O AXFR deve ser habilitado? allow-tcp = yes # O TCP deve ser habilitado? ignore-minimum = no # Ignorar TTL mínimo para a zona? soa-table = soa # Nome da tabela que contém registros SOA rr-table = rr # Nome da tabela que contém dados RR |

Certifique-se de preencher os detalhes corretos do banco de dados e também preste atenção ao grupo. No Debian, o grupo de nobody é nogroup, que é diferente do valor padrão em /etc/mydns.conf (também nobody), então certifique-se de mudar isso! Também defina allow-tcp como sim.

Agora criamos o script de inicialização do MyDNS /etc/init.d/mydns:

| #! /bin/sh # # mydns Iniciar o servidor MyDNS # # Autor: Falko Timme <[email protected]>. # set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=mydns DAEMON=/usr/local/sbin/$NAME DESC="Servidor DNS" SCRIPTNAME=/etc/init.d/$NAME # Saia graciosamente se o pacote foi removido. test -x $DAEMON || exit 0 case "$1" in start) echo -n "Iniciando $DESC: $NAME" $DAEMON --background echo "." ;; stop) echo "Parando $DESC: $NAME." kill -9 `pidof $NAME` &> /dev/null ;; restart) echo "Reiniciando $DESC: $NAME." $0 stop && sleep 1 $0 start ;; *) echo "Uso: $SCRIPTNAME {start|stop|restart}" >&2 exit 1 ;; esac exit 0 |

Então, tornamos executável e iniciamos o MyDNS:

chmod 755 /etc/init.d/mydns
/etc/init.d/mydns start

Se você quiser que o MyDNS seja iniciado automaticamente durante a inicialização do sistema, você deve criar os links de inicialização do sistema necessários. No Debian, você faz isso assim:

update-rc.d mydns defaults 21 22

No Fedora ou RedHat, você executaria isto:

chkconfig –levels 235 mydns on

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.