![Adicione zonas extras fora do banco de dados MySQL](https://rvso.com/image/623631/Adicione%20zonas%20extras%20fora%20do%20banco%20de%20dados%20MySQL.png)
Precisando de um back-end MySQL para meu servidor DNS, decidi mudar do Bind para o PowerDNS, cujo back-end MySQL é um pouco mais conveniente.
Basicamente: os usuários adicionam domínios ao meu banco de dados usando um frontend web, esses domínios são registrados e disponíveis para PowerDNS. Quando consulto o servidor DNS sobre esses domínios, recebo uma resposta válida. Funciona como um encanto.
O fato é que preciso adicionar domínios e zonas meus aos meus registros DNS, e adicioná-los ao banco de dados quebraria a lógica do meu aplicativo (somente os usuários deste aplicativo deveriam adicionar domínios). Gostaria de adicionar domínios e zonas extras ao PowerDNS, sem adicioná-los diretamente ao meu banco de dados.
Existe alguma maneira de registrar domínios adicionais, em um arquivo por exemplo, que seria lido antes de qualquer consulta MySQL ser feita? Ou talvez um arquivo substituto, caso nada seja encontrado entre meus registros MySQL?
Responder1
Solução encontrada, emas profundezas da barra de lançamento do PowerDNS! Existe uma maneira de ler arquivos de dados DNS antes de usar o backend do MySQL, e isso é... usando dois backends! Citando:
Conforme descrito emhttp://doc.powerdns.com/modules.html- mas não com tantas palavras;) - O PowerDNS pode lançar qualquer número de back-ends diferentes ou criar os mesmos back-ends por meio da declaração de lançamento. Normalmente, bastaria fazer isso no arquivo de configuração pdns.conf em vez da linha de comando. Esses back-ends ficarão esgotados para respostas à sua consulta DNS na ordem em que são fornecidas na declaração de lançamento. Isso significa que se o seu primeiro backend na fila puder responder à pergunta, ele o fará e se apenas o quarto na fila puder responder à pergunta, você terá o atraso do loop pelos três primeiros backends até que o PowerDNS envie a resposta. Portanto, é imperativo que você certifique-se de que seus back-ends respondamrápido o suficienteonde seria rápido o suficiente receber e responder em <1s deveria ser suficiente para ser compatível com a maioria dos servidores de nomes recursivos, porém mais rápido é melhor, é claro.
Para o meu problema, optei por usar:
- Um back-end do Bind, que serve como back-end prioritário baseado em arquivo.
- O backend MySQL, que vem em segundo lugar.
Basicamente, basta uma pequena alteração na configuração pdns.local
:
launch=bind,gmysql
Ouvi dizer que você poderia ser ainda mais específico com (atribui nomes aos back-ends):
launch=bind:first,gmysql:second
Em seguida, basta adicionar parâmetros para ambos os back-ends:
# Bind backend configuration
bind-config=/path/to/your/zones/file
# MySQL configuration
gmysql-host=localhost
gmysql-port=
gmysql-dbname=db
gmysql-user=user
gmysql-password=passwd
gmysql-dnssec=no
Tudo que você precisa fazer é criar um arquivo de zona Bind ( zone{}
blocos) referente a arquivos específicos do domínio (contendo registros SOA, A, MX, NS, ...).
Reiniciar !