Windows 10 usa mDNS para resolução de nomes na rede local

Cenário: servidor Linux rodando Samba com clientes Windows.

Quando acessamos, num grupo de trabalho, outra máquina na rede local pelo nome, digamos \\CENTOS, o Windows 10 tentará os seguintes protocolos para achá-la: NetBIOS, mDNS e LLMNR.

16:57:54.025570 IP 192.168.2.2.netbios-ns > 192.168.2.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
16:57:54.025651 IP 192.168.2.2.mdns > 224.0.0.251.mdns: 0 A (QM)? CENTOS.local. (30)
16:57:54.025725 IP6 fe80::f0a4:cbb5:c600:f448.mdns > ff02::fb.mdns: 0 A (QM)? CENTOS.local. (30)
16:57:54.025870 IP 192.168.2.2.mdns > 224.0.0.251.mdns: 0 AAAA (QM)? CENTOS.local. (30)
16:57:54.025929 IP6 fe80::f0a4:cbb5:c600:f448.mdns > ff02::fb.mdns: 0 AAAA (QM)? CENTOS.local. (30)
16:57:54.026235 IP6 fe80::f0a4:cbb5:c600:f448.51438 > ff02::1:3.hostmon: UDP, length 24
16:57:54.026301 IP 192.168.2.2.51438 > 224.0.0.252.hostmon: UDP, length 24
16:57:54.026464 IP6 fe80::f0a4:cbb5:c600:f448.64716 > ff02::1:3.hostmon: UDP, length 24
16:57:54.026513 IP 192.168.2.2.64716 > 224.0.0.252.hostmon: UDP, length 24
16:57:54.459818 IP6 fe80::f0a4:cbb5:c600:f448.64716 > ff02::1:3.hostmon: UDP, length 24
16:57:54.459863 IP 192.168.2.2.64716 > 224.0.0.252.hostmon: UDP, length 24
16:57:54.459873 IP6 fe80::f0a4:cbb5:c600:f448.51438 > ff02::1:3.hostmon: UDP, length 24
16:57:54.459878 IP 192.168.2.2.51438 > 224.0.0.252.hostmon: UDP, length 24

Mais interessante ainda é que também responde às requisições mDNS:

17:02:10.520914 IP6 centos.mdns > ff02::fb.mdns: 0 A (QM)? WIN10.local. (29)
17:02:10.521021 IP centos.mdns > 224.0.0.251.mdns: 0 A (QM)? WIN10.local. (29)
17:02:10.521851 IP6 fe80::f0a4:cbb5:c600:f448.mdns > ff02::fb.mdns: 0*- [0q] 1/0/0 A 192.168.2.2 (39)
17:02:10.521964 IP 192.168.2.2.mdns > 224.0.0.251.mdns: 0*- [0q] 1/0/0 A 192.168.2.2 (39)

Versões anteriores (Vista até 8.1) usam apenas NetBIOS e LLMNR.

Samba responde às requisições NetBIOS através do nmbd (nmb.service). Para os demais protocolos, existem Avahi (mDNS) e systemd-resolved (mDNS e LLMNR).

Avahi (avahi-daemon.service) é preferido por ser a implementação mDNS mais popular e robusta para Linux e por causa da integração com o Samba, que registra os serviços DNS-SD _device-info._tcp e _smb._tcp automaticamente. Dica: mdns name = mdns na seção [global] de /etc/samba/smb.conf (disponível a partir do Samba 4.8.0) publica o nome da máquina (/etc/hostname) ao invés do sempre maiúsculo nome NetBIOS.

Com a remoção do protocolo SMB 1.0 a patir do Windows 10 1709, o serviço "Pesquisador de Computadores" (Browser) é igualmente removido. Ícones dos computadores não aparecerão em "Rede" no Windows Explorer. Seus substitutos são os serviços "Host de Provedor da Descoberta de Função" (fdPHost) e "Publicação de Recursos de Descoberta de Função" (FDResPub). A Microsoft recomenda habilitá-los manualmente com "Automático (Atraso na Inicialização)". No entanto, mesmo em "Manual", serão iniciados automaticamente caso a "Descoberta de rede", configurável em "Central de Rede e Compartilhamento → Configurações de compartilhamento avançadas", esteja ativa. Requer Web Services for Devices (WSD), que não é suportado pelo Samba. Não confundir com WS-Discovery, que é o protocolo de descoberta sobre o qual WSD é construído.

Além disso, a partir do Samba 4.11.0, SMB 1.0 está desativado no servidor (server min protocol = SMB2_02 na seção [global] de /etc/samba/smb.conf). "Rede" não será populada nos Windows anteriores também, portanto. A opção server min protocol = NT1 volta ao comportamento antigo, mas é bom evitar, pois é um protocolo inseguro. Note que a resolução de nomes via NetBIOS continua funcionando ao acessar diretamente o servidor, o que pode ser automatizado com atalhos no Windows Explorer.

A Netgear desenvolveu o wsdd2 (GPLv3) para uso em seus Network-Attached Storage (NAS), mantido neste repositório. Suporta WSD e LLMNR. A partir da versão 1.8.5, funciona bem. Infelizmente, não está no repositório oficial das principais distribuições, requerendo pacote de terceiros ou compilação manual.

É uma pena a Microsoft ainda não ter implementado a listagem dos computadores da rede local com mDNS + DNS-SD, talvez usando _workstation._tcp (publish-workstation=yes na seção [publish] de /etc/avahi/avahi-daemon.conf). Melhoraria a interoperabilidade, algo que a empresa está levando mais a sério de uns anos para cá. mDNS foi desenvolvido pela Apple e é suportado em seus softwares. Avahi cobre os demais Unix-like.

Relacionado:
Guia de configuração do Samba não-PDC

Comentários