使用群晖自建Bitwarden密码服务器

本文介绍如何在自己的群晖 Docker 上搭建第三方 Bitwarden(bitwarden_rs)密码管理服务器,并且让你随时随地通过你的 Mac、PC、iOS、Android 等各平台的 Bitwarden 客户端,以及 Web 浏览器、Chrome 扩展等访问你的 Bitwarden 服务器,编辑并同步你的密码。完全免费,没有密码条目数量的限制,甚至你可以开启两步验证、使用 YubiKey 等。

Bitwarden 介绍

Bitwarden 是一个跨平台的密码管理软件,类似于 1Password、EnPass、LastPass 等,支持几乎目前所有的平台(Mac、PC、iOS、Android、Web 浏览器、Chrome 扩展)。Bitwarden 是免费开源的,可以将服务端部署在自己的服务器上,比如群晖的 Docker 中。但官方的 Docker 镜像要求至少 2G 以上内存,对系统要求比较高。有人用 Rust 实现了 Bitwarden 服务器,项目叫 bitwarden_rs,并且提供了 Docker 镜像,这个实现更进一步降低了对机器配置的要求,并且 Docker 镜像体积很小,部署非常方便。

Bitwarden 的缺点:

  • 不能离线编辑
  • 客户端不能自动同步
  • 不能自动点击登录按钮

相比较,1Passwords 更为方便。

确认你的环境

首先你得有:

  • 支持 Docker 的群晖

如果你只是打算在内网中使用 Bitwarden,有群晖就可以了。如果你希望随时随地可以访问群晖上搭建的 Bitwarden 服务,你还需要以下东西:

  • 宽带(是否公网 IP 都可以)
  • 自己的域名(本教程以域名 b.penpenguanguan.com 为例)
  • 域名证书(可选)

域名证书可以在阿里云或 dnspod 申请有效期一年的免费证书,申请好以后下载备用。

为了安全,需要启用 SSL,而启用 SSL 需要证书。如果你不启用 SSL,Chrome 浏览器和 iOS 客户端将不能正常使用,其他浏览器和客户端没问题。

关于免费的域名证书及有效期:

如果你使用二级域名访问 Bitwarden 服务器,则你需要有此二级域名的证书或顶级域名的泛域名证书。而阿里云或 dnspod 不能申请免费的泛域名证书,常见的 Let’s Encrypt 免费泛域名证书有效期只有三个月,实际用在 Bitwarden 服务端上并不方便(因为你得每三个月手动更换一次证书文件),所以你需要为此二级域名单独申请一个免费的证书。

搭建 Bitwarden 服务端

如果你不启用 SSL 或只是打算在内网中使用 Bitwarden,那下面操作中与证书、SSL 相关的步骤可以忽略。

准备工作

群晖上安装 Docker

直接在群晖的套件中心搜索安装即可。

群晖中分别新建用于存放数据文件和证书文件的文件夹

文件夹的位置和名称你自己随意,我这里为 docker/bitwarden/data 和 docker/bitwarden/ssl

将证书文件放置于 docker/bitwarden/ssl 目录

解压之前下载好的证书文件压缩包,将 Nginx 文件夹下的 xxx.crt 和 xxx.key 两个文件放入 docker/bitwarden/ssl 目录。当然你也可以将这两个文件重命名,包括后缀。(这里以文件名 sslcert.crt 和 sslkey.key 为例)

不要使用除 Nginx 文件夹下的其他证书文件,因为其他证书文件不包含中间证书,会导致安卓版的 Bitwarden 客户端无法登陆。

关于证书文件的说明:

  1. xxx.crt 和 xxx.key 文件可以随意重命名,甚至使用任意的扩展名。虽然网上很多教程使用的是.pem 的扩展名
  2. xxx.crt 文件如果不包含中间证书信息,对除安卓以为的客户端不受影响
  3. 如果你使用不带中间证书的证书文件,又希望你的安卓客户端能正常使用,解决方法就是把中间证书安装到你的安卓手机上。安装方法见后文。

Docker 里安装并配置 Bitwarden

下载 Bitwarden 镜像

打开群晖 Docker,“注册表” 中搜索 bitwardenrs,双击 bitwardenrs/server 并选择 latest 下载。这个bitwardenrs/server是新版镜像,老版镜像是mprasil/bitwarden,老版镜像已被新版镜像替代并已停止更新。

配置容器参数

镜像下载完成后,到 Docker-映像,双击打开下载好的镜像,点击 “高级设置” 做如下配置。

添加数据文件的存储路径:“卷” 中添加 “文件夹路径”docker/bitwarden/data(根据你建的文件夹的路径修改);“装载路径”/data/(不能修改)

添加证书文件的存储路径:“卷” 中添加 “文件夹路径”docker/bitwarden/ssl(根据你建的文件夹的路径修改);“装载路径”/ssl/(不能修改)

修改 “端口设置”:本地端口 8080(你自己定义,只要不与群晖已使用的端口冲突即可);容器端口 80(不需要更改);类型 TCP(新版镜像有一个 3021 的容器端口不用管它或者可以删除掉,这个是 WebSocket 的默认端口,我也不知道啥用)

启用 SSL:添加环境变量 ROCKET_TLS,值 {certs="/ssl/sslcert.crt",key="/ssl/sslkey.key"}

此为可选项,为了安全,强烈建议启用。

其他按照默认

启动 Bitwarden 容器后,浏览器输入 https://群晖的 ip:8080(不启用 SSL 则为:http://群晖的 ip:8080),应该就可以进入登录页面了。

如果你只是打算在内网中使用 Bitwarden,那到这里就搭建完成了。除 Chrome 浏览器访问 Web 端不能登录和注册以及 iOS 客户端不能使用外,其他浏览器和客户端都可以正常使用 Bitwarden 了。

设置外网访问 Bitwarden 服务端

根据你的宽带是否有公网 IP,有两种方式:

  1. 有公网 IP:如果是动态公网 IP,你还需要做 DDNS 域名解析。有公网 IP 就比较简单,设置端口转发即可。访问 Bitwarden 服务端的速度取决于你宽带的上行速度。
  2. 无公网 IP:只能利用内网穿透的方式,比如 frp。相对要求高也麻烦一些,需要你自己搭建或购买内网穿透服务。由于有中转过程,访问 Bitwarden 服务端的速度还受到内网穿透服务器的影响。

查看自己的宽带是否有公网 IP 的方法:浏览器访问 http://ip138.com/查看你的 IP 地址,对比你的路由器中 WAN 获取到的 IP 地址,如果这两个 IP 地址一样,那说明是公网 IP,不一样则不是公网 IP。

现在新装宽带一般都不是公网 IP 了,如果是电信宽带可以打客服电话要求给公网 IP,实在不行工信部;移动宽带的话不用想了;联通宽带不清楚。

根据你的实际情况做相应的如下设置:

有公网 IP

先在你内网的任一台机器(路由器或者群晖等)设置好 DDNS 服务,当然你如果是固定的公网 IP 就不需要设置 DDNS。DDNS 的设置方法这里就不写步骤了,网上有很多教程。

然后在路由器上设置端口转发:外网的 28080 端口(你自己定义)转发到内网群晖 IP 地址的 8080 端口。

无公网 IP

我的宽带没有公网 IP,所以无法使用 DDNS,但我有使用 frp 做内网穿透,见我另一篇文章搭建 frp 内网穿透以访问 NAS

修改 frpc 客户端配置文件 frpc.ini,增加如下配置:

1 [Bitwarden_server]
2 type = tcp
3 local_ip = 192.168.99.100 # NAS 的内网 IP。如果 frpc 客户端搭建在 NAS 上,所以这里也可以直接 127.0.0.1,但是我用 127.0.0.1 会无法访问,改成实际的内网 IP 地址就好了
4 local_port = 8080 # 映射到 NAS 上的本地端口
5 remote_port = 28080 # 远程访问端口,你自己定义

搭建完成

经过以上设置,群晖上 Bitwarden 服务端的搭建就完成了。

浏览器:使用 https://b.penpenguanguan.com:28080

客户端:自托管环境服务器 URL 填写 https://b.penpenguanguan.com:28080

简化域名地址

这里说的简化域名地址,就是使用不带端口号的域名地址,其实是利用 https 默认的 443 端口。简化的地址也更好记,比如用 https://b.penpenguanguan.com 替代 https://b.penpenguanguan.com:28080 访问 Bitwarden 服务器。(个人建议使用域名+端口的方式,复杂的地址更安全)

同样,根据你的宽带是否有公网 IP,设置方式不一样。

有公网 IP

家庭宽带一般都封锁了 80 端口,但基本都没有封锁 https 的 443 端口。

所以我们仅需要在路由器上设置端口转发即可:外网的 443 端口转发到内网群晖 IP 地址的 8080 端口。

这样你的访问地址就变成 https://b.penpenguanguan.com 了。

网上很多教程说的是在群晖中设置反向代理,或者路由器上做端口转发到群晖的 443 端口,再在群晖中设置反向代理,其实这种情况并不需要在群晖中设置反向代理。

无公网 IP

待更新

群晖有公网 IP

前面的内容基于你的群晖处于局域网的环境拥有的是局域网 IP 地址,如果你的群晖有公网 IP 地址(IPv4 或 IPv6),简化域名就需要利用群晖的反向代理功能了。使用群晖的反向代理后,Bitwarden 环境变量中就不需要启用 SSL 了。

同样,如果是动态 IPv4 或 IPv6 地址,需要先设置 DDNS。

简化域名的设置步骤如下:

1、进入群晖的 “控制面板”-“Synology 应用程序门户”-“反向代理服务器”,如图添加一条 “反向代理服务器规则”

2、进入群晖的 “控制面板”-“安全性-“证书”,将你的域名证书导入群晖中,并配置刚才添加的反向代理服务器规则使用此证书

3、完成

IPv6 现在已经比较普及,电信移动联通的手机基本都能获取到 IPv6 地址,宽带也可以使用 IPv6 地址了。处于局域网环境的群晖也可以获取公网 IPv6 地址了。

群晖获取 IPv6 地址的方法:首先光猫上开启 IPv6,然后路由器开启 IPv6,具体的设置方法这里就不写步骤了,网上有很多教程。

IPv6 的 DDNS 的设置方法目前网络上的资料比较少,群晖自带的 DDNS 对 IPv6 支持也不是很稳定。观察了几天,我的移动宽带下的群晖获取到的 IPv6 地址一直是固定的,所以就直接解析了。但目前 IPv6 未完全普及,各软件在 IPv6 下不是很稳定,遂放弃了使用 IPv6。

  • 暂无优惠

    已有1人支付

本站所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担,如果该作者上传内容侵犯了您的权益,您可以通过 tousu@1aq.com 与我们建立联络。
尖刀资源网 » 使用群晖自建Bitwarden密码服务器