跳转到内容

局域网发现:为什么在网络里看不到 NAS ​

共享明明建好了,Windows 的「网络」里却没有这台 NAS,Mac 的 Finder 里也找不到。这几乎总是发现机制的问题,不是共享本身的问题。读完这篇,你会知道 OMV 用什么让设备被发现、出问题时怎么一步步查,以及怎样让访问完全不依赖发现。

先分清:是发现问题还是共享问题 ​

直接用 IP 地址访问一次:

  • Windows:文件资源管理器地址栏输入 \\<NAS 地址>。
  • macOS:Finder 里 前往 → 连接服务器(⌘K),输入 smb://<NAS 地址>。

用 IP 能连上,说明共享是好的,只是发现机制没起作用,继续看本篇。用 IP 也连不上,说明问题在共享、服务或网络,回到 SMB/CIFS 共享,或看 在网络里看不到共享。

OMV 用了哪几套发现机制 ​

机制谁在用OMV 里的实现默认状态
WS-Discovery(WSD)Windows 10 和 11 的「网络」wsdd-server 软件包,服务名 wsdd-serverSMB 启用时自动启动
mDNS / DNS-SD(Bonjour)macOS 的 Finder、Linux、部分手机 Appavahi-daemon,OMV 为各个服务生成宣告默认启用
NetBIOS(nmbd)很老的系统(SMB1 时代的「网上邻居」)Samba 的 nmbd,SMB 设置里的 启用 NetBIOS默认关闭

Windows:WS-Discovery ​

Windows 10 1511 起默认关闭了 SMB1 和 NetBIOS 发现,从 1709 起,部分版本甚至装不了 SMB1 客户端。结果就是 Samba 主机不再出现在资源管理器的「网络」里。wsdd 项目的解决办法是改用 WS-Discovery,并明确反对为了发现而重新打开 SMB1。

OMV 8 依赖 wsdd-server(wsdd 的服务端软件包,OMV 软件源里它的描述写着:在 Samba 服务器上取代 WINS 和 nmbd,恢复 Windows 的网络浏览)。OMV 的 Salt 状态在 SMB 已启用时启动 wsdd-server,参数里带着 SMB 设置里的 工作组;SMB 没启用时它是停止的。它用 UDP 3702 组播(239.255.255.250 和 ff02::c)和 TCP 5357,只在同一个网段内有效,不会跨路由器或 VLAN。

macOS 和 Linux:Bonjour(Avahi) ​

OMV 把 Avahi 限定在你在 OMV 里配置了地址的网络接口上(以太网、Bond、VLAN、网桥、无线),并在 /etc/avahi/services/ 为这些服务生成宣告:

  • SMB(445 端口),所以 Finder 的「网络」里能看到。
  • 启用了 Time Machine 的共享,会额外宣告成「时间机器目的地」,见 macOS 时间机器备份。
  • SSH 与 SFTP、NFS、rsync,以及 OMV 的 Web 管理界面。FTP 插件也有。

宣告的服务名默认是主机名(%h)。Mac 上也可以用 <主机名>.local 访问,例如 smb://<主机名>.local。OMV 8.2.7、8.3.1、8.4.0 的更新记录里有几条 Avahi 和 macOS mDNS 兼容性的改进,在旧版本上遇到问题先更新。

NetBIOS 和 WINS ​

SMB 设置页的 启用 NetBIOS(Enable NetBIOS)提示是「支持旧系统的名称解析和网络发现」,默认关闭,打开后会启动 nmbd。启用 WINS 服务器 和 WINS 服务器 是互斥的两项,分别是自己当 WINS 服务器、使用别的 WINS 服务器。现代的 Windows 和 macOS 不需要它们,只有必须兼容非常老的设备才开。

排查步骤 ​

按顺序检查,每一步都用 IP 访问兜底:

  1. SMB 启用并应用了吗? 服务 → SMB/CIFS → 设置(Services → SMB/CIFS → Settings)里 已启动 要勾选,并且已经点了顶部黄色提示条上的 应用(Apply)。没启用 SMB,wsdd-server 不会运行。

  2. 在同一个网段吗? 组播不跨网段。客户端和 NAS 在不同的 VLAN 或子网时,发现不会工作,用 IP 或 DNS 名。Wi-Fi 上路由器的「AP 隔离」或「客户端隔离」也会阻断发现。

  3. Windows 的网络类型和网络发现。 当前网络要是「专用网络」,并且开启了网络发现。公用网络下默认是关的。设置位置随 Windows 版本变化,在「高级共享设置」里找。

  4. 服务在运行吗? 在 OMV 的 shell(SSH 或本机控制台,root 身份)里运行只读命令:

    sh
    systemctl is-active smbd wsdd-server avahi-daemon

    三项都应该是 active。

  5. macOS 上看有没有收到宣告。 在 Mac 的终端里运行下面的命令,应该出现你的 NAS,按 Ctrl-C 结束:

    sh
    dns-sd -B _smb._tcp
  6. 多网卡、VPN 或容器网桥。 NAS 上有多个网络接口时,wsdd 可能绑在了不对的接口上。wsdd 项目的说明里提到,OpenVPN、Docker 这类隧道和网桥接口可能让主机从 Windows 的网络里消失,办法是让它只绑定局域网接口。见下面的进阶提示。

  7. 主机名合法吗? 网络 → 常规(Network → General)里的主机名要符合规范,见 时间、时区与主机名。NetBIOS 名最长 15 个字符。

进阶:限定 wsdd 使用的网卡

OMV 允许用环境变量给 wsdd 追加参数:OMV_WSDD_PARAMS,它会被写进 /etc/wsdd-server/defaults。另一个变量 OMV_WSDD_ENABLED 设为 0,则 SMB 启用时也不启动 wsdd。例如只绑定局域网网卡:

sh
omv-env set -- OMV_WSDD_PARAMS "--interface <网卡名>"
monit restart omv-engined
omv-salt stage run prepare
omv-salt stage run deploy

这是 OMV 官方文档给的修改环境变量的方式,--interface 是 wsdd 的参数,我们没有在实机上验证,参数写法以 wsdd 项目文档为准。环境变量的完整用法见 环境变量:调整界面里没有的选项。

不要为了让设备出现在网络里,去降低 SMB 的最低协议版本或打开 SMB1,这正是 wsdd 项目反对的做法,也有安全风险,见 SMB 进阶。

让访问不依赖发现 ​

与其和发现机制较劲,不如让访问不依赖它:

  • 给 NAS 固定地址:设成静态 IP,或在路由器里做 DHCP 保留,见 网络接口。
  • Windows:映射网络驱动器,文件夹 填 \\<NAS 地址>\<共享名>,勾选 登录时重新连接,见 SMB/CIFS 共享。
  • macOS:在 连接服务器 对话框里把地址加入「个人收藏的服务器」,下次一点就连。
  • 手机和电视上的 App:多数需要你直接输入 IP,别指望自动发现。

检查结果 ​

  1. Windows 的资源管理器里「网络」出现 NAS 的主机名(发现可能需要几十秒),Mac 的 Finder 侧边栏「网络」里出现它。
  2. systemctl is-active smbd wsdd-server avahi-daemon 全部是 active。
  3. 无论发现是否工作,用 IP 地址访问都应该成功。

常见问题 ​

刚启用 SMB,网络里还没有。 等一会儿再刷新,WSD 的出现有延迟。

只有 Windows 看不到,或只有 Mac 看不到。 前者查 WSD 和 Windows 的网络发现设置,后者查 Bonjour 和是否同一网段。

能看到 NAS,但点进去要密码或看不到共享。 发现是好的,问题在认证或共享权限,见 SMB/CIFS 共享。

改了主机名,网络里还是旧名字。 应用配置后,WSD 和 Avahi 会重新宣告,客户端可能缓存,等几分钟或重启客户端。

路由器后面分了好几个网段。 组播不跨网段,用 IP、固定的本地 DNS 名,或在路由器上开启组播转发(以路由器说明书为准)。

参考资料 ​

  • wsdd 项目:christgau/wsdd,README 里有 Windows 与 SMB1 和 NetBIOS 发现的背景、端口和防火墙说明
  • OMV 源码:srv/salt/omv/deploy/samba/50wsdd.sls、default.sls(wsdd-server 与 nmbd 的启停),srv/salt/omv/deploy/avahi/(Avahi 与各服务宣告)
  • OMV 官方文档:Custom Configuration:环境变量

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。