LPI-2 202-450 Topico 207.2
Criar e manter zonas de DNS
207.2 Criar e manter zonas de DNS - Objetivos
Peso 3
O candidato deve ser capaz de criar um arquivo de zona para redirecionamento, zona reversa ou servidor raiz. Este objetivo incui definir apropriadamente valores de registros, incluindo hosts em zonas e adicionando as zonas ao DNS. Também deve ser capaz de delegar uma zona a outro servidor DNS
Conhecimentos-chave:
- Arquivos de configuração, termos e ferramentas do BIND 9;
- Ferramentas para solicitar informações de um servidor DNS;
- Formato, conteúdo e localização dos arquivos de zona do BIND;
- Métodos para incluir um novo host à zona, incluindo zonas reversas.
Lista parcial dos arquivos, termos e ferramentas utilizados:
/var/named/*
;- Sintaxe dos arquivos de zona;
- Formato dos registros;
named-checkzone
;named-compilezone
;- masterfile-format;
dig
;nslookup
;host
;
207.2 Criar e manter zonas de DNS - Conteúdo
Diferente de um servidor cache-only, num servidor tradicional de
DNS os arquivos de zona contém a correspondência de IPs e nomes
para os domínios especificados em named.conf
.
Criando um domínio
Falando no arquivo named.conf
ao criar um domínio tradicional deve
ser criada uma entrada diferente da que fazemos no tipo
cache-only.
options { directory "/var/named"; }; zone "." IN { type hint; file "root.hints"; }; zone "gink.go" IN { type master; file "gink.go.zone"; };
Nessa última entrada temos as opções e o arquivo de zona para as
solicitações de nome para o domínio "gink.go".
A opção type
determina a prioridade da zona para o domínio, só
existem duas opções em domínios tradicionais sendo master
ou
slave
.
Obs.: Assim podemos resumir que a opção type
só tem 3
alternativas de configuração sendo hint
para servidores
cache-only e master
ou slave
para servidores tradicionais.
O arquivo definido na opção file
deve ser criado no mesmo
diretório definido na opção directory
na seção options
. O
arquivo de zona pode ter qualquer nome, porém tradicionalmente
utiliza-se os prefixos/sufixos zone
ou db
.
Registros da zona
O arquivo de zona contém várias informações dos nomes do domínio em questão. Um exemplo de arquivo de zona é:
$TTL 3D @ IN SOA floid.gink.go. hostmaster.gink.go. ( 2007060401 ; serial 28800 ; refresh (8 horas) 7200 ; retry (2 horas) 2419200 ; expire (4 semanas) 86400 ; Negative cache TTL (1 dia) ) NS floyd MX 5 mail floyd A 192.168.0.1 hamilton A 192.168.0.2 www CNAME hamilton felix A 192.168.0.4 mail CNAME felix emily A 192.168.0.11
$TTL 3D
Indica a validade padrão dos dados ou por quanto tempo os dados conseguidos a partir desse servidor ficarão no cache de DNS (no caso do exemplo 3 dias).Descrição dos itens:
@ IN SOA floid.gink.go. hostmaster.gink.go. ( │ │ │ │ └─ Email do admin ("." inves de @) │ │ │ └───────────────── Nome do servidor Autoritativo │ │ └───────────────────────── Chama os próximos valores │ └────────────────────────────── Internet determina a classe └─────────────────────────────────── "Atalho para $ORIGIN"
$ORIGIN
(ou@
) é uma diretiva (variável) que contém como valor padrão o nome da zona em questão indicada na respectiva seção do arquivonamed.conf
;SOA
= "Start of Authority" Chama os valores do servidor autoritativo e do email do administrador. Atenção tanto o nome do DNS quanto o email do admin terminam com.
;(
- ao final da linha indica o início das propriedades dos registros;2009090401
; é o "número serial" - número único que indica a zona, pode ser qualquer número mas tradicionalmente é uma data seguido de um número serial, ele sempre deve ser "incrementado" quando se faz uma nova configuração;28800
; refresh - intervalo de atualização para o servidor secundário, no exemplo 8 horas;7200
; retry - é o intervalo em que um servidor secundário tentará devolver a autoridade para o servidor primário no caso de o secundário ter assumido a autoridade da zona em uma eventual indisponibilidade do primário, no exemplo 2 horas;2419200
; expire - prazo de validade das informações em um servidor secundário, no exemplo 4 semanas;86400
; Negative cache TTL - intervalo mínimo de permanência das informações negativas no cache de clientes. Por exemplo, uma consulta sobre um host que não está registrado no banco de dados. Isso reduz a carga de resolução negativa no servidor, no exemplo 1 dia;)
; fecha as propriedades da zona.Após as proprieades iniciam-se os mapeamentos (entradas), também conhecidas como "RR" (Resource Records ou em português Registros de Recursos) e/ou nomes do domínio, essas entradas são compostas conforme a seguinte tabela a seguir:
Nome Classe Tipo Prioridade Tradução @ IN NS felix NS floyd MX 5 mail floid A 192.168.0.1 hamilton A 192.168.0.2 www CNAME hamilton felix A 192.168.0.4 mail CNAME felix emily A 192.168.0.11 Observação: Incluida a entrada
NS
para felix para exemplificar que o campo "classe" é opcional e o@
para referenciar$ORIGIN
também.Também é possível incluir o campo TTL entre as colunas "Nome" e "Classe" ou entre "Classe" e "Tipo". Porém também é um campo pouco usado.
DNS Reverso
Além de zonas para traduzir nomes para números IP, é praxe criar zonas para traduzir números de IP para nomes, processo chamado DNS reverso.
Para tanto é necessário criar mais uma zona específica no arquivo
named.conf
que aponta para um outro arquivo de zona
independente. Note que estamos trabalhando com o mesmo arquivo
named.conf
apenas adicionando os casos estudados:
options { directory "/var/named"; }; zone "." IN { type hint; file "root.hints"; }; zone "gink.go" IN { type master; file "gink.go.zone"; }; zone "0.168.192.in-addr.arpa" IN { type master; file "db.192.168.0.in-addr.arpa"; allow-update { none; }; };
O último registro acima especifica a zona reversa. O nome da zona
reversa começa com o trecho do IP referente à rede, escrito de
trás para frente, seguindo do termo in-addr.arpa
, que determina
tratar-se de um registro de DNS reverso. Portanto o registro
mostrado converterá em nomes os IPs que comecem por
"192.168.0". As demais opções, como tipo, nome de arquivo etc.,
obedecem às mesmas regras do DNS.
O arquivo de zona para o DNS reverso é praticamente idêntico ao do DNS convencinoal:
$TTL 3D @ IN SOA floid.gink.go. hostmaster.gink.go. ( 2007060401 ; serial 28800 ; refresh (8 horas) 7200 ; retry (2 horas) 2419200 ; expire (4 semanas) 86400 ; Negative cache TTL (1 dia) ) NS floyd.gink.go. 1 PTR floyd.gink.go. 2 PTR hamilton.gink.go. 4 PTR felix.gink.go. 11 PTR emily.gink.go.
Nesse caso também se utiliza o @
para referenciar $ORIGIN
que por
não ter sido declarada explícitamente trata-se do valor colocado
na declaração da zona no arquivo named.conf
(0.168.192
).
No arquivo de zona reverso o tipo de apontamento utilizado é o
PTR
(ponteiro). A sintaxe é "número,tipo,nome".
Importante: os nomes de host precisam ser completos incluindo o
.
ao final.
Delegação de zona
Eventualmente pode ser necessário criar um subdomínio independente para atividades diversas (questões de email são os melhores exemplos) assim se faz necessário delegar a administração de uma porção inferior do domínio para outro servidor DNS.
Esse procedimento é feito no arquivo de zona do domínio em questão, segue exemplo:
$TTL 3D @ IN SOA floid.gink.go. hostmaster.gink.go. ( 2007060401 ; serial 28800 ; refresh (8 horas) 7200 ; retry (2 horas) 2419200 ; expire (4 semanas) 86400 ; Negative cache TTL (1 dia) ) NS floyd MX 5 mail floyd A 192.168.0.1 hamilton A 192.168.0.2 www CNAME hamilton felix A 192.168.0.4 mail CNAME felix emily A 192.168.0.11 ; ; *** Delegacao de subdominio *** test.gink.go. IN NS ns1.test.gink.go. ns1.test.gink.go. IN A 10.0.0.200
Assim na primeira linha da delegação o domínio "test.gink.go" é registrado por meio de um registro do tipo "NS" que informa que o domínio está sendo mantido por um host chamado "ns1.test.gink.go".
Já na última linha informamos o endereço IP do host "ns1.test.gink.go" por meio de um registro do tipo "A", que também é conhecido como "registro cola" ou glue record. Permitindo que se resolva a entrada NS declarada anteriormente.
Note relativo a delegação de domínio nenhum ajuste precisa ser feito no arquivo "named.conf" sendo esse um ajuste pertinente apenas ao arquivo de zona.
Lembrando que no exemplo acima apenas apontamos 1 servidor de NS é possível e recomendável ter mais de 1 servidor NS tanto para o domínio raís quanto para os domínios delegados. Assunto que trataremos a seguir.
Servidores escravos
Para aumentar a disponibilidade do serviço, é recomendável criar um servidor DNS escravo, de preferência numa localização física distante do servidor primário.
O arquivo named.conf
para subir um servidor escravo
(secundário) pode ser escrito da seguinte forma:
options { directory "/var/named"; }; zone "gink.go" { type slave; file "db.gink.go"; masters { 192.168.0.1; }; };
O arquivo de zona que no exemplo tem o nome de "db.gink.go" posuirá apenas o registro SOA:
@ IN SOA floid.gink.go. hostmaster.gink.go. ( 2007060399 ; serial 28800 ; refresh (8 horas) 7200 ; retry (2 horas) 2419200 ; expire (4 semanas) 86400 ; Negative cache TTL (1 dia) )
Os registros da zona "gink.go" serão enviados automaticamente para o servidor escravo através de um processo chamado "transferência de zona". Nem sempre esse arquivo precisará ser preenchido manualmente.
Para fazer a transferência de zona o número serial existente no servidor escravo deve ser menor do que o número existente no servidor mestre.
Aqui vale relembrar as funções de tempo do registro SOA:
- refresh: especifica o intervalo em que o slave verificará atualizações de registro no servidor mestre;
- retry: sempre que o servidor escravo não puder contactar o servidor mestre ele tentará contactar novamente dentro da janela de tempo especificada nesse campo;
- expire: define que a zona deixará de existir se esse limite de tempo for atingido sem que o secundário consiga se comunicar com o primário.
É sempre importante lembrar que por padrão os valores são escritos em "segundos" para alterar essa unidade de tempo basta utilizar sufixos como "H" para hora, "D" para dia ou "W" para semana.
Redirecionamento de servidor
Um redirecionamento no Bind simplesmente transfere todas as solicitações feitas ao servidor para outro servidor DNS, armazenando os resultados temporariamente para agilizar futuras solicitações, semelhantemente ao servidor cache-only.
Dentro desse cenário se quizermos direcionar qualquer
solicitação, basta criar a seção options
em named.conf
da
seguinte forma:
options { directory "/var/named"; forwarders { 200.192.140.21; 200.192.143.5; } };
Na configuração acima serão utilizados os servidores na seção
forwarders
para responder solicitações que não estiverem no
cache.
Também é possível redirecionar apenas solicitações de uma seção
específica, nesse caso, ao declarar a zona no arquivo
named.conf
devemos definir o tipo da zona como forward
:
zone "gink.go" IN { type forward; forwarders { 200.192.140.21; 200.192.143.5; } };
Detalhes gerais de configuração
Antes de reiniciar o named é importante verificar se existem
erros no arquivo de configuração, para isso utiliza-se o comando
named-checkconf
:
named-checkconf /etc/named.conf
Se houverem falhas elas serão informadas na saída padrão.
Formato RAW
A partir da versão 9.9, arquivos de zonas escravas são por
padrão armazenados no formato "raw". A conversão entre o formato
de texto e o formato "raw" pode ser feito com o comando
named-compilezone
.
Por exemplo, para converter o arquivo de zona lcnsqr.com.raw
do formato raw
para o formato texto:
named-compilezone -f raw -F text -o lcnsqr.com.text lcnsqr.com lcnsqr.com.raw
Diagnósticos de DNS
Comando host
O comando host
permite executar consultas simples de DNS
conforme o exemplo a seguir:
# host felix felix.gink.go has address 192.168.0.4 # host 192.168.0.4 4.0.168.194.in-addr.arpa domain name pointer felix.gink.go
No exemplo acima pudemos verificar que tanto o DNS convenional quanto o reverso estão funcionando corretamente para o host "felix".
Visto que as consultas acima foram solicitadas para o DNS padrão
do host em questão (possívelmente indicadas pelo arquivo
/etc/resolv.conf
) concluímos que eventualmente é necessário
direcionar as consultas para algum servidor de DNS
específico. Para tanto basta indicar para o comando host
na
variável de entrada $2
o endereço do servidor de DNS a consultar
conforme abaixo:
# host www floyd.gink.go Using domain server: Name: floyd.gink.go Address: 192.168.0.1#53 Aliases: www.gink.go is an alias for hamilton.gink.go. hamilton.gink.go has address 192.168.0.2 Using domain server: Name: floyd.gink.go Address: 192.168.0.1#53 Aliases: www.gink.go an alias for hamilton.gink.go. Using domain server: Name: floyd.gink.go Address: 192.168.0.1#53 Aliases: www.gink.go is an alias for hamilton.gink.go.
Comando dig
Uma ferramenta específica para diagnóstico de servidores DNS é o
comando dig
(Domain Information Groper). O comando tem
várias opções porém a forma mais trivial de invocá-lo é
dig "@servidordns" "tipo"
. Exemplo de utilização do comando dig
:
$ dig @8.8.4.4 redes.eti.br ANY ; <<>> DiG 9.16.1-Ubuntu <<>> @8.8.4.4 redes.eti.br ANY ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15831 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;redes.eti.br. IN ANY ;; ANSWER SECTION: redes.eti.br. 3599 IN MX 10 mx.zoho.com. redes.eti.br. 3599 IN MX 20 mx2.zoho.com. redes.eti.br. 3599 IN RRSIG MX 13 3 3600 20210407185210 20210226175210 15033 redes.eti.br. RR9Z8DdW+VZUk15Ke9F1lfE4zvOG/xQ9kiF1mI7++rsoPRfkOQZt6K7p +HULRVl7ypr0k508GHThHLkK25iBKQ== ;; Query time: 56 msec ;; SERVER: 8.8.4.4#53(8.8.4.4) ;; WHEN: seg mar 15 20:54:43 -03 2021 ;; MSG SIZE rcvd: 196
A saída acima é dividia tem 3 seções. O campo status
da seção
HEADER
nos permite verificar se foram encontrados erros no
servidor DNS. A seção QUESTION
mostra que tipo de requisição foi
feita ao servidor. Já a resposta é mostrada na seção ANSWER
. A
seção ADDITIONAL
(se houver) mostra os endereços dos mapeamentos
tipo A
de algum eventual CNAME
que houver na seção ANSWER
.
Comando nslookup
Outra ferramenta fundamental é o comando nslookup
. O nslookup
trabalha de dois modos, o interativo e o não interativo.
Se entrarmos na linha de comando com o comando nslookup
sem usar
argumentos entraremos no "modo interativo".
# nslookup >
Nesse "shell" que aparecerá utilizaremos inicialmente os
servidores de nome que estiverem indicados no arquivo
/etc/resolv.conf
porém outro servidor de nomes pode ser
especificado diretamente ao chamar o nslookup
da seguinte forma:
# nslookup - 8.8.8.8 >
Note que no exemplo acima há um espaço entre o comando o -
e o
endereço do servidor DNS.
Dentro da shell do nslookup
basta digitar o endereço a se
traduzir que o comando entregará os dados:
$ nslookup > baboo.com.br Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: baboo.com.br Address: 72.167.224.40 > exit $ nslookup - 8.8.8.8 > baboo.com.br Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: baboo.com.br Address: 72.167.224.40 > exit
Por fim, para pesquisar um nome de servidor no modo não interativo pode-se fornecer para o comando qual consulta e executar e também qual servidor a ser consultado conforme abaixo:
$ nslookup zabbix.infralinux.com.br Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: zabbix.infralinux.com.br canonical name = www.infralinux.com.br. Name: www.infralinux.com.br Address: 191.252.222.37 $ nslookup zabbix.infralinux.com.br 8.8.4.4 Server: 8.8.4.4 Address: 8.8.4.4#53 Non-authoritative answer: zabbix.infralinux.com.br canonical name = www.infralinux.com.br. Name: www.infralinux.com.br Address: 191.252.222.37