三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

NAS共享协议全解析:SMB、NFS、FTP、WebDAV选型与配置实战

NAS共享协议全解析:SMB、NFS、FTP、WebDAV选型与配置实战

1. 从“文件柜”到“网络枢纽”:NAS共享协议的角色演进

如果你刚接触NAS,可能会觉得它就是个插着网线的大号移动硬盘。但当你真正开始用它来备份照片、共享电影给家人,或者作为团队的项目文件中心时,很快就会发现一个核心问题:怎么访问它里面的文件?这背后,就是各种网络共享协议在发挥作用。它们就像是连接你的电脑、手机、电视和NAS之间的“语言”和“道路”。选对了协议,访问文件就像在本地硬盘上操作一样流畅;选错了,可能就是卡顿、报错,甚至安全隐患不断。

我自己从最早用Windows共享文件夹,到后来折腾各种开源NAS系统,再到管理企业级的存储设备,几乎把SMB、NFS、FTP这些协议都踩了个遍。我发现,很多教程只告诉你“怎么打开某个协议”,却很少说清楚为什么要打开它,以及在什么场景下该用哪个。结果就是用户一通全开,不仅浪费资源,还可能带来不必要的风险。

今天,我们就抛开那些晦涩的RFC文档,从一个实际使用者的角度,把这些常见的NAS共享协议——SMB、NFS、FTP、FTPS、SFTP、AFP、WebDAV——彻底捋清楚。我会结合不同操作系统(Windows、macOS、Linux)、不同设备(智能电视、移动设备)以及不同使用场景(家庭影音、协同办公、远程访问),告诉你每个协议的“脾气秉性”、适用场景,以及配置时的关键细节和避坑点。目标是让你看完后,能像老司机一样,根据自家“路况”(网络环境和使用需求),精准地铺设最合适的“道路”。

2. 局域网内的“扛把子”:SMB协议深度解析

SMB(Server Message Block),现在通常指它的现代版本SMB 2/3,可以说是当今局域网文件共享的绝对主流,尤其是在Windows和macOS混搭的环境里。你可以把它理解为NAS在网络上“伪装”成了一台Windows电脑,其他设备通过“网上邻居”就能直接发现并访问它。

2.1 SMB的核心优势与版本选择

为什么SMB如此普及?首要原因是原生集成与无缝体验。在Windows上,你不需要安装任何额外软件,直接在文件资源管理器的地址栏输入\\NAS的IP地址就能访问。macOS同样在Finder中提供了出色的SMB支持。这种开箱即用的便利性,是其他协议难以比拟的。

其次,SMB协议的功能非常全面。它不仅仅传输文件,还支持:

  • 文件与文件夹权限管理:可以精细设置谁可以读、写、删除,继承自Windows的ACL(访问控制列表)模型,对于多用户场景很实用。
  • ** Opportunistic Locking (OpLock)**:一种客户端缓存机制,能显著提升频繁读写同一文件的性能,尤其在多人协作编辑文档时。
  • 持续可用性:SMB 3.0以后支持透明故障转移,在企业级部署中很重要。

关于版本的选择,这是第一个容易踩的坑。大多数NAS系统(如群晖DSM、威联通QTS)的SMB服务设置里,都有一个“最大SMB协议”和“最小SMB协议”的选项。

  • SMB1 (也称CIFS)强烈建议禁用。这是一个古老且不安全的协议,存在永恒之蓝(EternalBlue)等严重漏洞,且性能低下。除非你有非常古老的设备(如Windows XP,或某些老款网络打印机、媒体播放器)必须连接,否则永远不要开启它。
  • SMB2/3:这是现代系统的标准。我的建议是,将“最小SMB协议”设置为SMB2,将“最大SMB协议”设置为SMB3。这样既能兼容稍旧的系统(如Windows 7默认支持SMB2),又能让支持SMB3的新设备(Windows 8/10/11, macOS 10.10+)享受到更好的性能和安全性(如加密传输)。

注意:在macOS Monterey及更新版本中,连接某些NAS的SMB共享时,可能会遇到反复要求输入密码或连接缓慢的问题。这通常是因为macOS默认尝试使用SMB3的某些扩展特性,而NAS端可能支持不佳。一个有效的解决方法是,在macOS的终端里使用mount命令并指定-o nobrowse等参数手动挂载,或者在NAS端尝试暂时关闭SMB3的“数据包签名”等高级功能进行测试。

2.2 SMB在多媒体场景下的特殊优化

如果你用NAS主要是存放电影,并通过智能电视、电视盒子(如NVIDIA Shield, Apple TV的Infuse应用)或客厅电脑来播放,SMB通常是首选协议。但这里有个关键点:确保你的播放设备和NAS都支持且启用了SMB的“大帧”或“巨帧”功能

网络传输的标准MTU(最大传输单元)是1500字节。对于播放动辄几十GB的原盘电影文件,频繁的小数据包传输会加重CPU负担并增加延迟。启用巨帧(Jumbo Frames,如设置为9000)后,单个网络包可以携带更多数据,能显著提升大文件连续读写的吞吐量,减少播放高码率影片时的卡顿。

操作建议

  1. 在NAS的网络设置中,找到对应网卡的“巨帧”选项并启用(设置为9000或9014)。
  2. 在你的播放设备或电脑的网络适配器高级设置中,同样找到“Jumbo Packet”或“巨帧”并设置为相同值(如9000)。
  3. 最关键的一步:确保连接NAS和播放设备之间的所有网络设备(交换机、路由器)也都支持并启用了巨帧。如果中间有一个设备不支持,反而会导致性能下降或网络问题。

实测下来,在千兆局域网内,启用巨帧后播放超高码率(如100Mbps以上)的4K REMUX影片,进度条拖拽的响应速度和连续播放的稳定性会有可感知的提升。

3. *NIX系统的“原生血脉”:NFS协议的高性能之道

如果说SMB是Windows世界的通用语,那么NFS(Network File System)就是Linux/Unix以及类Unix系统(包括macOS的Unix内核)的“母语”。它最初由Sun公司开发,设计目标就是简单、高效地在网络间共享文件系统。

3.1 为何在特定场景下NFS性能更优

NFS的性能优势,在Linux服务器、虚拟机或Docker容器访问NAS存储时体现得淋漓尽致。原因在于它的架构更轻量

  • 无状态设计:传统的NFSv3是无状态的,服务器不记录客户端的连接信息。这意味着服务器重启后,客户端可以自动重连而不需要重新挂载(当然,实际体验取决于客户端实现)。这种设计减少了服务器的开销。
  • 更接近底层文件操作:NFS的许多操作语义更贴近Linux本身的VFS(虚拟文件系统),减少了协议转换的开销。对于大量小文件的操作(如软件编译、Git仓库)、数据库文件存储,NFS的延迟往往低于SMB。
  • 直接内核支持:在Linux客户端上,NFS可以通过内核模块直接挂载,效率极高。命令通常很简单:sudo mount -t nfs NAS_IP:/共享文件夹路径 /本地挂载点

一个常见的应用场景:你在NAS上用Docker部署了一个Nextcloud或者一个MySQL数据库,数据卷(volume)保存在NAS的某个文件夹里。如果Docker宿主主机是Linux系统,那么通过NFS协议将这个文件夹挂载到宿主机,再映射给Docker容器使用,其I/O性能通常比通过SMB挂载要更好,稳定性也更高。

3.2 NFS权限配置的“天坑”与化解

NFS配置中最让人头疼的就是用户权限映射问题。NFS本身不传输用户名和密码,它依赖的是用户ID(UID)和组ID(GID)。简单说,在NAS上,一个文件属于UID=1000的用户;当你的Linux客户端挂载这个NFS共享后,它会去看自己系统里UID=1000的用户是谁,然后就让这个用户来操作文件。

这就导致了经典的“权限混乱”问题:

  • 场景:你在NAS上创建共享文件夹时,用的管理员账户(比如叫admin),在NAS系统里其UID可能是1024。你在Ubuntu电脑上,你的个人账户叫user,其UID是1000。当你用Ubuntu挂载NFS后,你会发现所有文件的所有者都显示为一个数字ID(1024),而不是admin。并且因为你本地的UID(1000)和文件的UID(1024)不匹配,你可能没有写入权限。

解决方案主要有两种,需要根据你的NAS系统功能来选择:

方案一:统一UID/GID(推荐用于简单环境)这是最根本的解决方法。确保你所有需要访问NFS共享的客户端系统(包括NAS本身,如果它上面也运行服务的话),同一个用户使用的UID和GID完全相同

  1. 在NAS上,查看你常用账户的UID/GID(SSH登录后id username命令)。
  2. 在你的Linux客户端上,修改相应用户的UID/GID,使其与NAS上的一致(使用usermod -u UID usernamegroupmod -g GID groupname命令,操作前需谨慎,最好在用户未登录时进行)。 这种方法一劳永逸,但需要在多台机器上操作,适合受控的小型环境。

方案二:利用NAS的NFS服务高级选项(更灵活)大多数消费级NAS的NFS设置里都提供了“映射”功能,用于解决此问题。

  • 所有用户映射为root(不推荐):这是最粗暴的方式,将所有访问者都当作root用户,虽然解决了权限问题,但带来了巨大的安全风险,任何客户端都能删除任何文件。
  • Squash(压缩)与映射:这是更安全的方式。例如,你可以设置:
    • all_squash:将所有客户端用户映射为NAS上的一个指定普通用户(如nfsuser)。
    • anonuid=xxx/anongid=xxx:指定上面那个普通用户在NAS上的UID和GID。
    • 这样,无论客户端用什么用户访问,在NAS看来都是同一个用户(nfsuser)。你只需要确保NAS上这个nfsuser对共享文件夹有合适的读写权限即可。这种方式非常适合为多个客户端或Docker容器提供统一的存储空间。

我的经验是:对于家庭或小团队,如果客户端主要是固定的几台Linux电脑,采用方案一更干净。如果客户端多变,或者需要给Docker等提供服务,采用方案二并创建一个专用的低权限NFS用户(如nfs-data)是更明智的选择。在配置时,务必在NAS的NFS共享设置中仔细寻找这些“高级权限”或“映射”选项。

4. 经典与加密:FTP协议家族的双面性

FTP(File Transfer Protocol)是一个比互联网本身还要古老的协议,它的设计目标很简单:在网络间可靠地传输文件。虽然年代久远,但因其客户端支持极其广泛(从命令行到图形化工具,甚至网页浏览器),至今仍在很多场景下使用。

4.1 明文传输的FTP:为何逐渐被弃用

标准的FTP协议有一个致命的缺陷:所有数据,包括用户名、密码和文件内容,都以明文形式在网络中传输。这意味着在你的家庭路由器或公司网络,甚至运营商线路上,任何一个能抓到数据包的人,都可以轻易看到你传输的一切。在当今的环境下,这完全不可接受。

此外,FTP的工作模式也带来麻烦。它使用两个连接:

  • 命令通道(默认端口21):用于发送指令,如登录、列出目录。
  • 数据通道:用于实际传输文件内容。这里又分为主动模式(PORT,服务器主动连接客户端)和被动模式(PASV,客户端连接服务器)。 防火墙和NAT设备经常会阻断FTP的数据通道连接,导致目录能列出但文件无法上传下载,需要手动在NAS的FTP服务设置中指定PASV端口范围,并在路由器上做端口转发,配置繁琐。

因此,我的明确建议是:除非你有非常特殊的、仅限于内网且绝对安全的遗留系统必须使用,否则不要在NAS上开启普通的FTP服务。我们有更安全的选择。

4.2 FTPS:为FTP穿上SSL/TLS的外衣

FTPS(FTP over SSL/TLS)可以看作是FTP的安全升级版。它在标准的FTP协议栈上,增加了SSL/TLS加密层,就像HTTPS是HTTP的安全版本一样。这解决了明文传输的安全问题。

FTPS有两种加密模式:

  • 显式FTPS(FTPES):客户端先通过不加密的21端口连接,然后发送AUTH TLSAUTH SSL命令来显式地启用加密。之后的所有通信(包括命令和数据)都会被加密。
  • 隐式FTPS:客户端默认就使用一个特定的端口(通常是990)进行SSL/TLS加密连接。这种模式现在较少使用。

配置FTPS的关键点

  1. 证书:你需要为NAS的FTPS服务配置一个SSL证书。可以使用NAS自签的证书(客户端连接时会提示不安全,需要手动确认),最好是为你的NAS域名申请一个免费的Let‘s Encrypt证书并导入,这样大多数客户端就不会报警告了。
  2. 兼容性:虽然FTPS更安全,但它的客户端支持度不如标准FTP或SFTP广泛。一些较旧的FTP客户端可能不支持加密连接。你需要使用支持FTPS的客户端,如FileZilla(在站点管理器中选择协议为“FTP - 文件传输协议”,加密选择“要求显式的FTP over TLS”)。

4.3 SFTP:与FTP完全不同的“安全外壳”

SFTP(SSH File Transfer Protocol)虽然名字里有FTP,但它和FTP协议毫无关系。它是SSH(Secure Shell)协议的一个子系统,运行在SSH的连接之上(默认端口22)。正因为基于SSH,它天生就具备强大的安全特性:

  • 强加密:所有传输的数据都通过SSH隧道加密。
  • 身份验证灵活:支持密码认证,更推荐使用更安全的SSH密钥对认证。
  • 功能丰富:不仅支持文件传输,还支持文件操作(重命名、删除)、权限管理,甚至符号链接。

SFTP与FTPS如何选择?

  • 从安全性和现代性角度,SFTP通常是更优选择。它设计更现代,基于单一连接(22端口),避免了FTP家族的双端口和防火墙兼容性问题。SSH密钥认证也比密码安全得多。
  • 如果你已经为NAS开启了SSH服务用于远程管理,那么SFTP服务几乎是“免费”开启的,无需额外配置一个独立服务。
  • FTPS的优势主要在于对传统FTP工作流的兼容。如果你的工作流程严重依赖某些只支持FTP/FTPS的自动化脚本或企业级备份软件,那么FTPS可能是必要的。

实操心得:对于个人和小型企业,我强烈推荐使用SFTP作为远程安全文件传输的首选。在FileZilla等客户端中连接时,协议选择“SFTP - SSH File Transfer Protocol”,主机填NAS的IP或域名,端口22,用户名密码用你的NAS账户即可。为了极致安全,可以禁用密码登录,仅使用SSH密钥对认证,这需要在NAS的SSH服务设置和你的客户端上配置公钥/私钥。

5. 苹果生态的“旧爱”与跨平台新贵:AFP与WebDAV

5.1 AFP:macOS曾经的专属通道

AFP(Apple Filing Protocol)是苹果公司为其Macintosh系统开发的专属网络文件协议。在macOS的早期版本(OS X 10.9 Mavericks之前),AFP是连接Time Capsule或其它网络存储的首选协议,因为它能完美支持一些Mac特有的元数据,如资源派生文件、Spotlight索引等。

然而,苹果从macOS High Sierra (10.13) 开始,已经正式弃用AFP,转而全力支持SMB。现在的macOS中,SMB协议已经优化得非常好,性能和对Mac特性的支持(如Time Machine备份)都已超过AFP。

给你的建议是:除非你家里还有运行着OS X 10.9或更早版本的老款Mac,并且必须使用某些依赖AFP的古老软件,否则完全没有必要在NAS上开启AFP服务。开启它只会增加NAS系统的负担和安全攻击面。将你的Mac更新到较新系统,并使用SMB连接NAS,是更安全、性能更好且面向未来的选择。

5.2 WebDAV:基于HTTP的通用文件管理

WebDAV(Web Distributed Authoring and Versioning)是一个基于HTTP/HTTPS协议扩展的文件管理协议。它的最大特点是穿透性强平台无关性

  • 穿透性强:因为它使用标准的HTTP(80端口)或HTTPS(443端口)协议,这些端口在绝大多数网络环境中都是开放的。这意味着你在公司、酒店、咖啡馆等有严格防火墙限制的网络里,可能无法连接SMB或FTP的特定端口,但通过WebDAV(尤其是HTTPS的443端口),有很大概率可以成功连接你的NAS。你只需要在路由器上为NAS做443端口的转发即可。
  • 平台无关性:Windows、macOS、Linux、iOS、Android都内置或有非常方便的工具支持WebDAV。在Windows上,可以添加一个“网络位置”映射WebDAV驱动器;在macOS的Finder中,可以通过“连接服务器”输入https://你的NAS域名:端口/路径来挂载;在移动端,许多优秀的文件管理App(如Documents by Readdle, Solid Explorer)都原生支持WebDAV。

WebDAV的典型应用场景

  1. 安全的远程文件访问:通过HTTPS WebDAV,你可以像访问一个安全的网站一样,在异地访问NAS上的文件。配合DDNS和SSL证书,可以构建一个私有的、加密的“云盘”。
  2. 移动端文件管理:在iPhone或iPad上,你可以将NAS的WebDAV共享添加到“文件”App中,直接浏览、播放、编辑其中的文档,非常方便。
  3. 与特定软件集成:很多笔记软件(如Notability、GoodNotes)、办公软件支持直接备份或同步到WebDAV服务器。

配置WebDAV的注意事项

  • 务必使用HTTPS:绝对不要使用明文的HTTP WebDAV,否则你的文件将在互联网上“裸奔”。为你的NAS域名配置SSL证书是必须的。
  • 性能考虑:WebDAV的协议开销比SMB/NFS大,对于局域网内的大文件频繁读写,性能不是最优。它更适合中低速网络下的文档类文件访问。
  • 客户端差异:某些WebDAV客户端可能不支持所有文件操作(如文件锁)。在macOS上挂载WebDAV时,有时会遇到“无法验证服务器身份”的提示,通常是因为自签名证书,在钥匙串访问中信任该证书即可解决。

我个人将WebDAV作为SMB的补充,主要用于外网环境下的紧急文件存取和移动设备访问。在NAS上,我会创建一个单独的、权限受限的共享文件夹专门用于WebDAV,而不是把整个家目录都暴露出去,以遵循最小权限原则。

6. 协议选择决策矩阵与混合部署策略

了解了每个协议的优缺点后,面对一个具体的NAS,我们到底该开哪些服务?如何配置?这里我提供一个基于场景的决策思路和混合部署的实战配置。

6.1 根据场景选择协议:一张速查表

使用场景主要客户端设备推荐协议(按优先级)关键理由与配置要点
家庭多媒体中心智能电视、电视盒子、游戏机、Windows/Mac电脑1. SMB
2. NFS (针对高阶播放器/盒子)
SMB兼容性最广,智能电视原生支持。为追求极致播放性能,可在支持NFS的播放器(如Kodi, NVIDIA Shield)上使用NFS,并启用巨帧。
Windows/Mac混合办公网络Windows PC, macOS电脑1. SMB两大系统原生完美支持,权限管理方便,协同办公功能(如文件锁)完善。确保使用SMB2/3,禁用SMB1。
Linux服务器/开发环境Linux服务器、虚拟机、Docker主机1. NFS
2. SMB
NFS是Linux“原生”协议,性能开销小,尤其适合大量小文件IO。配置时注意UID/GID映射问题。
安全的远程文件传输任意系统,从外网访问1. SFTP (基于SSH)
2. WebDAV over HTTPS
3. FTPS (如有遗留需求)
SFTP最安全简洁(单端口、密钥认证)。WebDAV穿透性最强(80/443端口)。避免使用普通FTP。
移动设备访问 (iOS/Android)手机、平板1. WebDAV over HTTPS
2. 专用App的私有协议
WebDAV可被系统“文件”App或第三方文件管理器直接支持,体验统一。许多NAS厂商的官方App性能更好,但依赖其私有协议。
苹果Time Machine备份macOS电脑1. SMB(macOS 10.13+)
(不再使用AFP)
现代macOS已优化SMB用于Time Machine,比AFP更稳定高效。在NAS上为Time Machine创建专属共享文件夹。
遗留设备或特定软件非常古老的设备、仅支持FTP的工业设备按需开启FTP/FTPS仅在隔离的内网环境中使用,并考虑升级设备或软件。

6.2 实战配置:以一台多功能家庭NAS为例

假设我们有一台NAS,需要满足:家庭影音播放(电视、盒子)、Windows/Mac电脑文件共享、Linux虚拟机存储、手机远程访问、Mac电脑Time Machine备份。

我的配置方案如下:

  1. 核心服务(常开)

    • SMB服务:启用,最大协议SMB3,最小协议SMB2,强制禁用SMB1。创建共享文件夹Media(电影、音乐)、Home(个人文档)、TimeMachine(专属备份)。
    • NFS服务:启用。仅将VM共享文件夹(用于存放虚拟机磁盘)通过NFS共享。采用方案二的权限映射:all_squash,映射到NAS上一个专门创建的、权限受限的用户nfs-vm(UID/GID 设为 2001),并只允许我Linux宿主机的IP地址访问。
    • SSH服务(含SFTP):启用,禁用root登录强烈建议使用密钥认证。仅从外网访问时使用,或用于高级管理。
  2. 按需服务

    • WebDAV服务:启用,仅启用HTTPS(443端口)。使用Let‘s Encrypt证书。创建一个单独的共享文件夹WebDAV-Public,通过用户权限控制访问。在外出时或手机App中连接使用。
    • FTP/FTPS服务默认关闭。仅在极特殊情况下临时开启,用完即关。
  3. 绝不开启的服务

    • AFP服务:关闭。所有Mac设备均已升级到较新系统,使用SMB。
    • 普通FTP服务:永远关闭。

安全加固要点

  • 防火墙规则:在NAS的防火墙中,只开放必要的端口到必要的IP段。例如,SMB/NFS端口(445, 139, 2049等)只允许家庭内网IP段(如192.168.1.0/24)访问。SSH端口(22)可以限制为仅允许管理员的固定公网IP访问。HTTPS WebDAV(443)可以对公网开放。
  • 用户与权限:遵循最小权限原则。为不同用途创建不同用户。例如,media用户只能读Media文件夹;family用户可以在Home下自己的子目录有完全权限;backup用户只能向TimeMachine文件夹写入。
  • 日志与监控:开启重要服务(如SSH、WebDAV)的访问日志,并定期查看是否有异常登录尝试。

通过这样的混合部署与精细配置,你的NAS既能高效地服务各种设备,又能将安全风险控制在最低水平。记住,没有“一刀切”的最佳协议,只有最适合你当前网络环境、设备条件和安全需求的组合。

← 返回列表