我花了三天时间,把 Bitwarden 迁移到了自托管服务器

从 Lastpass 迁移到 Bitwarden,大概有三年了吧。前几天发现有个浏览器上的 Bitwarden 插件登进去以后一直在转圈不出数据,不得其解,下了个电脑客户端尝试了一下,也是登进去在转圈,过了几天才通过一次机缘巧合发现,我的电信宽带和电信手机都不能继续同步数据,虽然联通手机是可以的——哦,原来是【众所周知的原因】了。
由于【众所周知的原因】,每年都有几个网站不能访问,去年我就听说了 Bitwarden 在某些地区不能访问了,还未雨绸缪地买了个很便宜的特价腾讯云主机并且做了个带备案的新域名,随着这个特价主机一年到期不给特价续费之后我干脆也把域名备案给注销了(会泄漏个人信息),结果几个月后真给我来这出,也是很懊恼。

不能访问的是 bitwarden.com,而官方其实为了应对欧盟新法律出过一个 bitwarden.eu 的服务器,我先试试这个吧。那么要做的事情,就是把数据从 .com 搬运到 .eu 去。

数据很好说,在浏览器插件里导出为 *.json 格式(不要加密,加密会导致不能搬家)的文件,登录 bitwarden.eu,重新导入就好。麻烦的是域名规则,要用两个浏览器同时登录 .com 和 .eu 两个网站,一条一条复制粘贴过去。搬的过程中还发现了 Bitwarden 网站的一个 bug,就是不能一次添加多个记录并保存,那样的话只能保存最后一条输入的记录,结果就是每贴一条规则保存一下……

搬是搬完了,浏览器插件和移动设备也一个个重登,结果还是时灵时不灵,灵的时候也要花费相当长的时间来同步(要知道导出的 json 文件只有几百 KB 而已),于是自建 Bitwarden 服务器的方案再次摆上台面。

 

第一个问题,要不要发布在外网上?
虽然我有公网 IP,但是任何网站通过自己家宽带发布在网上都是很危险的行为,可能会喝茶会停宽带,所以我一开始就想,要不要放弃在外网同步密码,直接部署在家里的 NAS 上,然后所有设备都输入 NAS 的 IP 地址登录并进行同步?为此我先通过 Docker 部署(Docker 也不能用了,八仙过海各显神通,上个网真难啊)一个 Vaultwarden 镜像——类似教程非常多,只要能下载 Docker 镜像,后面的过程都非常简单,三下五除二就能见到 Vaultwarden 的登录界面,然后:不能创建账号。

Bitwarden(Vaultwarden)对 https 的检查非常严格,不要说没有 https 连接,哪怕证书对不上都不给登录或者创建账号,所以通过 IP 地址来访问的思路完全行不通,必须通过合法的域名和证书发布在外网上。

 

那么进一步到第二个问题:放在云主机上还是自己家里的服务器上?

首先对比一下两种不同的路线。
放在云主机上就是按发布网站的做法,直接买一台 VPS,新做一个 Vaultwarden 网站,配上域名和证书。真的要买吗?要买,虽然本站就是做在 VPS 上的,但为了省钱买的是最便宜的 5 美元服务器(一开始是 10 美元,后来出了更便宜的 5 美元套餐屁颠屁颠地降级了,现在之前的 10 美元套餐甚至要 12 美元),Wordpress 的某些插件跑起来都会挂,我实在没有信心本站的服务器还能再跑一个 Vaultwarden 的 Docker。要升级势必加钱,一个月加 5 美元甚至 7 美元还不如去找其他那些 1~2 美元的便宜 VPS。所以结论就是,最便宜也要 1 美元一个月买一个新的 VPS,域名倒是有现成的,就是 ngnix、https 证书那些都得自己折腾。
放在自己家里就是用 NAS 或者其他什么机器跑一个 Vaultwarden 的 Docker,再做反向代理。如果放弃自己的公网 IP、完全靠自己搭反向代理的话也需要一台外网服务器,那就失去在自己家部署的意义了,不过国内现在也有提供内网穿透的服务商,只要安装他们的服务——从 Windows 到 MacOS,再到群晖 QNAP 乃至树莓派 OpenWRT 都有安装包提供——然后交钱就行了。

我最开始看的教程说用 cpolar,试了一下果然可以直接映射到内网地址,最终效果就是打开一个 cpolar 的域名地址直接连接到 NAS 上的指定端口页面,而 IP 地址显示国内外省,非常安全。

 

后来搜索了一下找到了另一家内网穿透供应商飞鸽,只开通一个隧道的情况下一年的价格便宜一半,虽然域名很 low(飞鸽分配的是 ttut.cc,而友商给的是 cpolar.cn)但毕竟省钱我就先用着了。我暂时想不到家里的服务器还能往外提供什么服务,如果我需要更多的隧道的话可能会改用 cpolar 吧。不过这两天尝试下来,似乎是飞鸽的稳定一点,cpolar 三天两头出点证书或者隧道之类的问题。

注意飞鸽的价格是一条隧道,而 cplar 的价格是一个帐户

做个对比,选择很明确了。

 

 

那么接下来就是最后一个问题:部署在自己家的什么服务器上?

最无脑的选择当然是群晖 DS918+ 上的 Docker,我都已经调好了。但是本着 All-in-One = All-in-Boom 的原则,我不是很想把所有鸡蛋放在一个篮子里,尽管这个篮子是和路由器差不多重要的家庭基础设施,而且无论从存储还是硬件的角度都极易恢复。另外一点顾虑是,我的 NAS 并非 7×24 小时运行,而是 6×18+24 运行的——每个星期有六天会在凌晨 1:00 – 7:00 关机省电,因为我认为 99% 的情况下都不会在这个时间段访问互联网。
但是,Bitwarden 的浏览器插件有个毛病,在反复尝试同步失败后会自己注销登录。虽然我大部分电脑都不会在凌晨时间段开机,但我的 MacBook 是不关机的,只是晚上会睡眠,可是看起来这个睡眠状态下浏览器依然保持活动,每次都在 NAS 自动关机过夜后 Bitwarden 的登录被注销,需要手动输一遍密码才能登进去——还好,不用再输 2FA 密码。

除了 NAS 以外,我还有一台 7×24 小时工作的 NanoPi R2S,但是现在用的固件不带 docker,本着“能正常工作的东西就不要去动它”的精神先排除;一台闲置的 1L 小主机可以装 OpenWRT 或者黑群晖,四核心 i5 的性能也比 NAS 强不少,但这也意味着要增加约 12W 的家庭本底功耗。
我甚至动了一下买一部树莓派的念头,前几年有阵树莓派被炒得很贵,现在似乎好一点了,但一台兼顾功耗和性能的树莓派 3B+ 加上外壳也要大约 300 元。

另外必须要考虑的是,树莓派也好迷你主机也好,系统都是工作在 TF 卡上的(除非迷你主机装黑群晖,TF 卡只用来引导),那必然不如多盘灾备的群晖可靠。

好吧,列出来对比一下,我要么还是先在群晖上跑着算了。我看我什么时候忍不了每天登一次 Bitwarden。

那就这样吧,目前每年的实际花费是这个隧道的 49 元。

现在的效果如何呢?
从浏览器通过隧道网址打开 Vaultwarden 需要耗时 15~20 秒,看来那个网页版的资源有数 MB 之大,用 2~3Mbps 带宽的隧道就是需要这么久的。
登录和同步的过程都无比顺畅,同步一次仅需一到三秒钟。
容器的备份直接在群晖的 Container Manager 里进行,连同镜像一起打包不到 40MB。本地文件目录 data 打包备份不到 1MB。

用部署在本地的 Vaultwarden 代替原版 Bitwarden 的结果足够满意,现在只剩下我不愿意让价值六千元(本体加硬盘)的 NAS 多增加三分之一的损耗速度来保证浏览器插件的 24 小时工作这个问题了。再说吧。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注