【Umbrel】VaultwardenをTorじゃなくてtailscaleで使いたい

【Umbrel】VaultwardenをTorじゃなくてtailscaleで使いたい

注意:Umbrel v0.5に対応していません。

パスワード管理ツールBitwardenのオープン実装VaultwardenがUmbrelアプリにあるが、こいつインストールしてクリックすると「Torで使ってね!」って言ってくる。
クライアント(Webブラウザ、スマホアプリ)とサーバ(Umbrel)間を暗号化したいならTorでなくてもtailscaleがあるじゃないかと思いついたのでやってみた。

1.TLS(SSL)証明書を発行

tailscaleならVPNなので端末間は暗号通信になるけどVaultwardenはそんなのわからないし、httpなのでアカウント登録させてくれない。なのでUmbrel側にTLS証明書を発行してhttpsにすればいい。tailscaleはtailscaleネットワークでのみ通用するTLS証明書発行する機能があるのでこれを活用する。
 具体的にはたがえる氏の以下の記事を参考にしてtailscale内で通用する証明書を発行する。

tailscaleのdockerコンテナに入ってすぐにtailscale cert コマンドを実行して証明書作成するとそのファイル2つは/に置かれる。これだとコンテナの外からファイルを見る事が出来ない。/var/libに移動すると見えるようになるので移動しておくこと。

2.リバースプロキシ用のnginxコンテナとnginx用設定ファイルの作成

Umbrelはhttpsの待受ポート番号443番を使っていない。
今回の目的はhttpsを使いたいわけなので、443番だけのリバースプロキシを用意してそこからVaultwardenに転送する。

/home/umbrel にrvnginxディレクトリを作成する。(名称はなんでも良いけど)
※/home/umbrel/umbrelには作らない。アップデートで消えるから。

そこにdocker-compose.ymlを作成する。
一応10.21.21.160をこのnginxに割り当ててるが、将来他のUmbrelアプリが使うかもしれない。

version: '3.7'

services:
  rvnginx:
    container_name: rvnginx
    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:
      default:
        ipv4_address: 10.21.21.160

ついで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/<Umbrelに割り当てられたドメイン名>.crt;
		ssl_certificate_key /data/<Umbrelに割り当てられたドメイン名>.key;

		server_name <Umbrelに割り当てられたドメイン名>;
		
		# VaultWarden
		location /vw/ {
		    proxy_pass http://10.21.21.46:8089/;
		}
	}

}

今後Vaultwarden以外のアプリに対して転送したいケースが出てくるかもしれない。その場合は location {} の箇所を増やす。後述のUmbrel用dockerネットワークに参加するので転送先はそのネットワークでのIPアドレスとする。IPアドレスはumbrel/.envファイルに記載されている。隠しファイルなのでls -alで確認してみてほしい。

3.コンテナを操作するスクリプトを作って、これを使ってリバースプロキシ開始

最後にこのコンテナを操作するためのスクリプトope.shを作成。
コマンドラインにいちいち打つかコピペしてもいいが、めんどうなので作った。

#!/bin/sh
docker-compose --file /home/umbrel/umbrel/apps/docker-compose.common.yml --file docker-compose.yml $@

作った後は chmod +x ope.sh とやって実行権限を与える。

以下のように実行すればこのリバースプロキシしてくれるコンテナがバックグランドで作成・起動する。

./ope.sh  up -d

ope.sh downでコンテナ停止・削除
ope.sh stopでコンテナ停止
ope.sh startでコンテナ起動

ここまで出来たら後はブラウザやBitwardenスマホアプリで以下のURLに接続すれば良い。
https://<Umbrelに割り当てられたドメイン名>/vw/

終わり

<メモ>
・以下のオプションを追加することでUmbrel用dockerネットワークにUmbrelアプリを追加することができる。Umbrelがアプリを操作する時に使っているappスクリプトも同じことをやっている。というかそこを参考にした。
 --file /home/umbrel/umbrel/apps/docker-compose.common.yml

・umbrel/docker-compose.yml や umbrel/nginx/nginx.confを同じ様な内容で編集しても同じことはできる。
できるがUmbrelアップデートで編集前に戻されてしまう可能性が高い。なので今回は別途分ける方法にした。

・このやり方でBTCPay serverに転送したい場合、locationを/ にする。それ以外だと上手く行かないっぽい。

Remaining : 0 characters / 0 images
100

Sign up / Continue after login

Related stories

Writer

甘いもの大好きメタボ猫。マイペースなのはしょうがない。

Share

Popular stories

【Umbrel】BlueWallet Lightning & tailscaleで便利で快適なLightningウォレットを作ろう!

273

【Umbrel】LNURLが使いたいから自分で環境つくってみた

146

【Umbrel】LNDのtls.certってどんな時使うの?

102