Fixing the “.local” Problem in Mac OS X
ByWhen Apple implemented Rendezvous in OS X, they chose to use a non-public domain naming scheme to keep Rendezvous traffic local. Unfortunately,”.local” is exactly the naming scheme they chose, which happens to be the very domain structure Microsoft recommends for naming internal networks. No problem, right? Except that Rendezvous uses a multicast DNS lookup, and Microsoft DNS servers don’t know how to respond to multicast requests. Hence, if you have a Windows “.local” domain with Macs, the Macs cannot use DNS to look up internal DNS resources.
In Mac OS X 10.4, Apple changed Rendezvous to Bonjour, and while it still uses the .local namespace, it is smarter about DNS lookups than Rendezvous. Chances are that if you’re running OS 10.4 and getting your IP configuration from the DHCP server of the SBS box (or other Active Directory DNS server that’s properly configured), you won’t need the steps in this document.
There are a number of ways to work around this, but the best solution, short of renaming your Windows internal domain to somethin other than “.local”, is to disable multicast DNS for the .local domain on the Mac. Here’s how.
- If the Macintosh is getting its IP information from anywhere other than DHCP on the Windows server, configure DNS on the Macintosh
- Open System Preferences (Apple Menu -> System Preferences).
- Click the Network icon.
- Select Built-in Ethernet and click Configure.
- Enter the IP address of the Windows server in the DNS Servers field.
- Click Apply Now.
- If there is an address appearing next to the IPv6 Address field, click Configure IPv6, select Off from the Configure IPv6 drop-down menu.
- Click OK.
- Quit System Preferences.
- Enable unicast .local resolution (Only needed for 10.2 or 10.3-based Macs)
- Open the Terminal application (Macintosh HD -> Applications -> Utilities -> Terminal).
- At the command prompt, type “sudo su” (no quotes) and press Return.
- Type in the password for the current user account and press Return.
- Type “cd /usr/sbin” and press Return.
- Type “cat > EnableUnicastDotLocal” and press Return. You will not see a command prompt at this point.
- Enter the following four lines exactly as shown, pressing Return at the end of each line (the file is local.ONE not local.L):
#!/bin/tcsh
echo domain.local > /etc/resolver/local.1
grep -v domain /etc/resolv.conf >> /etc/resolver/local.1
echo search_order 2 >> /etc/resolver/local.1 - Press Control-D. The command prompt will appear again.
- Type “chmod +x EnableUnicastDotLocal” and press Return.
- Type “/usr/sbin/EnableUnicastDotLocal” and press Return.
- Type “cat /etc/resolver/local.1″ and press Return. You should see “domain local” and the IP address of the server listed in the output, which will look similar to the following:
domain.local
search domainname.local
nameserver 192.168.16.2
search_order 2 - Press Control-D and quit the Terminal application.