【Umbrel】tailscale->UmbrelのSSL接続を中継するラズパイの作り方
Umbrelにtailscaleを入れて任意のUmbrelアプリ(例:BTC pay server)にリバースプロキシ接続するWebサーバをようと思ったけどUmbrelの動作を阻害しないようにアレコレするのが面倒くさい。なのでウチで余っているラズパイ3を中継専用マシンにしてみたら上手くできたので、その設置工程をメモした。
前提条件
以下の記事の1)から5)を参考にしてtailscaleのMagicDNSとHTTPSを有効にすること。6)以下は不要。
tailscale管理ページのログインは下記URLの右上にあるLog inから。
工程概要
1.Raspberry Pi ImagerでマイクロSDカードにラズパイOSを書き込む。
2.ラズパイ3起動してSSHでログイン
3.tailscaleをインストール
4.Caddy(Webサーバ)をインストール
5.Caddyが任意のUmbrelアプリへSSH接続を転送するように設定(リバースプロキシ)
6.Umbrelにて、SSL接続の転送を邪魔しないための設定を追加。
工程詳細
1.Raspberry Pi ImagerでマイクロSDカードにラズパイOSを書き込む。
下記ページでRaspberry Pi Imagerをダウンロードしてインストール。
このツールはUmbrelOSをマイクロSDカードに書き込みする場合にも使える。
Operating SystemにRASPBERRY PI OS LITE(64-BIT)を選択。
Storageに作業用PCに接続したマイクロSDカードライタを指定。
右下の歯車アイコンをクリックして、下記設定をする。
・Enable SSH をチェック入れる。Use password authenticationを選ぶ。
・Set username and passwordをチェック入れる。
任意のユーザ名とパスワードを入力。
・WiFiを使うならConfigure wifiをチェック入れる。
SSIDとPasswordを入力。Wifi countryをJPとする。
ここまでやったらSAVEをクリック。
WRITEをクリックしてマイクロSDカードにラズパイOSを書き込む。
書き込み完了したらRaspberry Pi Imagerを終了し、マイクロSDカードライタからマイクロSDカード抜いてラズパイ3に入れる。
<メモ>
Raspberry Pi Imagerを使ってUmbrelOSを書き込む場合、上記歯車アイコン後の設定は不要。というかやるな。試しにやってみたがWiFi接続できなかった。デフォルトアカウントはUmbrelが用意するので設定不要。過去のspotlight記事を参照してWiFi設定してください。
2.ラズパイ3起動してSSHでログイン
ラズパイ3の電源ONして起動。
私の自宅ネットワークではホームゲートウェイがDHCPによって自動的にIPアドレスを割り振るので、ラズパイ3に割り振られたIPアドレスでSSHログインした。
※ここは各自の環境にてIPアドレスを特定し、SSHログインしてください。
3.tailscaleをインストール
以下コマンドを実行する。
インストール工程が表示され、tailscaleがインストールされる。
curl -fsSL https://tailscale.com/install.sh | sh
※コマンドは以下ページより引用。
コマンド実行完了したら次は以下コマンドを実行する。
sudo tailscale up
ログインするためのURLが表示される。
このURLをWebブラウザにコピペ。
スマホやPCなどラズパイ3へ接続中継したい端末と同じアカウントでログインする。「Authorization successful」となったらWebページは閉じる。
ログイン完了するとSSH画面にてSuccess.と表示される。
以下コマンドを実行し、ラズパイ3のドメイン名を確認しておく。
確認するだけで証明書発行は必要ない。
tailscale cert
" "で囲まれた所がドメイン名。
4.Caddy(Webサーバ)をインストール
SSHにて以下コマンドを実行する。
インストール工程が表示され、Caddyがインストールされる。
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
※コマンドは以下ページより引用。
5.Caddyが任意のUmbrelアプリへSSL接続を転送するように設定(リバースプロキシ)
Caddyのインストール完了したら次は以下コマンドにてCaddyの設定ファイル(Caddyfile)を編集する。
cd /etc/caddy
sudo nano Caddyfile
Caddyfileの中身は以下
<さっき確認したラズパイ3のドメイン名>
reverse_proxy <UmbrelのローカルIPアドレス>:3003
私の実験用UmbrelのローカルIPアドレスが192.168.1.105、BTC pay serverのポート番号は3003番なので上記設定になっている。Webブラウザからこのドメイン名で接続するとBTC pay serverに転送されるようになる。
次は以下コマンドを実行。
CaddyでtailscaleからSSL証明書を取得できるようにするため、/etc/default/tailscaledファイルの末行に TS_PERMIT_CERT_UID=caddy を追加する。
cd /etc/default/
sudo nano tailscaled
以上の設定変更を反映するために以下コマンドを実行してcaddyとtailscaleを再起動する。
sudo systemctl restart caddy tailscaled
ここまで出来たら中継ラズパイの完成。
6.Umbrelにて、SSL接続の転送を邪魔しないための設定を追加
Umbrel v0.5.0は外からのSSL接続転送が上手くできなかった。
v0.5.1から転送可能とする対策が追加された。その対策をBTC pay serverに施す。
UmbrelにSSHログインする。
以下コマンドを実行。
cd ~/umbrel/app-data/btcpay-server
echo "PROXY_TRUST_UPSTREAM=true" > .env.app_proxy
次に以下コマンドを実行し、BTC pay serverを停止開始することで再起動して上記設定を有効にする。
cd ~/umbrel/scripts
./app stop btcpay-server
./app start btcpay-server
以上で対策完了。
あとはtailscaleに追加しているスマホやPCのブラウザで
https://ラズパイ3のドメイン名
とするとBTC pay serverのログインページに接続される。
<終わり>