SilverBullet をどこからでも安全に!Tailscale で HTTPS 化して接続エラーを解消する方法

SilverBullet の環境構築が終わり、サーバー上のブラウザ(localhost)からは無事に接続できた。しかし、いざ他の PC やスマホからアクセスしようとすると、無情なエラー画面が表示されて繋がらない……ということがあります。

“You are likely accessing SilverBullet via HTTP (rather than HTTPS or localhost), this is not a supported configuration. See https://silverbullet.md/TLS”

silverbuleltで外部から接続したときのセキュアエラー画面

これは SilverBullet がセキュリティを重視し、「セキュアな通信(HTTPS)以外での外部アクセスを遮断する」 仕様になっているためです。

この記事では、VPN サービスである Tailscale を活用し、難しい証明書の設定抜きで SilverBullet を HTTPS 化し、どこからでもアクセスできるようにする方法を解説します。

silverbulletのセットアップはこちら : SilverBullet環境構築:Ubuntu(サーバ)【Linux/Docker編】

準備するもの

  • SilverBullet がインストール済みの Ubuntu サーバーなど(GNU環境)
  • Tailscale ログイン用のアカウント(Google, GitHub, Microsoft など)
  • アクセス元の PC やスマホ(こちらも Tailscale をインストールします)

ステップ 1:Tailscale のインストールとセットアップ(サーバー側)

まずは、SilverBullet が動いている Ubuntu に Tailscale を導入して、ネットワークに参加させます。

インストールコマンドを実行

ターミナルで以下のコマンドを叩きます。

curl -fsSL https://tailscale.com/install.sh | sh

Tailscale を起動してログイン

sudo tailscale up 

実行すると認証用 URL が表示されます。それをブラウザで開き、自分のアカウントでログインしてください。これでサーバーが Tailscale ネットワーク(Tailnet)の一員になります。

ステップ 2:管理画面で HTTPS 機能を有効にする(確認)

Tailscale には、自動で Let’s Encrypt の証明書を発行してくれる便利な機能があります。

  1. Tailscale管理コンソールにアクセスします。
  2. DNS 設定 を開き、以下を確認・設定してください。
    • MagicDNS: Enabled になっていることを確認。

これで、あなたのマシンに <machine-name>.tail-net.ts.net のような専用ドメインが割り振られ、HTTPS 通信の準備が整います。(外部からはこの<machine-name>.tail-net.ts.netをブラウザで打つなどして接続します)

ステップ 3:tailscale serve で HTTPS 化する!(サーバー側)

いよいよ SilverBullet を HTTPS で公開します。Tailscale には標準で「簡易リバースプロキシ機能」が備わっています。

SilverBullet がポート 3030 で動いている場合、以下のコマンドを実行するだけで、Tailscale が「自分専用のドメイン + HTTPS」を自動で割り当て、内部の HTTP 通信を HTTPS へと変換してくれます。

sudo tailscale serve --bg http://localhost:3030
--bg フラグについて

このフラグをつけることで、ターミナルを閉じてもプロキシ機能が背後で動き続けます。

ステップ(おまけ):sudoを省略

tailscaleを操作するとき毎回 sudoを打つのが面倒な場合は、以下のコマンドでtailscaleのオペレータ登録をしておくと便利です。

sudo tailscale set --operator=$USER

接続の確認

設定が完了したら、正しく HTTPS 化されているか確認しましょう。

# 現在の公開状況を確認
tailscale status

ページの確認

# ページがうまく起動できているか確認 <machine-name>は適宜置き換えてください
curl http://<machine-name>.tail-net.ts.net
# 出力例
my-wiki@tukumo-server:~/my-silverbullet$ sudo tailscale serve --bg http://localhost:3030
Available within your tailnet:

https://tukumo-server.tail~~~~.ts.net/
|-- proxy http://localhost:3030

Serve started and running in the background.
To disable the proxy, run: tailscale serve --https=443 off
なぜこの設定が必要なの?

SilverBulletは、オフラインでも動くようにService Workerというブラウザの機能を使っています。
この機能は、悪意のある第三者が通信を傍受して偽のスクリプトを流し込むのを防ぐため、「安全な接続(HTTPS)」でしか動かないという厳しいルールがあるからです。

ステップ 4:他のPCからアクセスする(アクセス側)

ステップ3まででサーバ側の設定が完了しました。次にアクセスする側の設定です。

A- 接続側にtailscaleを入れてログインする

A-1 for linux PC

linuxのPCから接続する場合は、サーバ側のtailscaleの導入と同様に、tailscaleのインストールを行ってください。

(検証でき次第ほかの方法を追記予定)

B- 接続してみる

接続したいPCからbrowserにtailscaleのアドレスを打ち込めば接続できます。

http://<machine-name>.tail-net.ts.net

# <machine-name>はそれぞれ置き換えてください 
# tailscaleのページ、または、以下のコマンドでサーバの名前を確認できます。
tailscale status
tailscaleでsilverbulletに接続した例

tailscaleで接続した例

最後に

お疲れ様でした!これで、場所を選ばず、かつセキュアに自分だけの知識ベース「SilverBullet」へアクセスできる環境が整いました。

Tailscale Serve を使えば、複雑なネットワーク設定や SSL 証明書の管理に頭を悩ませることなく、たった一行のコマンドで「自分専用の HTTPS 空間」を手に入れることができます。

もし、まだ SilverBullet 自体のセットアップが終わっていない方や、土台となる Docker Compose の準備が必要な方は、ぜひ以下の記事も参考にしてみてください。