What does ".local" do?

我在家中的网络上有几台Ubuntu机器,但DNS由一个Windows服务器(2K)提供。当我从另一台机器通过ssh连接它们时,如果我使用"machine"作为主机名,我无法连接,但如果我使用"machine.local"作为主机名,我可以连接。
我想类似地,我无法从Windows客户端(如putty)连接。
这是怎么回事?很明显是Ubuntu的问题。

1实际上,这看起来更像是一个DNS的问题,而不是Ubuntu的问题(特别是因为你从Windows机器上“无法连接” —— 顺便问一下,错误信息是什么?)。你的DNS配置是什么(nameserversearch)?dig machine1dig machine1.local有什么区别? - Gilles 'SO- stop being evil'
您是否在Windows 2000服务器上安装了Apple Bonjour或其他Zeroconf实现? - Thorbjørn Ravn Andersen
如果你碰巧知道为什么Android无法使用设备的.local主机名浏览网络(https://devicename.local不起作用,但可以浏览到https://devicename而不带.local),我会很感激在https://android.stackexchange.com/q/230644/22600上给出答案。谢谢! - Ryan
2个回答

默认情况下,Ubuntu包含avahi。这是一个零配置的实现,允许计算机主机名通过虚拟的“.local”名称进行解析。每当您的计算机尝试连接到“hostname.local”,avahi将执行本地网络广播,以查看是否有具有该主机名的计算机。运行avahi(或兼容的其他软件)的其他计算机应该会回答。
如果您查看/etc/nsswitch.conf文件,您会找到以下行:
hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

mdns4_minimal是使此重定向工作的配置设置。
您的问题实际上表明avahi正在成功运行,因为您说您可以使用“hostname.local”连接到您的Ubuntu计算机。然而,您并没有清楚地说明(“当我从另一个... ssh到它们时...”)您是尝试从另一台Ubuntu计算机还是从另一台Windows计算机进行连接。在不安装其他软件(如Bonjour)的情况下,Windows计算机无法解析零配置风格的“hostname.local”名称。

对于感兴趣的人,可以查看Avahi Link(https://en.wikipedia.org/wiki/Avahi_%28software%29)。简而言之,它很复杂。 - meawoppl
这个答案现在有点过时了,但是Windows 10肯定会解析“hostname.local”这样的名称,而不需要任何额外的东西(至少...没有第三方的额外东西...谁知道内部运行着什么垃圾)。 - JonathanDavidArndt

要解决你的问题,你只需要使用Avahi。它会将你的Ubuntu机器名称广播给Windows用户。
sudo apt-get install avahi-daemon

machinename.local之所以能工作,是因为另一种零配置实现(其中Avahi也是)称为Bonjour,由苹果创建(如果我没记错的话)。它默认安装在计算机上。我不知道为什么Avahi没有被默认安装,但考虑到它给人们带来的困惑,可能应该这样做。

关于这个问题,在维基百科上有更多信息:http://en.wikipedia.org/wiki/.local


Avahi使用.lan,我想。 - Broam
8不,avahi使用.local,这是mDNS规范所要求的。 - Kees Cook
为什么你会期望macOS安装多个Zeroconf实现?我不明白Bonjour和Avahi的存在会对任何合理的人造成什么困惑。我并不是试图挑衅,只是对你所说的感到真诚地困惑。据我所知,你的说法就像是说"Finder在macOS上默认安装。我不知道为什么explorer.exe也没有被提供,因为它给人们带来的困惑"。 - Marcel Besixdouze
@MarcelBesixdouze我并没有对OS X抱有任何期望(因为在12年前它还被称为OS X)。我只是认为Ubuntu应该拥有一些我认为它没有的东西。 - Oli