用 Ubuntu Tailscale 搭建一个只属于自己的私人网盘从部署、远程访问到分享权限与上传性能排查的一次完整实践记录。一直以来我都想搭建一个真正属于自己的个人网盘。我的需求并不复杂我不需要企业级协作平台也不想长期依赖商业网盘会员。我更希望把自己现有的硬盘利用起来在一台 Ubuntu 电脑上部署一个网页网盘通过浏览器完成文件管理、上传下载、音乐播放和视频播放同时还能从外网安全访问。最终我采用了这样一套方案Ubuntu 私人电脑 本地硬盘 轻量级 Web 网盘 Tailscale 私有网络这套方案最大的特点是免费私有不需要公网 IP不需要开放公网端口不需要把文件服务器直接暴露到互联网适合个人长期使用。本文记录整个搭建思路以及在实际使用过程中遇到的分享权限和上传速度问题。一、我的使用场景我的 Ubuntu 电脑并不放在家里而是放在公司。这台电脑是我自己的私人设备上面挂载了多个硬盘同时还运行着多个服务。我的目标是把其中一部分存储空间作为个人网盘使用。实际访问结构大致如下家里的 Windows 电脑 │ │ Tailscale 私有网络 ▼ 公司的 Ubuntu 私人电脑 │ ├── 网盘 Web 服务 ├── USB 硬盘 ├── 音乐 ├── 视频 ├── 文档 └── 其他个人文件Ubuntu 上的网盘服务监听在类似这样的地址http://100.x.x.x:8080这里的100.x.x.x并不是公网 IP而是 Tailscale 分配的私有地址。也就是说只有加入我 Tailscale 网络的设备才能访问这个网盘。没有加入 Tailscale 网络的普通互联网用户即使知道这个地址也无法直接访问。二、为什么没有直接使用公网 IP最开始考虑个人网盘时一个很自然的想法是直接开放公网端口不就可以了吗但实际情况往往没有这么简单。很多家庭网络和公司网络都处于 NAT 后面没有真正可以直接使用的公网 IPv4 地址。如果采用传统方式搭建公网服务器通常还需要处理公网 IP 端口映射 DDNS HTTPS 域名 防火墙 登录安全 暴力破解防护对于一个主要给自己使用的个人网盘来说这套方案有些过于复杂。更重要的是我不希望把文件管理后台直接暴露在公网。因此我最终选择了 Tailscale。三、为什么选择 TailscaleTailscale 是一种基于 WireGuard 的私有组网工具。安装后每台设备都会获得一个类似下面的虚拟 IP100.73.110.110只要家里的 Windows 和公司的 Ubuntu 都加入同一个 Tailnet就可以像处于同一个局域网中一样通信。例如Windows ↓ http://100.73.110.110:8080 ↓ Ubuntu 网盘服务它的优势非常适合我的使用场景不需要公网 IP不需要修改公司路由器不需要端口映射不需要把 8080 端口暴露到公网默认只允许自己的 Tailscale 网络访问适合 SSH、网页管理和个人网盘等私人服务。因为公司和家里的路由器我都无法随意修改所以传统端口映射并不现实。四、Ubuntu 端安装并接入 TailscaleUbuntu 上安装 Tailscale 后将设备加入自己的 Tailnet。安装完成后可以查看状态tailscale status查看本机 Tailscale IPv4 地址tailscaleip-4例如100.73.110.110然后在家里的 Windows 电脑上安装 Tailscale并登录同一个账号。理论上两台设备就可以直接互相访问。可以先测试tailscaleping100.73.110.110如果连接正常就可以继续部署网页网盘。五、部署网页网盘我的需求不是完整的企业协作平台而是一个直接、轻量的个人文件管理系统。主要功能包括浏览文件上传文件下载文件创建目录重命名文件文件搜索网页播放音乐网页播放视频文件分享用户登录多目录管理。因此我选择了轻量级的 FileBrowser 类网页文件管理项目而不是直接使用 Nextcloud。对于我的机器来说这种方案更轻量也更符合个人使用场景。服务启动后网盘监听0.0.0.0:8080然后通过 Tailscale 地址访问http://100.73.110.110:8080这样就实现了在家里通过浏览器访问放在公司的 Ubuntu 电脑。六、我的存储目录结构Ubuntu 上挂载了多个硬盘其中包括娱乐影音和其他个人数据。大致结构如下/ ├── 系统盘 ├── 资料盘 └── USB硬盘一 ├── 娱乐影音 │ ├── 音乐 │ ├── 电影视频 │ └── 其他媒体 ├── 文档 └── 其他文件网盘服务直接将这些目录作为文件源进行管理。这种方式最大的优点是网盘本身不重新保存一份数据只是提供一个网页入口。原始文件仍然存在于正常的 Linux 文件系统中。即使以后更换网盘程序底层文件也不会被锁死在某个平台里。七、网页播放音乐和视频搭建完成之后我发现这个轻量级网盘已经能够满足不少日常需求。例如点击音乐文件可以直接在网页中播放。点击视频文件也可以使用浏览器进行播放。这意味着它已经不只是一个简单的“文件上传下载工具”还可以作为一个轻量级的个人媒体入口。例如手机 / Windows 浏览器 │ ▼ Tailscale │ ▼ Ubuntu 网盘 │ ├── MP3 ├── FLAC ├── MP4 └── 其他媒体当然视频能否顺畅播放还取决于两个因素浏览器是否支持对应的视频编码当前网络链路速度是否足够。我的实际测试中视频可以播放但加载速度明显受到网络链路影响。八、遇到的第一个问题分享功能报 403在使用过程中我尝试使用网盘自带的分享功能结果出现403: the target source is private, sharing is not permitted从错误信息本身来看问题并不是 Tailscale而是网盘内部的 Source 配置。对应的文件源被标记为private: true因此程序禁止对这个 Source 创建分享。正确的处理思路是检查 Source 配置 ↓ 确认该目录需要允许分享 ↓ private: true 改为 private: false同时需要检查当前用户是否拥有Share权限。这里有一个很容易混淆的地方把 Source 设置为允许分享并不等于把网盘公开到公网。因为整个网盘的访问地址仍然是100.x.x.x它仍然属于 Tailscale 私有网络。所以即使生成了分享链接默认情况下也只有能够访问这个 Tailscale 网络的设备才能打开。网络层和应用层是两件不同的事情。可以简单理解为Tailscale 负责谁能够访问服务器 网盘权限 负责进入服务器以后能做什么这也是我最终比较喜欢这种架构的原因。九、遇到的第二个问题800MB 上传了 3 个小时真正让我开始排查性能问题的是一次大文件上传。一个大约800MB的文件竟然上传了大约3 小时简单计算一下800MB ÷ 10800 秒 ≈ 0.074MB/s ≈ 76KB/s这个速度显然不正常。一开始我怀疑的是网盘上传切片。因为网盘上传时会把文件切成多个 Chunk例如10MB 32MB 50MB我最开始以为是不是把 Chunk 调大上传就会变快后来发现并不是这样。十、上传切片大小并不等于上传速度上传切片的作用主要是一个 800MB 文件 ↓ 切成多个 Chunk ↓ 逐块上传例如10MB × 80 个或者50MB × 16 个把 Chunk 从 10MB 调成 50MB可以减少请求次数。这可能让上传过程稍微更平滑也可能降低部分请求开销。但是它不会把一个 76KB/s 的网络连接突然变成 10MB/s。真正决定上传速度的仍然是客户端上行速度 服务器网络 Tailscale 连接模式 中间网络 NAT UDP 可达性 代理软件 网络拥堵所以这时候必须检查 Tailscale 实际走的是什么链路。十一、真正的问题Tailscale 正在走 DERP 中继在 Windows 上执行tailscaleping100.73.110.110返回结果类似pong from xxx (100.73.110.110) via DERP(sin) in 198ms pong from xxx (100.73.110.110) via DERP(sin) in 200ms pong from xxx (100.73.110.110) via DERP(sin) in 294ms这里最关键的是via DERP(sin)这意味着家里的 Windows 和公司的 Ubuntu 没有建立真正的点对点直连。数据实际路径更接近家里 Windows │ ▼ Tailscale DERP 中继 │ ▼ 公司 Ubuntu而不是家里 Windows │ ▼ 公司 Ubuntusin表示使用的是新加坡地区的 DERP 中继。这就解释了为什么网页可以打开文件也能上传视频也能播放但是大文件速度非常慢。DERP 的主要作用是保证即使两个设备无法建立 UDP 点对点连接也尽量让它们能够通信。它首先解决的是“能不能连接”的问题而不是“能不能跑满带宽”的问题。十二、为什么无法直连我的环境比较特殊。Ubuntu 位于公司网络。Windows 位于家庭网络。并且公司路由器无法修改 家里路由器也不方便修改Ubuntu 本身还需要使用代理访问部分国外服务。因此链路可能同时受到以下因素影响公司 NAT企业防火墙家庭 NATUDP 限制代理规则网络拥堵。这也是很多自建家庭服务器或个人服务器会遇到的问题。Tailscale 可以解决没有公网 IP 也能连接。但它并不能保证所有网络环境下一定建立高速 P2P 直连。十三、正确的性能排查方法这时候最重要的事情不是继续修改网盘配置而是先检查网络。Ubuntu 上可以执行tailscale netcheck查看 Tailscale 的网络情况。然后执行tailscale status查看当前节点状态。检查 UDPsudoss-lunp检查 Ubuntu 防火墙sudoufw status verbose检查代理环境env|grep-iproxy再检查tailscaled是否继承了代理环境systemctl show tailscaled-pEnvironment这里尤其要注意一个问题。Ubuntu 为了访问国外服务可能配置了HTTP_PROXY HTTPS_PROXY ALL_PROXY但不应该让 Tailscale 的私有网络流量被错误地送进普通代理。例如100.64.0.0/10是 Tailscale 使用的地址范围之一。代理软件应该尽量对这类地址执行DIRECT否则可能产生非常奇怪的网络问题。十四、为什么我没有直接改路由器很多教程会建议开启 UPnP 开启 NAT-PMP 做 UDP 端口映射这些方法在自己完全控制网络环境时确实有效。但我的实际环境是我只能控制 Ubuntu 电脑和 Windows 电脑。不能控制公司核心网络公司路由器家庭上级网络。所以我的优化原则是只调整自己能够控制的设备不为了追求直连破坏现有远程访问。这一点非常重要。因为这台 Ubuntu 电脑位于公司一旦错误修改网络配置 防火墙 Tailscale 路由表就可能导致自己彻底失去远程连接。因此任何操作都应该遵循先检查 再分析 最后修改尤其不要远程随便执行sudoufw resetsudosystemctl restart NetworkManagersudosystemctl restart tailscaledsudoreboot除非已经确认自己有备用连接方式。十五、网盘程序本身还需要优化吗经过实际使用之后我的判断是对个人使用来说目前这个轻量级网盘其实已经够用了。因为我真正需要的功能已经具备文件管理上传下载音乐播放视频播放多硬盘访问用户登录分享浏览器访问。如果只是因为上传慢就更换成 Nextcloud问题很可能仍然存在。因为FileBrowser Nextcloud 其他网页网盘最终都要经过同一条网络链路。如果底层仍然是DERP 中继换一个更重的网盘程序并不会让 800MB 文件突然上传得更快。所以目前我的策略是保留现有网盘把重点放在稳定性和链路优化上。十六、我目前推荐的整体架构经过这一轮折腾我现在比较推荐这样的个人网盘架构┌─────────────────┐ │ Windows / 手机 │ └────────┬────────┘ │ Tailscale │ ┌────────▼────────┐ │ Ubuntu 私人电脑 │ └────────┬────────┘ │ ┌──────────────┼──────────────┐ │ │ │ 网盘服务 系统服务 本地硬盘 :8080 │ ├── 音乐 ├── 视频 ├── 文档 └── 备份安全边界是公网 │ ✕ 不直接开放网盘端口 │ Tailscale 私有网络 │ ▼ 网盘登录鉴权 │ ▼ 真实文件系统这实际上形成了两层保护。第一层必须先进入 Tailnet第二层还要通过网盘自己的用户权限对于个人使用来说这种方案已经比较稳妥。十七、后续准备继续做的事情目前网盘已经能够正常使用但还有几个值得继续优化的方向。1. 优化 Tailscale 网络链路目标是尽可能从DERP变成direct如果网络环境确实无法实现直连也需要考虑如何提高大文件传输的可靠性。2. 大文件使用支持断点续传的工具网页上传适合几十 MB 或几百 MB 的日常文件。但对于几个 GB、几十 GB 的大文件更适合使用支持断点续传的工具例如rsync这样即使网络中断也不需要从头重新上传。3. 继续整理音乐和视频库我的网盘中还有大约 17GB 的音乐。下一步准备进行SHA256 去重元数据整理歌手和专辑目录整理华语、外语、纯音乐简单分类M3U8 收藏播放列表保留喜欢的音乐标记。底层文件整理好之后无论以后继续使用当前网盘还是接入专门的音乐服务都会更加方便。4. 做好服务台账因为这台 Ubuntu 上已经运行了多个网站和服务所以后面还需要把所有服务整理成台账服务名称 监听端口 项目目录 启动方式 运行用户 是否开机启动 是否自动重启 日志位置 访问地址这样可以避免时间长了以后连自己都不知道“8080 到底是谁在用”自建服务器最容易出现的问题通常不是服务搭不起来而是半年以后忘记当初自己怎么搭的。十八、总结这次搭建个人网盘之后我最大的体会是搭建一个“能访问”的个人网盘其实并不难真正需要解决的是安全、网络链路和长期维护。我的最终方案是Ubuntu 本地硬盘 轻量级 Web 网盘 Tailscale它不需要公网 IP不需要购买域名也不需要把文件服务直接暴露到公网。目前最大的性能瓶颈并不是网盘程序而是Tailscale 没有建立 P2P 直连 当前流量经过 DERP(sin) 中继因此下一步优化的重点不是盲目更换网盘项目而是检查网络 → 判断为什么无法直连 → 优化可控的客户端环境 → 提高大文件传输可靠性对于一个主要由自己使用的个人网盘来说我现在反而越来越倾向于软件保持简单网络保持私有文件保持开放数据永远掌握在自己的硬盘里。这大概就是我搭建这个个人网盘最大的意义。