这个问题首次出现在我将系统升级到 Sequoia,在使用ffmpeg、yt-dlp直接在网络磁盘进行工作时,传输断流,终端无响应,然后系统提示网络磁盘已断开连接。
在 Google 类似的问题,反复测试不同参数组合之后,我发现问题的根源不是性能开销或者单纯的协议不兼容,而是网络中间设备的数据包处理问题。因此有了下面的解决方案,主要针对数据包加密和签名进行参数调整。
解决方法
方法一:启用强制加密
强制加密应用于启用 SMB3 后,SMB 协议将增加传输加密以增强文件传输的安全性。
此选项将造成不支持传输加密的客户端无法使用 SMB 协议。
启用传输加密后, 启用 Opportunistic Locking 将会禁用,以免应用程序超时。
如果需要使用通过 SMB 进行 Bonjour Time Machine 播送;启用 Opportunistic Locking是必须选项,可以在提示“选择此选项将会禁用启用Opportunistic Locking”时先点击是,随后再手动开启启用 Opportunistic Locking和启用 SMB2 文件租赁。方法二:启用服务器签发
启用此选项可在数据包级别添加数字签名作为安全机制,以防范中间人攻击和其他模拟攻击。有两种方式,在服务器强制启用,或者在客户端启用。
服务端设置
控制面板 > 文件服务 > 高级设置 > 常规,更改服务器签名状态为强制。这将始终应用服务器签发。
如果客户端不支持服务器签发,则无法通过 SMB 协议成功连接到服务器。
客户端设置
不需要更改服务器任何配置。
在 macOS 上创建配置文件/etc/nsmb.conf,填入以下内容。建议使用终端工具vim编辑。
[default]
signing_required=yes对服务器侵入最小的方法是在客户端启用数字签名,服务器兼容性最高。不过现在较新的操作系统基本上都支持加密和签名,因此不需要太过在意兼容性。可以先在服务器配置,出现问题后退回到客户端配置。
验证效果
配置完成后,断开网络磁盘重新挂载。重试之前遇到断流的场景,观察是否还存在断流问题。
必要时,重启服务器和客户端电脑。