家里有闲置笔记本或者台式电脑存了几百G照片视频想在外面也能访问买NAS群晖起步价两三千硬盘还得另算。云盘限速限空间大文件传到猴年马月。昨晚我用一台2014年的老笔记本折腾了大半个小时搞了个文件上传下载服务。外网直接访问不用内网穿透不用公网IP全程免费。先说结论最终效果• 本地地址http://localhost:8080• 外网地址https://files.gogkd.com固定域名重启不变• 手机浏览器直接打开就能用• 上传下载不限速取决于你家宽带上行• 全程花费0元技术栈Docker Filebrowser Cloudflare Tunnel为什么不用NASNAS本质就是一台24小时开机的小电脑硬盘。群晖、威联通这些成品NAS入门款两三千还得买硬盘。如果你只是想传文件没必要花这个钱。我这台笔记本配置• CPUi5-4210M2014年的很老了• 内存8GB• 硬盘220GB数据盘• 系统Ubuntu2014年的老U跑NAS转码会吃力但只跑一个文件服务完全没问题。第一步装FilebrowserFilebrowser是一个开源的网页文件管理器Docker一行命令就能跑起来。# 创建专用共享目录只共享这个目录不动home下的敏感文件 mkdir -p ~/share # 启动Filebrowser docker run -d \ --name filebrowser \ --restart unless-stopped \ -p 8080:80 \ -v /home/你的用户名/share:/srv \ filebrowser/filebrowser:latest跑完之后打开浏览器访问 http://localhost:8080 能看到登录页面就成功了。默认账号是admin密码会自动生成一个随机的看容器日志就知道docker logs filebrowser 21 | grep randomly generated password安全提醒我只挂载了~/share这个专用目录没有把整个home目录挂进去。否则你的SSH密钥、配置文件全暴露在网页上了。第二步搞Cloudflare Tunnel本地能访问了但外网还访问不了。你家路由器没有公网IP大内网端口转发用不了。解决方案Cloudflare Tunnel。免费不需要公网IP不需要绑信用卡。2.1 注册Cloudflare账号打开 https://dash.cloudflare.com 注册免费的。2.2 把域名接入Cloudflare如果你有自己的域名比如我的gogkd.com需要把DNS管理权从原来的注册商比如阿里云转到Cloudflare。很多人怕这一步——改NS会不会网站挂了只要操作顺序对完全不会。第一步在Cloudflare添加域名登录Cloudflare控制台点Add a site输入你的域名选免费计划。第二步导入现有DNS记录这是关键。Cloudflare会自动扫描你域名的DNS记录但可能不全。我有10多条记录A记录、CNAME、MX邮箱、TXT验证等自动扫描只找到一部分。解决办法从阿里云导出完整的DNS记录再导入Cloudflare。阿里云操作路径域名控制台 → 域名列表 → 点你的域名 →域名解析→ 右上角导入/导出→ 导出格式选Zone File或BIND Zone File→ 下载文件。然后在Cloudflare的DNS管理页面点Import DNS Records上传刚才下载的文件。导入完成后对比一下阿里云的记录和Cloudflare的记录确保所有子域名都在比如blog、mail、md等。第三步确认记录完整后点ContinueCloudflare会给你两个NS地址类似chelsea.ns.cloudflare.com和odin.ns.cloudflare.com复制下来。第四步去阿里云改NS阿里云控制台 → 域名列表 → 点你的域名 →DNS修改左侧菜单→修改DNS服务器→ 删掉原来的ns1.hichina.com和ns2.hichina.com→ 填入Cloudflare给的两个NS地址 → 保存。这一步不会影响网站访问因为Cloudflare已经把你的DNS记录都迁过去了改NS只是把解析权交过去。生效时间一般几分钟最长24小时。2.3 安装cloudflared# 下载cloudflared wget -O /tmp/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 chmod x /tmp/cloudflared # 安装到系统目录 sudo cp /tmp/cloudflared /usr/local/bin/2.4 登录授权cloudflared tunnel login这行命令会生成一个授权链接在浏览器打开。打开后会看到一个Authorize Cloudflare Tunnel的页面里面有个搜索框。输入你的域名比如gogkd.com点搜索。如果域名已经在Cloudflare上了下面会列出你的域名显示 Active 状态。选中你的域名点授权。页面会显示Success告诉你证书已安装成功。授权成功后会在~/.cloudflared/下生成一个cert.pem证书文件。这个文件是后续创建隧道的凭证别删了。2.5 创建隧道# 创建隧道 cloudflared tunnel create filebrowser # 绑定域名 cloudflared tunnel route dns filebrowser files.gogkd.com2.6 写配置文件cat ~/.cloudflared/config.yml EOF tunnel: 你的隧道ID credentials-file: /home/你的用户名/.cloudflared/你的隧道ID.json ingress: - hostname: files.gogkd.com service: http://localhost:8080 - service: http_status:404 EOF2.7 启动隧道cloudflared tunnel --config ~/.cloudflared/config.yml run filebrowser打开 https://files.gogkd.com 能看到Filebrowser的登录页面就成功了。第三步设成开机自启笔记本重启后服务要自动跑起来不然每次都要手动启动。FilebrowserDocker容器设了--restart unless-stopped重启后自动拉起。Cloudflare Tunnel# 创建systemd服务 sudotee /etc/systemd/system/cloudflared-filebrowser.service EOF [Unit] DescriptionCloudflare Tunnel for Filebrowser Afternetwork.target [Service] Typesimple ExecStart/usr/local/bin/cloudflared tunnel --config /home/你的用户名/.cloudflared/config.yml run filebrowser Restartalways RestartSec5 User你的用户名 [Install] WantedBymulti-user.target EOF # 启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl enable cloudflared-filebrowser sudo systemctl start cloudflared-filebrowser实际体验上传速度取决于你家宽带上行。我测试了一下• 上传1GB文件约1分钟100Mbps上行• 上传10GB文件约10分钟比云盘的龟速强太多了。而且没有空间限制你硬盘多大就能传多大。手机上直接用浏览器打开 https://files.gogkd.com 登录后就能上传下载。iOS和Android都支持不用装APP。安全注意事项1.一定要设密码Filebrowser自带登录认证别用默认密码2.只共享专用目录不要把home目录整个挂进去3.Cloudflare自带TLS加密传输过程是加密的不怕被窃听4.URL保密知道地址密码就能访问别随便分享常见问题QCloudflare Tunnel免费吗A免费不绑信用卡。Quick Tunnel临时URL每次重启会变Named Tunnel固定域名需要域名在Cloudflare上。Q没有自己的域名怎么办A可以用Quick Tunnel每次启动会给你一个随机URLxxx.trycloudflare.com重启会变。够用但不方便。Q能传多大的文件A没有限制取决于你的硬盘空间和带宽。QMac能用吗A能。教程里用的Linux但Docker和cloudflared都有Mac版流程一样。Q2014年的老笔记本跑得动吗AFilebrowser几乎不吃资源cloudflared也很轻量。CPU占用不到1%内存占用不到50MB。老机器完全没问题。