【Umbrel】VaultwardenをTorじゃなくてtailscaleで使いたい
注意:Umbrel v0.5.3以上に対応
パスワード管理ツールBitwardenのオープン実装VaultwardenがUmbrelアプリにあるが、こいつインストールしてクリックすると「Torで使ってね!」って言ってくる。
クライアント(Webブラウザ、スマホアプリ)とサーバ(Umbrel)間を暗号化したいならTorでなくてもtailscaleがあるじゃないかと思いついたのでやってみた。
1.TLS(SSL)証明書を発行
tailscaleならVPNなので端末間は暗号通信になるけどVaultwardenはそんなのわからないし、httpなのでアカウント登録させてくれない。なのでUmbrel側にTLS証明書を発行してhttpsにすればいい。tailscaleはtailscaleネットワークでのみ通用するTLS証明書発行する機能があるのでこれを活用する。
具体的にはたがえる氏の以下の記事を参考にしてtailscale内で通用する証明書を発行する。
tailscaleのdockerコンテナに入って /var/libに移動する。
以下コマンド例
docker exec -it tailscale_web_1 sh
・コンテナに入った後
cd /var/lib/
tailscale cert
・上記コマンドを打つとドメイン名が分かる
Usage: tailscale cert [flags] <domain>
For domain, use "<あなたのtailscaleドメイン名>".
・証明書を発行
tailscale cert <あなたのtailscaleドメイン名>
2.vaultwardenアプリの接続待受IPアドレスを設定
Umbrel v0.5.3からVault wardenに割り当てられるUmbrel専用DockerネットワークのIPアドレスが固定されなくなった。リバースプロキシで転送するのに固定IPアドレスがないと不便なので固定IPアドレスを割当てる。
UmbrelアプリストアでVault wardenをインストールし、/home/umbrel/umbrel/scripts/appスクリプトで止める。その後Vault wardenのdocker-compose.ymlを編集、appスクリプトで再開する。
Vault wardenの停止
cd /home/umbrel/umbrel/scripts
./app stop vaultwarden
停止している間に/home/umbrel/umbrel/app-data/vaultwarden/docker-compose.ymlを編集する。
Vault wardenの開始
cd /home/umbrel/umbrel/scripts
./app start vaultwarden
docker-compose.ymlの末尾に以下3行を追加。インデント(行頭からの空白)は他と揃えること。
networks:
default:
ipv4_address: 10.21.21.229
こんな感じになる。
編集完了したらappスクリプトで再開。
3.リバースプロキシ用のnginxコンテナとnginx用設定ファイルの作成
Umbrelはhttpsの待受ポート番号443番を使っていない。
今回の目的はhttpsを使いたいわけなので、443番だけのリバースプロキシを用意してそこからVaultwardenに転送する。
/home/umbrel にrvnginxディレクトリを作成する。(名称はなんでも良いけど)
※/home/umbrel/umbrelには作らない。アップデートで消えるから。
/home/umbrel/rvnginxにdocker-compose.ymlを作成する。
一応10.21.21.230をこのnginxに割り当ててるが、将来他のUmbrelアプリが使うかもしれない。
version: '3.7'
services:
main:
image: nginx:1.17.8@sha256:380eb808e2a3b0dd954f92c1cae2f845e6558a15037efefcabc5b4e03d666d03
volumes:
- /home/umbrel/rvnginx:/etc/nginx
- /home/umbrel/umbrel/app-data/tailscale/data:/data:ro
restart: on-failure
stop_grace_period: 30s
ports:
- "443:443"
networks:
umbrel_main_network:
ipv4_address: 10.21.21.230
networks:
umbrel_main_network:
external: true
同じく/home/umbrel/rvnginxにnginx.confを作成する。
以下のURLで同一tailscaleネットワークに追加しているPCやスマホから以下のURLで接続できるようにした。
https://<Umbrelに割り当てられたドメイン名>/vw/
# Warning: it's not recommended to modify these files directly. Any
# modifications you make can break the functionality of your umbrel. These files
# are automatically reset with every Umbrel update.
user nginx;
worker_processes 1;
error_log /dev/stdout info;
events {
worker_connections 1024;
}
http {
access_log /dev/stdout;
proxy_read_timeout 600;
default_type application/octet-stream;
server {
listen 443 ssl;
ssl on;
ssl_certificate /data/<割り当てられたドメイン名>.crt;
ssl_certificate_key /data/<割り当てられたドメイン名>.key;
server_name <割り当てられたドメイン名>;
# VaultWarden
location /vw/ {
proxy_pass http://10.21.21.229:8089/;
}
}
}
今後Vaultwarden以外のアプリに対して転送したいケースが出てくるかもしれない。その場合は location {} の箇所を増やす。
4.リバースプロキシ開始
以下のように実行すればこのリバースプロキシしてくれるコンテナがバックグランドで作成・起動する。
cd /home/umbrel/rvnginx
コンテナの開始
docker-compose up -d
コンテナの停止
docker-compose stop
ここまで出来たら後はブラウザやBitwardenスマホアプリで以下のURLに接続すれば良い。
https://<Umbrelに割り当てられたドメイン名>/vw/
終わり
<メモ>
・このやり方でBTCPay serverに転送したい場合、locationを/ にする。それ以外だと上手く行かないっぽい。