Entendendo TCP/IP (Parte 3) - Resolução de nomes

Neste terceiro artigo sobre TCP/IP, vou descrever o processo de resolução de nomes. Mostrarei como configurar
o cliente DNS, bem como a diferença entre nomes Netbios e DNS. Após entendidos os conceitos, passarei a falar
sobre o DNS Server, desde o registro um domínio na Fapesp até a configurações do Bind9, passando pelas
zonas de transferência e questões de segurança.

[ Hits: 40.107 ]

Por: Ricardo Lino Olonca em 07/05/2011


Nomes Netbios X nomes DNS



Como é bem provável que você esteja trabalhando em uma rede mista, com pelo menos Linux e Windows, é quase certo que você já tenha passado por problemas de resolução de nomes para as máquinas Linux enxergarem as Windows. Você já deve ter tentado pingar uma estação Windows e não conseguir uma reposta, e ficou surpreso quando descobriu que o mesmo ping partindo de uma estação Windows funciona normalmente. Esse tópico visa explicar o motivo disso acontecer.

Desde a época do Windows 3.11, a rede Microsoft trabalha com nomes Netbios. O Netbios é extremamente simples e, por isso mesmo, contém algumas limitações, entre as quais o limite de 16 caracteres no nome, e o fato de não ser roteável. Ele era usado onde as redes não eram muito grandes. Hoje, o Netbios foi adicionado ao TCP/IP da Microsoft. No Linux não há o protocolo Netbios. Quem implementa isso é o Samba.

Para exemplificar, vamos supor que você esteja em uma máquina Windows e precise acessar outra máquina Windows de nome servidor1. Quando tentamos resolver um nome Netbios, os passos executados pelo resolvedor do Windows são os seguintes:
  1. O resolvedor adiciona o sufixo DNS configurado nas opções de rede. Por exemplo vivaolinux.com.br;
  2. O resolvedor verifica se o nome servidor1.vivaolinux.com.br está em seu cache dns;
  3. Se não estiver, o resolvedor consulta o arquivo c:\windows\system32\drivers\etc\hosts;
  4. Se não existir, o resolvedor faz uma consulta ao DNS;
  5. Se o DNS não resolver, o sufixo é retirado do nome e passa-se a usar o Netbios;
  6. O resolvedor consulta o cache netbios para ver se o nome já foi resolvido;
  7. Caso não existe, o resolvedor consulta o servidor Wins (semelhante ao DNS, mas para nomes Netbios);
  8. Se o Wins não resolver, será feito um broadcast;
  9. Se não resolver por broadcast, o arquivo c:\windows\system32\drivers\etc\lmhosts será usado.

Como geralmente existe um servidor DNS interno e que os nomes netbios são mapeados para DNS (por exemplo, existe um registro no DNS interno para a máquina servidor1), pingar "servidor1" é o mesmo que pingar "servidor1.vivaolinux.com.br". Esse mapeamento geralmente é criado quando a estação é colocada no domínio do Active Directory do Windows. O Active Directory cria uma entrada no DNS Interno para a estação. Mas se uma máquina não está no domínio (algo comum em estações Linux), esta não será configurada no DNS. Assim, quando uma estação Linux tentar pingá-la, ela não responderá na rede, pois o Linux não faz consultas Netbios, fazendo somente os 4 primeiros passo da resolução de nomes do Windows.

Uma forma de amenizar isso é utilizar o programa nbtscan. Na sua forma mais simples, ele consulta um IP e traz os registros netbios associados a este IP.

nbtscan 172.20.1.8

Resposta:

IP address        NetBIOS Name    Server    User            MAC address   
------------------------------------------------------------------------------------------------------------------------------------------------------------
172.20.1.8        SRVAPL            <server>   <unknown>        00:1c:c4:c1:9c:b4

Uma opção interessante é fazer com que o nbtscan vasculhe toda a rede a gere uma saída no formato do arquivo hosts. Um script poderia rodar isso todo dia e atualizar o arquivo /etc/hosts. Para rodar esse comando devemos estar logado como root.

# nbtscan -e 172.20.0.0/16

Resposta:

172.20.0.0 Sendto failed: Permission denied
172.20.0.10 PWKS0220
172.20.1.6 PSRV014
172.20.1.1 PSRV011
172.20.1.8 SRVAPL
172.20.1.20 PSRV020
172.20.1.4 PSRV029
172.20.1.86 PSRV028
...

Se preferir usar uma saída no estilo lmhosts, use o parâmetro "-l" ao invés de "-e"
Página anterior     Próxima página

Páginas do artigo
   1. Introdução ao conceito de resolução de nomes
   2. Funcionamento do DNS
   3. Comandos úteis
   4. Nomes Netbios X nomes DNS
   5. Considerações finais
Outros artigos deste autor

Entendendo TCP/IP (parte 4) - DHCP

MooseFS - Sistema de arquivos distribuído

Entendendo TCP/IP (Parte 5) - Portas TCP/UDP

Deduplicação com LessFS

Entendendo o TCP/IP

Leitura recomendada

CBQ sem medo

tMSNc - MSN modo texto

Ziproxy - Proxy de compactação e redução de imagens

O programa gwhois

Autenticando Documento com Blockchain e Ethereum

  
Comentários
[1] Comentário enviado por julio_hoffimann em 07/05/2011 - 18:51h

Oi Ricardo, parabéns!

É muita informação! Obrigado por explicar de maneira didática todos esses conceitos. A série como um todo já está nos meus favoritos. ;-)

Abraço!

[2] Comentário enviado por embura em 28/02/2012 - 13:38h

para usar esses comandos no fedora precisa do pacote bind-utils.

[3] Comentário enviado por sk4d1nh4 em 04/06/2013 - 11:07h

Só uma observação...
Configuramos dois ou mais servidores DNS para consulta para o caso de indisponibilidade de um o outro ser consultado.
O texto informa que se o primeiro nao conseguir resolver o nome ele passa para o segundo e nao funciona bem assim. O segundo servidor só é consultado se o primeiro não estiver disponível. Mas se o primeiro já responder que não conseguiu resolver o nome o erro já é retornado para o sistema operacional.

[4] Comentário enviado por ricardoolonca em 06/06/2013 - 10:17h

Você está correto, sk4d1nh4. É isso mesmo. Um segundo dns só será usado se o primeiro não responder. Se o primeiro responder mas não conseguir resolver o nome, o segundo dns não será usado e uma mensagem de erro será exibida.

Obrigado pela correção.


[5] Comentário enviado por removido em 20/02/2017 - 00:17h

Olá Ricardo.

Apenas uma informação para somar com o conteúdo. você escreveu no artigo que o Linux só consegue fazer até o passo 4 descrito na pa&#501;ina 4. Mas se for configurado, ele pode sim fazer os outros passos até a resolução de nomes NetBIOS utilizando o servidor Wins.

Basta configurar o arquivo /etc/nsswitch.conf e incluir uma nova base de dados que será consultada para resolução de nomes, nesse caso o WINS. é lógico que deve existir um servidor wins e o servidor linux deve ter o samba configurado e instalado, além do winbind instalado.

[6] Comentário enviado por ricardoolonca em 20/02/2017 - 10:00h


[5] Comentário enviado por eabreu em 20/02/2017 - 00:17h

Olá Ricardo.

Apenas uma informação para somar com o conteúdo. você escreveu no artigo que o Linux só consegue fazer até o passo 4 descrito na pa&amp;#501;ina 4. Mas se for configurado, ele pode sim fazer os outros passos até a resolução de nomes NetBIOS utilizando o servidor Wins.

Basta configurar o arquivo /etc/nsswitch.conf e incluir uma nova base de dados que será consultada para resolução de nomes, nesse caso o WINS. é lógico que deve existir um servidor wins e o servidor linux deve ter o samba configurado e instalado, além do winbind instalado.


Correto. Obrigado pela informação, eabreu. É que geralmente isso não vem configurado por padrão.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts