Linter de Arquivo de Zona
Verifica arquivos de zona para erros de sintaxe e duplicatas
Zone File Content
Lint Results
Paste a BIND zone file to validate
O Linter de Arquivo de Zone valida sintaxe de arquivo de zone BIND e detecta problemas comuns de configuração DNS antes de deployment. Cole o conteúdo de seu arquivo de zone e a ferramenta rodas passes de validação de sintaxe semântica e estrutural informando erros com números de linha e recomendações de fix específicas. Diferente das mensagens criptográficas que BIND produz quando recusa carregar uma zone isto fornece feedback claro e acionável.
Compreendendo Validação de Arquivo de Zone
Arquivos de zone DNS são enganosamente simples. Eles parecem arquivos de texto diretos com registros listados um por linha mas contêm um número surpreendente de jeitos de introduzir erros que causam interrupções. Um ponto final ausente em um alvo externo silenciosamente cria um nome de domínio sem sentido. Uma CNAME colocada no apex de zone ou junto com outros tipos de registro viola a especificação DNS e causa comportamento impredizível do resolvedor. Registros duplicados desperdiçam espaço e confundem auditorias. Um endereço IP inválido em um registro A produz uma zone que carrega com sucesso mas retorna lixo para clientes.
O feedback padrão que você obtém de BIND quando um arquivo de zone tem erros é frequentemente inútil. Mensagens como "zone example.com/IN: loading from master file failed: bad owner name" não dizem a qual linha está errada ou o que especificamente está errado sobre ela. Você termina em busca binária pelo arquivo comentando seções até o erro desaparecer. Isto é lento frustrante e completamente desnecessário se você valida o arquivo antes de tentar carregá-lo.
Este linter realiza três passes sobre seu arquivo de zone. O pass de sintaxe verifica cada linha para formatação apropriada: contagens corretas de campo formatos válidos de valor parênteses balanceados e sintaxe apropriada de diretiva. O pass semântico verifica que valores fazem sentido: endereços IP são válidos hostnames seguem regras RFC TTLs estão dentro de intervalos razoáveis e alvos estão apropriadamente qualificados. O pass estrutural examina a zone como um todo: registros SOA e NS requeridos estão presentes conflitos de CNAME são identificados duplicatas são sinalizadas e alvos órfãos são detectados. Cada issue é informado com seu número de linha nível de severidade e uma descrição específica do que está errado e como consertar.
Como Fazer Lint de um Arquivo de Zone DNS
- Cole o conteúdo de seu arquivo de zone BIND no campo de entrada
- O linter roda passes de validação de sintaxe semântica e estrutural
- Revise a lista de erros avisos e mensagens informacionais com números de linha
- Corrija os issues informados e re-valide até o arquivo de zone passar limpo
Erros Comuns de Arquivo de Zone Detectados
| Erro | Exemplo | Severidade |
|---|---|---|
| Registro SOA ausente | Zone não tem SOA no apex | Erro |
| Registros NS ausentes | Apex de zone carece de registros NS | Erro |
| CNAME no apex de zone | @ IN CNAME other.example.com. | Erro |
| CNAME com outros tipos | www tem ambos registros CNAME e A | Erro |
| Ponto final ausente em FQDN | www IN CNAME target.other.com | Aviso |
| Registros duplicados | Dois registros A idênticos para www | Aviso |
| TTL irrazoável | TTL de 0 ou 31536001 (>1 ano) | Aviso |
| Parênteses desbalanceados | Registro SOA com ) ausente | Erro |
| IP inválido em registro A | www IN A 999.1.2.3 | Erro |
| Tipo de registro desconhecido | www IN AAAB 2001:db8::1 | Erro |
Exemplo de Lint de Arquivo de Zone
Arquivo de Zone de Entrada
$TTL 3600
@ IN SOA ns1.example.com. admin.example.com. (
2024010101 ; serial
3600 ; refresh
900 ; retry
604800 ; expire
86400 ) ; minimum
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
@ IN CNAME www.example.com.
www IN A 203.0.113.10
www IN A 203.0.113.10
mail IN A 203.0.113.20
smtp IN CNAME mail
smtp IN MX 10 mail
api IN A 192.168.1.500
Saída de Linter
Linha 10: ERRO - CNAME no apex de zone (@) conflita com registros SOA e NS
Linha 12: AVISO - Registro duplicado: www IN A 203.0.113.10
Linha 15: ERRO - Registros CNAME e MX não podem coexistir para nome "smtp"
Linha 16: ERRO - Endereço IPv4 inválido em registro A: 192.168.1.500 (octeto > 255)
Quando Usar o Linter de Arquivo de Zone
- Antes de fazer deployment de mudanças de zone -- Pegar erros que causariam BIND recusar a zone ou servir respostas incorretas
- Após editar manualmente arquivos de zone -- Edições manuais frequentemente introduzem typos pontos ausentes ou erros de sintaxe
- Validando zones geradas por script -- Scripts de geração de zone automatizados podem produzir saída sutilmente inválida
- Durante migrações de DNS -- Arquivos de zone exportados de uma plataforma DNS podem precisar ajustes de sintaxe para outra
- Code review para mudanças de infraestrutura -- Incluir linting de arquivo de zone em sua checklist de revisão para pulls de DNS
- Treinamento e aprendizado -- Entender por que construções específicas de arquivo de zone são inválidas ajuda aprofundar conhecimento de DNS
Como Validação de Arquivo de Zone Funciona
O linter realiza três passes de validação cada um pegando diferentes classes de problemas:
Validação de Sintaxe
Verifica o formato bruto de cada linha:
- Contagens de campo de registro: Cada tipo de registro espera um número específico de campos (por exemplo registros A precisam de um nome classe tipo e endereço IPv4)
- Formatos de valor: Endereços IP hostnames valores de TTL e números de prioridade são verificados para formatação válida
- Sintaxe de diretiva: Diretivas
$TTL$ORIGINe$INCLUDEdevem seguir regras de sintaxe BIND - Registros multi-linha: Registros entre parênteses (como SOA) devem ter parênteses de abertura e fechamento combinados
- Tratamento de comentário: Comentários de ponto-e-vírgula são removidos antes da validação
Validação Semântica
Verifica que valores fazem sentido em contexto:
- Intervalos de TTL: Valores devem estar entre 60 segundos e 1 semana para a maioria dos registros; o linter sinaliza TTLs irrazoáveis
- Validade de hostname: Todos hostnames referenciados em registros são verificados contra RFC 1123
- Qualificação de alvo: Alvos externos devem estar totalmente qualificados (ponto final); alvos relativos devem existir dentro da zone
- Validade de endereço: Endereços de registro A devem ser IPv4 válido; registros AAAA devem ser IPv6 válido
Validação Estrutural
Verifica a zone arquivo como um todo:
- Registros requeridos: O apex de zone deve ter pelo menos um registro SOA e pelo menos dois registros NS
- Conflitos de CNAME: Nomes com registros CNAME não podem ter qualquer outro tipo de registro
- Restrições de apex: Registros CNAME não podem aparecer no apex de zone
- Detecção de duplicata: Registros idênticos (mesmo nome tipo classe e dados) são sinalizados
- Detecção órfã: CNAME ou alvos de MX que apontam para nomes não definidos na zone acionam um aviso
Linting de Arquivo de Zone na Prática
O hábito mais valioso que você pode construir em torno de gerenciamento de arquivo de zone é fazer lint antes de cada deployment. Leva segundos e pega os tipos de erros que causam interrupções durando minutos ou horas. Um pipeline CI/CD que inclui linting de arquivo de zone como um gate de pré-deployment é ainda melhor porque previne arquivos de zone quebrados de jamais alcançarem produção. Trate seus arquivos de zone como código: eles devem passar por revisão validação e teste antes de deployment.
Os erros que causam a maioria da dor operacional não são os que BIND recusa completamente. BIND recusará carregar uma zone com erro de sintaxe e enquanto isto é disruptivo pelo menos você sabe imediatamente que algo está errado. Os erros perigosos são os que BIND aceita mas que produzem comportamento incorreto: um ponto final ausente que cria um alvo de CNAME errado um registro duplicado que causa respostas inconsistentes dependendo de qual servidor autoritativo responde ou um conflito de CNAME que faz um tipo de registro funcionar enquanto outro falha silenciosamente. Este linter pega todos esses.
Ao debugar um arquivo de zone que o linter sinaliza comece com os erros e corrija-os antes de endereçar avisos. Erros indicam condições que causarão resolução de DNS falhar ou produzir resultados incorretos. Avisos indicam condições que são tecnicamente válidas mas provavelmente não intencionadas como registros duplicados ou TTLs que são incomumente curtos ou longos. Mensagens informacionais apontam coisas que estão bem mas vale estar ciente como o uso de nomes relativos que o linter resolveu usando o origin de zone.
Perguntas Frequentes
O linter verifica se hostnames realmente se resolvem?
Não. O linter valida sintaxe de arquivo de zone e correção estrutural sem realizar live DNS queries. Ele verifica que hostnames seguem regras RFC e que o arquivo de zone é internamente consistente mas não verifica se nomes externos referenciados existem em DNS.
Por que um ponto final ausente importa?
Em arquivos de zone BIND nomes sem ponto final são tratados como relativos ao $ORIGIN (apex de zone). Se sua zone é example.com e você escreve target.other.com sem ponto final BIND interpreta como target.other.com.example.com -- quase certamente não o que você pretendia. Nomes externos totalmente qualificados devem sempre terminar com um ponto.
O linter pode consertar erros automaticamente?
Não. O linter informa problemas mas não modifica o arquivo de zone. Fixes automatizados poderiam introduzir novos erros especialmente com conflitos de CNAME e issues estruturais que podem ter múltiplas resoluções válidas. O linter fornece informação específica o suficiente para você fazer o fix correto.
Qual é a restrição de CNAME-no-apex?
RFC 1034 proíbe registros CNAME no apex de zone porque CNAME não pode coexistir com outros tipos de registro e o apex deve ter registros SOA e NS. Se você precisa de aliasing de apex muitos provedores de DNS oferecem alternativas proprietárias como registros ALIAS ou CNAME flattening mas arquivos de zone padrão de BIND não suportam isto.
Devo fazer lint de arquivos de zone que são gerados por scripts?
Sim absolutamente. Geração de zone automatizada é uma das fontes mais comuns de arquivos de zone sutilmente inválidos. Um script pode produzir saída correta para a maioria dos inputs mas falhar em edge cases: hostnames com caracteres incomuns endereços IPv6 em formatos inesperados ou registros que criam conflitos de CNAME. Fazer lint da saída de seus scripts de geração pega esses issues antes de alcançarem produção.
Como lido com registros SOA multi-linha?
Registros SOA comumente abrangem múltiplas linhas usando parênteses. O linter lida com registros multi-linha rastreando parênteses de abertura e fechamento e juntando as linhas antes da validação. Parênteses ausentes ou desiguais são sinalizados como erros de sintaxe.
Ferramentas Relacionadas
- Gerador de Zone A/AAAA BIND - Gerar registros A e AAAA de zone BIND de CSV
- Gerador de CNAME de Zone BIND - Gerar registros CNAME de zone BIND de CSV
- Validador de Hostname - Validar hostnames de acordo com padrões RFC 1123
- Deduper de Conjunto de Registro DNS - Encontrar e remover registros DNS duplicados
- Construtor de Registro SPF - Construir registros SPF com sintaxe apropriada