内网穿透实现文件管理上传
家里那台旧笔记本装了 Ubuntu,内网平时当个轻量服务器跑点 Docker 服务。穿透问题来了——我在公司想取个文件,实现上传或者在外面想传张图上去,文件根本连不进去。管理公网 IP 没有,内网路由器拨号拿的穿透是运营商内网地址,DDNS 也没戏。实现上传这就是文件典型的 NAT 穿透困境。 解决办法其实不复杂。管理核心思路是内网找一台有公网 IP 的机器做中转,把内网服务暴露出去。穿透我试过几种方案,实现上传最后留了两套在跑:一套用 frp,文件一套用 Tailscale。管理各有各的场景。 frp 的逻辑很直白。你有一台公网 VPS,在上面跑 frps(服务端),内网机器跑 frpc(客户端)。frpc 主动连 frps,建立一条隧道,然后把内网的某个端口映射到公网 VPS 上。外网访问 VPS 的指定端口,流量就顺着隧道回到内网机器。 配置起来大概是这样。服务端 客户端 内网 8080 跑的是什么?我用的 Filebrowser。一个 Go 写的单文件程序,带 Web 界面,能浏览、上传、下载、分享。启动就一行命令: 这样外网直接访问 我自己的做法是 Nginx 反代 + Let's Encrypt 证书,域名指向 VPS,frp 只监听 127.0.0.1,外部流量全部走 Nginx 443。这样安全性和易用性都还行。 frp 的缺点是端口暴露在公网,哪怕有认证,扫描器也天天来敲。后来我加了 Tailscale 作为备选。 Tailscale 基于 WireGuard,登录后给你每台设备分配一个 100.x.x.x 的虚拟 IP。内网机器和你的手机、笔记本都装上,它们就像在同一个局域网里。Filebrowser 监听在 Tailscale 的 IP 上,只有你账号下的设备能访问,公网根本看不到这个端口。 安装更简单: 然后 Filebrowser 绑定 Tailscale 分配的 IP: 手机装个 Tailscale 客户端,连上后浏览器访问 不管用哪种穿透方式,Filebrowser 本身有些配置值得调。默认数据库是 BoltDB,存在 上传大文件时,如果前面有 Nginx,记得调 另外 Filebrowser 支持多用户和权限隔离。给家里人开个只读账号,自己用 admin,各看各的目录。命令是: 还有个隐藏功能:它内置了分享链接。选中文件点分享,生成一个临时 URL,可以设过期时间和密码。比直接给对方账号方便。 我的判断标准很简单:需要给外部人员临时访问,用 frp + Nginx,可控、直接;只是自己设备之间同步和取文件,Tailscale 更省心,不用管证书和端口暴露。两个可以同时跑,互不干扰。 成本方面,frp 方案需要一台 VPS,最便宜的按年付大概 100 多块。Tailscale 免费版支持 100 台设备,个人用完全够。Filebrowser 开源免费,资源占用极低,我那台 2015 年的笔记本跑起来 CPU 占用不到 1%。 整套东西搭下来,从零开始大概半小时。真正花时间的是调试网络和证书,不是软件本身。frp:把端口直接甩出去
frps.toml:bindPort = 7000 auth.token = "你的密钥" frpc.toml:serverAddr = "你的VPS公网IP" serverPort = 7000 auth.token = "你的密钥" [[proxies]] name = "file-manager" type = "tcp" localIP = "127.0.0.1" localPort = 8080 remotePort = 8080 filebrowser -a 127.0.0.1 -p 8080 -r /data VPS_IP:8080 就能看到文件管理界面了。注意 frp 映射出来的端口是明文 HTTP,如果传敏感文件,建议在 VPS 上套一层 Nginx 做 HTTPS 反代,或者干脆用 frp 的 STCP 模式加预共享密钥。Tailscale:不暴露端口,组虚拟局域网
curl -fsSL https://tailscale.com/install.sh | sh tailscale up filebrowser -a 100.x.x.x -p 8080 -r /data http://100.x.x.x:8080 就行。速度取决于两端 NAT 类型,多数情况下能打洞直连,延迟比走 VPS 中转低不少。我实测在公司网络下传个 200MB 的文件,直连速度能跑到 8MB/s 左右,frp 走 VPS 大概 3MB/s,VPS 带宽是瓶颈。Filebrowser 的几个实用细节
filebrowser.db 里。第一次启动会生成 admin 账号,密码随机打印在终端,记得改。client_max_body_size,否则超过 1MB 就 413。我一开始踩过这个坑,传个 PDF 都失败,查了半天。filebrowser users add 用户名 密码 --perm.execute=false 怎么选
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-