29

I am looking for a way to resolve .local addresses in Windows 10.

Windows itself also includes mDNS support, but that appears to only be available for Modern API applications.

In the past, the advice has always been to install Apple's Bonjour, for instance How to enable mDNS on Windows (7). Unfortunately, that seems to no longer be working.

As far as I can tell, the problem is that one of Windows' own processes, DNSCache, is now listening on port 5353.

How do I get mDNS to work for non-Modern applications?

2 Answers 2

22

I ended up finding the answer minutes after posting my question.

The solution is to first disable mDNS in Windows. This has to be done in the registry. As usual, the standard warning applies: editing the registry is not for the faint of heart, and doing it incorrectly can damage your Windows installation beyond repair.

Navigate to the registry key Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient. If the key does not exist, you may need to create it.

Then add the value EnableMulticast as a REG_DWORD, with the value 0.

Reboot.

Then install Bonjour. After this hack, mDNS works as expected.

Update: In recent versions (tested on Windows 10 10.0.19042), it appears that Windows resolves mDNS for all applications out of the box, without needing a registry hack or Bonjour at all. I tested it on the Pro version, and do not know if it applies to the Home version as well.

6
  • 1
    +1 Thanks! Just to clarify you need to reinstall bonjour if you already have it installed after changing the registry. Commented Apr 28, 2019 at 14:51
  • I wrote a program that used mDNS, and was confused why it only sometimes worked. Adding the registry hack above seems to have fixed it. Do you know: what does DNSCache do? What side effects might disabling it have? Is there a way to play nicely with it on an un-hacked windows install?
    – Erhannis
    Commented Aug 2, 2021 at 21:33
  • 1
    The entry is DNSClient, not DNSCache. It disables the mDNS implementation that Windows itself provides. See the answer from Teocci for details. The problem with the Windows implementation is that it is only available to Universal applications, but not to Win32 applications, which is most of it. At the same time, it does listen on port 5353, which prevents Bonjour from running. So once you free up port 5353 by disabling Microsoft's limited implementation, you can then run Bonjour and get the full benefit of mDNS. Commented Aug 2, 2021 at 22:05
  • @KevinKeane: UDP can have multiple listeners on the same port. (Actually so can TCP, but usually not by default). See here. That said, I still have some problems with Bonjour. : - / Commented Oct 11, 2022 at 5:19
  • @NickWestgate I think this article is misleading. Although it claims "listening" note that the other processes in the example would actually be using the same port for sending (i.e., advertising themselves on mDNS). Multiple senders on the same port is possible (for UDP). Only one process can be listening at a time, because otherwise the TCP/IP stack wouldn't know where to deliver incoming packets. Also see softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/… - question 4.5. Commented Oct 12, 2022 at 7:38
10

According to the Group Policy Home for Windows 10 and Windows Server 2016 documentation you have to Turn off the Link Local Multicast Name Resolution (LLMNR) using the DNSClient::EnableMulticast policy setting.

You can disable the LLMNR if you enable the DNSClient::EnableMulticast policy setting by following these steps:

  1. Press Win + R, type regedit in the Open box, and then click OK.

  2. If prompted by User Account Control, click Yes to open the Registry Editor.

  3. Locate and then click the DNSClient subkey in the registry path: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\

  4. If the DNSClient subkey does not exits create a new Registry Key by Right-click on Windows NT subkey.

  5. Select New and then Key

  6. Name it as DNSClient.

  7. Right-click on DNSClient subkey.

  8. Select New and then DWORD (32-bit) Value

  9. Name it as EnableMulticast.

  10. Double-click on EnableMulticast to edit the value with 0

  11. Reboot your PC.

If this process is to long create a batch file and run it as administrator:

  1. Create an enable_mdns.bat file using your favorite text editor.
  2. Copy and paste this snippet:
REG ADD "HKLM\Software\Policies\Microsoft\Windows NT\DNSClient" /V "EnableMulticast" /D "0" /T REG_DWORD /F
  1. Save it and Run it as administrator.
  2. If prompted by User Account Control, click Yes to run the .bat file.
  3. Reboot your PC.
1
  • Maybe it's just me, but the batch file is definitely the simpler proposition. Commented Nov 22, 2023 at 14:52

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .