脱Tor!tailscaleでなんとかなる!① 対面レジ向け編
参考資料
https://tailscale.com/kb/1153/enabling-https/
この記事は上記の内容を日本語にしつつ、かみ砕きつつ、dockerに対応させた内容となります。
tailescaleには夢がある
tailescale、使ってますか。
umbrelOSにはAPPstoreが備わっており、クリックだけでtailscaleを導入できます。spotlightでも関連記事は既に投稿されています。
このずいずいさんの記事の中でUmbrel+tailscale+BTCPayサーバの使い方が解説されています。以下引用です。
注意点としてはTailscaleを使ってHTTP接続でBTCPayサーバーのログインページに入ろうとすると弾かれてしまうので、ローカル環境で接続→POSレジ画面のアドレスを控える→ローカルIPをTailscaleのIPと書き換え→ショートカット登録…といった感じです。
今回の記事はtailescaleの機能のうち、「Feature Previews」として実装されているものを使えばそもそもHTTPSで通信できるよ、という紹介となります。
追加コストは全くなし、です。
HTTPで通信した時のBTCPayのTop画面
上記の画像のように警告文が表示されログイン不能となります。
これは支払等に使うので通信に割り込まれないようにと安全側に振った設計なのだと思われます。でもVPN(tailescale)使ってるんだよなぁ。
Torを使うと休日の目覚めのように画面が中々動き出さなくなるため、対面販売のように効率よく多くのお客さんと取引したいガチな形態ほど、困るものと思われます。行列ダメゼッタイ。
せっかくLN決済を使うのだし、少しでも早くしたいところです。
それもなるべく簡単に。
TailescaleでHTTPS通信をする手順
1) admin画面のsettingを選択する。
画像は一部修正しています。
2) 「Feature Previews」から「MagicDNS」を選択する。
MagicDNSというのはtailescaleネットワーク内でDNSが使えるようになる機能のようです。
3) 「Glocal Nameservers」に適当なパブリックDNSを選択する。
画像ではgoogleの8.8.8.8を選んでいます。
どれを選んでもOKらしいですが試してはいません。
4) 再び「Feature Previews」の画面を表示させ「HTTPS」を選択
5) 表示される候補からお好みのものを選びEnableする
候補は「動物の名前+単語.ts.net」みたいですね。
6) UmbrelOS(ラズパイ)側での作業
ア) Umbrelにssh接続します。
ssh [ユーザ名]@[ラズパイのIPアドレス]
イ) tailescaleコンテナのコンテナIDを調べます。
docker ps
この画像の例では赤線の部分でコンテナIDが確認でき、「735a580961f5」であることが分かりました。
コンテナIDはそれぞれの環境で変わります。
ウ) コンテナの内部でコマンドを実行します。
① コンテナに入る
docker exec -it [イで判明したコンテナID] sh
余談ですが、tailscaleのコンテナ内にはbashがないようなので、shを使っています。(画像の①と①'部分参照)
② コマンドを実行する
tailescale cert [umbrelOSに付与されたtailescale内でのFQDN]
まず、tailescale certに何もつけずに実行します。
すると、上記1)ー5)の作業で割り振られた「FQDN」が分かります。(画像の②部分参照)
判明したFQDNを指定して再度tailescale certを実行します。(画像②‘部分参照)
エ) コマンドの実行結果を確認し、コンテナから出る。
うまくいくと画像のような感じになります。
コンテナから出るにはコンテナ内で次のコマンドを実行します。
exit
オ) dockerコンテナ群を再起動します。
sudo /home/umbrel/umbrel/script/stop
コンテナ群が停止しきり、操作が戻ってきたら、
sudo /home/umbrel/umbrel/script/start
7) admin画面のMachines項目で繋ぎたい端末の名前を確認する
ここからはtailescaleアドミンコンソールに戻ります。
この画像の例では100.83.4.128に繋ぎたいならnukoku-1を、100.65.21.8に繋ぎたいならwakokuを記憶しておきます。
8)tailescaleネットワークに接続中の端末で ブラウザのURL欄に「http://記憶した名前/」を入力すると該当する端末にアクセスできるようになっている。
BTCPayはUmbrel内ではポート番号3003となっているので、「http://記憶した名前:3003/」とすると即BTCPayのログイン画面にアクセスできます。
警告は表示されず、正常に動作するようになった!
本当に簡単なのか?この作業
ね。
でも作業を分割するとできそうな気がしてきませんか、だめですかそうですか。
トラブル時に対応できなくなると思います。どうしましょ。
そうだ!困ったらDHテレグラムに泣きつけばいいんじゃないか!(他力本願)
実際どれくらい改善するの?
わかりません。すいません。
それぞれの環境によると思います。
どうか各自でこれまでtailescale越しでは動かなかったアプリを試し、ご自分のやりたいことが改善されているか比較してみて下さい。
Tor使用の時と大して変わらないことも十分考えられます。
試した結果はコメント欄にでも残してもらえると助かります。
次回予告
今回の方法では同じtailscaleネットワークに接続された端末間でのみ通信ができる仕様のため、通常のwebサイト上に決済ボタンを設けるような使い方はできません。
次回はこの辺りを改善する方法をご紹介したいと思います。
私はWebの専門家じゃないとエクスキューズしておくけど、SSL証明書をBTCPay server側に持たせて置く必要あると思うけど、何もしなくていいの?
このページの「Provision TLS certificates for your devices」セクションでtailscale cert コマンド使って証明書を作ることが書いてあります。作った証明書をBTCPay serverに入れる?かしてようやくBTCPay serverとWebブラウザ間がhttpsになると思われ。
https://tailscale.com/kb/1153/enabling-https/
もしBTCPay serverに証明証をつかう機能がない(設定するところがない)なら同一tailscaleネット内に別ホストを用意し、nginxをいれてこの証明書取得をやってリバースプロキシとして機能させる必要があるのではと思いました。(もしくはラズパイUmbrelにリバースプロキシ用nginxを追加してそこでさばくとか。)