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: 42.018 ]

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

MooseFS - Sistema de arquivos distribuído

Deduplicação com LessFS

Entendendo TCP/IP (parte 2) - Endereços IP

Entendendo o TCP/IP

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

Leitura recomendada

Estudo comparativo de alguns gerenciadores e aceleradores de download

Como montar um proxy reverse no servidor Apache

Instalando o Cacti em plataforma Debian

Quando seria mais conveniente usar wvdial no terminal para conexões 3G ou EDGE?

Twitter Clone - Floopo - Mais um Micro blogging open source

  
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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts