0%

Vaultwarden 是一个用 Rust 编写的非官方 Bitwarden 服务器实现。
Bitwarden 是一个密码管理器,可以在浏览器、Android 实现密码填充功能。使用自托管 Vaultwarden 服务器可以在离线环境下使用 Bitwarden 客户端、浏览器插件、网页端管理密码。
Vaultwarden 有提供 Docker 容器运行方式,也可以通过 Docker 容器提取预编译的二进制文件,但预编译的二进制文件并没有 Windows 版本,所以需要手动编译。
为了实现开箱即用和便携化,编译时尽可能选择静态链接、二进制文件无额外依赖的方法。
本文主要为 x86_64 架构编译,arm64 的方法可能不同,所有命令使用 PowerShell 执行。
文末放出了编译好的文件,可以先尝试使用后再决定是否要自行编译。

编译环境搭建

  1. 安装 C++ 编译工具链

参照 在 Windows 上针对 Rust 设置开发环境的教程,需要先安装 C++ 编译工具链。
可以安装 Microsoft C++ 生成工具Microsoft Visual Studio,然后启用 使用 C++ 的桌面开发 工作负载。

  1. 安装 Rust

首先通过官网下载 rustup-init.exe,使用默认设置安装 Rust:

1
2
3
$env:RUSTUP_UPDATE_ROOT="https://mirrors.cernet.edu.cn/rustup/rustup"
$env:RUSTUP_DIST_SERVER="https://mirrors.cernet.edu.cn/rustup"
.\rustup-init.exe
  1. 使用 vcpkg 安装 OpenSSL

Vaultwarden 还依赖 openssl/vendored,需要使用 vcpkg 安装:

1
2
3
4
5
6
7
8
9
# 克隆仓库
git clone https://github.com/microsoft/vcpkg
cd vcpkg
# 下载 vcpkg
.\bootstrap-vcpkg.bat
# 设置用户范围的 vcpkg 实例
.\vcpkg integrate install
# 安装 openssl 依赖库
.\vcpkg install openssl:x64-windows-static
  1. 编译 Vaultwarden

克隆 Vaultwarden,进入目录后编译:

1
2
3
4
5
6
7
8
9
10
git clone https://github.com/dani-garcia/vaultwarden
cd vaultwarden
# 设置使用镜像源下载编译依赖
$env:RUSTUP_UPDATE_ROOT="https://mirrors.cernet.edu.cn/rustup/rustup"
$env:RUSTUP_DIST_SERVER="https://mirrors.cernet.edu.cn/rustup"
# Rust 默认使用 openssl:x64-windows-static-md 库,将会依赖 msvcrXXX.dll
# 添加该标记以使用 openssl:x64-windows-static 库,不再依赖其他 dll
$env:RUSTFLAGS="-Ctarget-feature=+crt-static"
# 执行编译
cargo build --features sqlite --release

在本地使用,仅需要启用 sqlite 数据库支持,如编译成功,exe 文件会出现在 .\target\release\ 目录下。

Vaultwarden 使用

得到编译完成的 exe 文件后,还需要 web-vault 文件夹来提供网页内容。
按照 安装 web-vault 的教程,从 dani-garcia/bw_web_builds 下载 bw_web_vxxxx.xx.xx.tar.gz 文件解压得到 web-vault 文件夹,放在 vaultwarden.exe 同目录下。

然后创建 .env 配置文件:

1
2
3
4
5
6
7
8
9
10
11
# 禁用网站图标下载
DISABLE_ICON_DOWNLOAD=true
# 日志级别
LOG_LEVEL=warn

# 监听地址
ROCKET_ADDRESS=127.10.10.100
# 监听端口
ROCKET_PORT=8000
# 工作线程数
ROCKET_WORKERS=1

可以参考 .env.template 配置更多选项。

创建 data 文件夹,数据库和设置文件将会保存到这里。运行 vaultwarden.exe,在网页中打开 http://127.10.10.100:8000 可以开始注册账号使用。
要在浏览器插件或者程序上使用,需要在自托管环境设置中将服务器 URL 设置为 http://127.10.10.100:8000
如果需要开机启动或者后台运行,可以使用 WinSW 创建开机自启服务。
在仅使用浏览器插件进行填充的情况下,只有更新密码信息才会和服务端通信,服务端后台常驻不是很有必要。

以下是基于 vaultwarden 1.33.2Web-Vault v2025.1.1 编译打包的文件信息:

1
2
3
4
5
6
7
文件版本:
Vaultwarden 1.33.2
Web-Vault 2025.1.1

MD5 校验:
3f8efef99c93d2668e92011265cfc557 vaultwarden.exe
7cf14321f9ed3908b4f13b7282c95a7e vaultwarden_1.33.2.zip

点击下载 vaultwarden_1.33.2.zip

在 Windows 上,使用 WinSWXray-core 配置为开机自启服务,浏览器使用 SmartProxy 管理网络请求,可以避免 TUN 模式或系统代理对其他应用的影响。
但 Chrome 的翻译功能并不使用 SmartProxy 设置的代理,所以会出现谷歌翻译不可用。
解决方法是,使用 Xray 的 Dokodemo-Door 功能,将请求转发到代理。

配置文件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"inbounds": [
{
"tag": "google_apis",
"protocol": "dokodemo-door",
"listen": "127.0.10.100",
"port": 443,
"settings": {
"address": "translate.googleapis.com",
"port": 443
}
}
]
}

C:\Windows\System32\drivers\etc\hosts 内添加以下内容:

1
127.0.10.100 translate.googleapis.com

hosts 文件将谷歌翻译的域名指向 Xray 监听的地址,浏览器发起的请求将会由 Xray 处理,Xray 内部经过 routing 判断后,请求会转发到合适的出站代理。

dokodemo-door 配置里的 listen 写的不是 127.0.0.1,不会影响其他软件监听 443 端口。
事实上,127.0.0.0/8 都属于本地环回地址,可以使用多个地址来实现而不出现端口冲突。

阅读全文 »

在网上冲浪时发现 VirtualHere,想起以前在 老毛子 Padavan 固件 上看到 VirtualHere 和网络共享打印机相关的内容,但还没尝试过。
搜索了一下,发现 VirtualHere 是商业软件,免费许可仅允许共享一个设备。
USB over IPUSB over Network 关键词搜索,发现了 USB/IP PROJECT,最终找到了 usbipd-win 项目,准备搭建测试。

想到的使用场景:

  • 局域网共享专有 USB 设备,如加密狗等
  • 通过端口映射或者 ZeroTier,将 USB 设备通过互联网共享
    阅读全文 »