外观
局域网发现:为什么在网络里看不到 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-server | SMB 启用时自动启动 |
| mDNS / DNS-SD(Bonjour) | macOS 的 Finder、Linux、部分手机 App | avahi-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 访问兜底:
SMB 启用并应用了吗?
服务 → SMB/CIFS → 设置(Services → SMB/CIFS → Settings)里 已启动 要勾选,并且已经点了顶部黄色提示条上的 应用(Apply)。没启用 SMB,wsdd-server不会运行。在同一个网段吗? 组播不跨网段。客户端和 NAS 在不同的 VLAN 或子网时,发现不会工作,用 IP 或 DNS 名。Wi-Fi 上路由器的「AP 隔离」或「客户端隔离」也会阻断发现。
Windows 的网络类型和网络发现。 当前网络要是「专用网络」,并且开启了网络发现。公用网络下默认是关的。设置位置随 Windows 版本变化,在「高级共享设置」里找。
服务在运行吗? 在 OMV 的 shell(SSH 或本机控制台,root 身份)里运行只读命令:
shsystemctl is-active smbd wsdd-server avahi-daemon三项都应该是
active。macOS 上看有没有收到宣告。 在 Mac 的终端里运行下面的命令,应该出现你的 NAS,按 Ctrl-C 结束:
shdns-sd -B _smb._tcp多网卡、VPN 或容器网桥。 NAS 上有多个网络接口时,wsdd 可能绑在了不对的接口上。wsdd 项目的说明里提到,OpenVPN、Docker 这类隧道和网桥接口可能让主机从 Windows 的网络里消失,办法是让它只绑定局域网接口。见下面的进阶提示。
主机名合法吗?
网络 → 常规(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,别指望自动发现。
检查结果
- Windows 的资源管理器里「网络」出现 NAS 的主机名(发现可能需要几十秒),Mac 的 Finder 侧边栏「网络」里出现它。
systemctl is-active smbd wsdd-server avahi-daemon全部是active。- 无论发现是否工作,用 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:环境变量