为什么 Windows 机器可以解析本地名称而 Linux 却不能?

为什么 Windows 机器可以解析本地名称而 Linux 却不能?

我有一个小型网络,其中的 Windows 和 Linux 机器连接到 D-Link DIR-825 路由器。

网络上的 Windows 机器可以通过名称访问所有其他机器,而 Linux 机器只能通过 IP 地址访问其他机器。

我可以在路由器 Web 管理界面的 DHCP 客户端状态列表中看到所有列出的机器的名称及其 DHCP 分配的地址。

为什么 Linux 机器无法通过名称找到任何其他机器,而 Windows 却能毫无问题地找到 Linux 机器?

答案1

我目前的发现是:

  • Windows 使用 NetBIOS 名称,这种协议是一种广播协议,允许它们无需任何中央服务器即可相互找到。

  • 现代发行版中的 Linux 机器本身使用一种称为阿瓦希,这也是一种独立于服务器的广播协议。本地网络机器的后缀为.local因此你可以使用以下命令从 Linux ping 到 Linuxping hostname.local或者使用avahi-discover包查看它们。Gnome 中的某些应用程序使用 avahi 列出网络中的机器(例如,远程桌面查看器)

  • 安装桑巴在 Linux 机器上会为其分配一个 NetBIOS 名称(或者,更准确地说,会让 Linux 机器在广播请求中使用其 NetBIOS 名称(默认情况下是其主机名)来宣传自己),并且允许 Windows 机器找到 Linux 机器

  • 问题:虽然装有 Samba 的 Linux 机器会回复 NetBIOS 协议请求,但 Ubuntu 等发行版中的默认设置它不会使用 NetBIOS 作为解析名称的方法,这就是为什么 Linux 机器无法“看到”彼此或 Windows 机器的原因。为此,您需要编辑/etc/nsswitch.conf文件并将wins以下行添加到列表中:

    hosts:          files mdns4_minimal [NOTFOUND=return] dns wins mdns4
    
  • 可能需要安装winbind(如果没有自动安装,则安装libnss-winbind)包以使上述功能正常工作。

  • 因此,对于可见性问题,您可以在所有 Linux 机器上安装 Samba(并且编辑/etc/nsswitch.conf以启用 NetBIOS 名称解析),或者在 Windows 机器上安装 Avahi 支持。

  • 至于文件共享,Samba 为 Linux 机器提供了与 Windows 的文件共享功能。无需编辑 /etc/nsswitch.conf,Linux 机器便可在 Nautilus 的“网络”部分中查看彼此和 Windows 的共享文件夹(反之亦然)

答案2

默认情况下,如果没有 DNS 服务器,Windows 可以使用 NetBIOS(Microsoft 名称解析协议)来发现其网络本地的其他 Windows 系统的名称。如上所述在这个答案中,看来您需要在 Linux 端设置 SAMBA(或至少是 winbind)。下面是基本指令集

要从 Linux 计算机启用 Windows netbios 名称解析,请确保已安装 Samba(尽管 smb 服务不需要运行)。Samba 套件包括 winbind,它允许解析 Windows 主机名。然后编辑 /etc/nsswitch.conf 并更改此行:

hosts: files dns

更改为:

hosts: files dns wins

然后通过ping局域网上的Windows机器的计算机名进行测试:

$ping windowsbox

顺便说一句,这与 WINS 没有直接关系。WINS 是一种 NetBIOS 服务器,通常用于较大的网络,以减少广播流量,提供传统的集中式名称解析平台,并最终使不同网络上的系统能够了解彼此的 NetBIOS 名称到 IP 的映射。

SAMBA 的替代方法是设置 DNS 服务器并确保配置了动态 DNS 更新或 DHCP 可以注册 DNS 记录。

答案3

最可能法律硕士

答案4

尽管默认情况下未安装必要的软件,但 Linux 可以解析本地名称......

大多数 Linux 发行版除了内核之外,对你的软件需求都做了一些假设……Debian 参考DNSMasq

apt-cache 搜索 dnsmasq ...

相关内容