飞牛 NAS 和群晖一样,自带系统级内网穿透功能。多年来,我一直使用群晖 quickconnect 用来访问家中的 NAS,虽然速度慢,但作为 NAS 界的扛把子,群晖服务的安全性还是让人比较安心。但飞牛这边就有点心结了,于是只好自己配置外网访问,同时通过防火墙和一定的规则设置,尽量在易用性和安全性中间寻求平衡,本文主要介绍我这种选择的原因和配置方案。
为何不用飞牛 FN connect
出于隐私安全考虑
我在上一篇 《飞牛 OS 到底是选物理机安装还是虚拟机安装》 提到,毕竟飞牛还只是一家 20 多人的初创公司,从理性的角度来看,我可能没有必要把自己的隐私全交给它保管。
相比而言,群晖那边,好歹是一家全球化企业,行业排名第一,在数据安全方面让人放心得多。
虽然有点厚此薄彼,但这也是无奈的选择。
此外,即便是群晖,也不是那么靠谱。例如,我单位机房有一台群晖 DS1618+,基于数据安全考虑,压根没有开启过外网连接,更谈不上使用 quickconnect 进行远程访问,所有数据都只保存在内网。
还是个人信息安全
从技术角度来看,以前想要从用户 NAS 中“偷数据”,总的来说难度还是不小。
我相信,即便群晖要偷用户数据,也不可能一股脑将所有文件偷走,那个庞大的传输量,不可能不引发用户警觉,风险过高。
真要“偷数据”也只能选择高价值的信息偷,而近年来兴起的 AI 识别功能就为“偷数据”创造了极佳条件。
只需要有针对性设置关键词,“盗取”用户少量数据,即可实现“收益”最大化。
此前,群晖的低下性能,让我觉得群晖很难用上这种手段,甚至到后来,由于我的 NAS 性能过于孱弱,我直接关闭了 AI 识图功能。
而目前市面上各种国产 NAS(绿联、极空间等)或者图像软件(immich, mt photos, 飞牛相册等),无一不引用了更为强大的 AI 大模型,毫无疑问都可以更加精准地识别到用户重要隐私数据。
最简单的,假设这些公司中出现内控问题,导致一名欠赌债的程序员,想通过盗取用户 NAS 照片中存储的信用卡数据信息用于黑产贩卖。
此时,这名程序员,仅仅只需要从用户设备中盗取一条0.2KB的数据,就能实现。
|
|
这种数据,再加上当代密码技术,可以说普通人压根没有任何感知可能,即便事后能通过其他渠道抓获程序员,侦查机关也很难办。
申明:上述内容,均为个人臆想,不代表现实中就会发生这种问题。
传输速度
飞牛 connect 默认为用户提供免费穿透方案,实测大致是 2-4Mbps 左右带宽,也就是下载速度在 200-500KB/s 左右,与群晖 quickconnect 相当。
另外,飞牛也提供了收费版 connect,价格相对实惠,可以提速到 12Mbps 甚至 40Mbps ,其中 40Mbps 几乎已经达到绝大多数家庭宽带用户上传速度的限额。
我觉得 2-4Mbps 速度虽然也能够忍受,但 12Mbps 显然更符合日常使用需求。不过 12Mbps 的价格显然比购买 VPS 稍贵,事实上我手上有一台位于香港的 1C1G VPS,日常完全能够把我的上传带宽跑满,下载就更不用说了。
选择何种内网穿透方案
在决定不用飞牛 FN connect 之后,我便开始思索自己该用那种穿透方案好。
通常有三类选择:
- 有公网固定 IP 的可以选择使用腾讯、阿里、cloudflare 等大厂 DDNS 穿透方案。
- 使用自己的 VPS 搭建 FRP 通道进行穿透。
- 使用 Cloudflare tunnel,ngrok 或者 Tailscale Funnel 等第三方穿透方案。
由于我家没有公网固定 IP,就连 IPV6 都没能开通( 参考:《开启个IPV6怎么这么难》 ),所以,我要么在自己的 VPS 上搭建 FRP ,要么使用第三方现成的穿透方案。
最终,我选择了使用 Cloudflare tunnel,核心原因还是基于网络安全考量。
具体方案如下:
在虚拟机中安装 Cloudflare tunnel
Cloudflare tunnel 提供多种安装方式,根据自己实际情况选择即可。其中,docker 版可以在飞牛内安装,只需要将安装命令转写成 docker compose 格式即可。
例如:
|
|
添加管道
安装 Cloudflare tunnel 后,继续添加公共主机名,输入内网地址即可连接。
需要注意的是,像飞牛 OS 这类服务,既可以添加 http 也可以添加 https,添加完就能正常在公网打开了。而 PVE 管理面板只能添加 https,并且需要在下方应用程序设置中关闭 tls 认证才能正常打开。
另外,也可以把家中其他服务添加到 Cloudflare tunnel。比如:路由器管理面板,其他 NAS 设备等。Cloudflare tunnel的强大之处在于,内网只需要安装一个程序,就能把家中所有需要外网访问的服务都一并拉入加密管道内暴露在公网。
不过,这也显然加大了网络安全风险。
添加 ACCESS 访问控制
Cloudflare 全家桶套餐都可以用到 Cloudflare tunnel 上,显著增强家庭设备暴露在公网后的安全性。
结合日常需要,我觉得最实用的是添加 ACCESS 应用程序控制。
目前我采取的是身份认证方式接入。
在 Cloudflare Zero Trust 主页下方设置中,添加身份认证信息。基于国内目前网络环境,最好是添加 Azure 账号。
毕竟微软头比较硬,Azure 能够在日常网络环境中正常打开。而其他像 Google Github 等就容易存在不稳定因素。
在添加页面,Cloudflare 有详细的使用说明,按照说明一步一步往下操作即可。
添加身份信息后,在 Zero Trust 的 Access 中添加策略。选择 Login Methods 为 Azure,Emails 为你自己的 Azure 账号邮箱即可。
然后在 Access 中添加自托管应用程序,选择前边在 Cloudflare tunnel 中设置过的主机名,以及刚创建的 Azure 策略即可。
这样,当访问飞牛 OS 面板时,首先跳出来的是 Cloudflare Zero Trust 的应用界面,如果不使用你自己的 Azure 账号登录,是基本不可能访问到飞牛 OS 登录界面的。
为飞牛手机 APP 添加访问策略
日常使用飞牛,有 WEB 版和手机 APP 两种方式,其中 WEB 版基本不支持常用手机浏览器,用起来很是不便。虽然看到有人说 alook 浏览器能稍微正常点,但实测使用还是比较坑。查看飞牛论坛,发现官方也没有适配手机浏览器的想法,无奈之下,只能继续研究飞牛手机 APP 登录问题。
首要原因在于,添加上边这种 ACCESS 访问控制方式后,无法在飞牛 APP 中再使用相同的地址登录手机 APP,毕竟手机 APP 登录时不可能再显示个WEB 页面出来,给先登录 Azure。只要手机 APP 发出登录命令没有得到响应地址响应,就自动终止了。
于是只剩下一条路,为手机 APP 添加专门的访问通道,即在 Cloudflare 创建一条新的管道专门用于手机 APP 连接。然后通过 Cloudflare 的访问策略进行限制。
例如,最简单的设置 IP 规则。如果自己比较固定的使用某些 IP 连接 Cloudflare,可以将不是该 IP 的连接全部阻止。
考虑到我有时候用固定 IP,有时候不用,在安全规则中设置起来非常困难,最后我选择使用 Cloudflare Workers 来控制连接。
设置了两个访问控制逻辑:
- IP 白名单的访问自动放行。
- Hosts 头多重认证。包括审查 APP 使用的 IP 段,User-agent, tls 版本,运营商,线路等。
具体 Workers 内容敏感,就不贴出来了,如有需要可以让 AI 帮忙写一个。一般都能一次性通过运行。需要注意的是,在验证后要放行 websocket,不然 APP 内的相册打不开。
过程中,我折腾了很久 device-fingerprint 认证,后边才发现,这是个企业版才有的功能,如果用设备指纹 ID 认证,估计就是最安全的方法之一了。
另外,就是,这个方案还有个小瑕疵:APP 内无法打开 docker 应用。
由于我就几个应用,每一个都单独设置管道到公网,倒也没所谓。如果喜欢在 APP 内打开 docker 的话,建议将每个应用都添加到管道,重新在 docker 中再逐个设置一遍外网地址。
总而言之,这种访问策略控制,也只是大幅降低公网暴露风险,后续我可能考虑使用 Cloudflare Warp 来连接,通过设置防火墙和解析策略,进一步增强访问的安全性。