利用托管在cloudflare的域名实现https访问域网内Bitwarden
废话在前
使用Bitwarden管理密码已经有几年的时间了。从一开始用官方提供的服务到vps自建,又从vps自建到到期后本地搭建再内网穿透实现访问,再到现在的本地搭建仅局域网内访问。是不是感觉我给它加上了重重防护,一定存了很多不得了的密码和资料?其实不是这样的,之所以现在变成了仅局域网访问是因为前一段时间我用的内网穿透的方案是由cloudflare的Cloudflare Tunnel提供的。由于众所周知的原因Cloudflare在国内时长抽风,经常时不时的断联或是连不上。又因为Bitwarden的客户端或是浏览器插件在成功登录后设置了pin码或是生物识别认证后,下次开启就算连接不到自建服务器,依然可以在一定时间内读取其上一次登录时储存的信息。基于以上特点,我决定把他部署在本地内网环境中,只有在家连接到本地内网的情况下才能写入和读取,而去到外面的情况下依然可以读取只是不能写入,这样一来也基本符合我的使用需求。
而自建bitwarden服务,需要接口必须是https才能使用浏览器插件或是客户端连接上。于是我在万能互联网上一番收索找到了一个很好的解决方案,它既能使用我原来内网穿透时托管在cloudflare的域名,也能实现本地内网的https访问。
参考和说明
此方法主要参考:**自建Bitwarden通过cloudflare实现https访问**
作者对适用情况和原理作了说明:
本文的方案只针对局域网内使用bitwarden的情况。实现原理是使用ACME DNS验证方式验证域名所有权。
实操
- 首先来到我们托管域名的cloudflare,添加bitwarden服务域的DNS记录。类型选A,名称自定义,ipv4填
bitwarden在内网中的地址
,最后关闭代理状态

- 创建令牌。在域名的
概述
面板中,点击右边的获取您的 API 令牌
,进入创建令牌页。点击创建令牌
,并选择使用模板编辑区域DNS
:



按照下面图片所示的数字步骤创建访问权限,下方 区域资源
中的第7步选择刚刚设置的bitwarden的DNS域即可。
一直点击下一步直到完成,复制出api token,并保存好,下面步骤会用到。
- 安装caddy。ssh连接到bitwarden服务所在的本地服务器。按照这caddy官方文档的方法安装caddy,我的是debian所以方法如下:
1 | sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl |
由于我仔细看了一遍bitxeno’s notes的方法发现需要选上 caddy-dns/cloudflare
模块的caddy,我也不知道以上方法安装的caddy是否包含此模块所以我们还需替换一下程序。来到caddy下载页选择包含 caddy-dns/cloudflare
模块并对应系统的的caddy,下载后放到 /usr/bin
目录下替换一下。

- 配置caddy。打开caddy配置文件
/etc/caddy/Caddyfile
,在底下空白处增加下面的配置:
1 | bwrs.xxx.com { |
注意: bwrs.xxx.com
请改为第一步时在cloudflare中设置的域名, <my_api_token>
替换为第二步中创建的api令牌,记得吧<>也给删了,我当时没注意踩过坑。 localhots:8143
是bitwarden服务所在的内网ip和端口,按自己的情况替换。
重启一下caddy:
1 | systemctl restart caddy |
最后
如果以上都配置好无误且dns已经生效,在内网环境中访问你的域名即可使用bitwarden的服务,也可以使用它的浏览器插件或是连上WiFi后使用bitwarden的手机app。前提条件是在你的局域网环境中。