Tailscale + FunnelでLAN上のサーバーを公開する
Tailscaleを使うようになって神戸、ハノイの自宅に置いてあるサーバーに「いつでも、どこでも」気軽にアクセスできるようになって非常に快適になった。嬉しい!あとは「だれとでも」を実現すれば3つのモットーが達成されるわけだ(笑)
今回はTailscaleのFunnelという機能を使ってパブリックIPを持たないマシンをインターネット上に公開する手順をまとめておく。
Tailscaleによって発行されたIPはあくまでも自分のネットワーク内の利用に限られていたが、Funnelを利用するとインターネット上に公開することができてしまう。
Funnelでの公開にはいくつか制約があるのだが、それはこの際受け入れるしかない。
だって、パブリックIPのないサーバーをインターネット上に公開できるのだからそのメリットはちょっとした制約よりもずっと大きいのだから。
どういった制約があるのか箇条書きにしておく。
- DNS名は自分のtailnetのドメイン名に限られる
→ Tailnetが準備する中で変更はできるが自分の好きな名前にはできない - Funnelを利用して公開するために使用するポートは443, 8443, 10000の3つのみ
- Funnelを介するトラフィックはバンド幅により制約を受ける。
- macOS sandboxの制限によりファイル共有、ディレクトリ共有はオープンソースのみに制限される。
制約について理解できたら作業開始!
Tailnet name変更
Tailscaleに登録した直後はTailnet name (=Tailnetドメイン名)は任意の数字とアルファベットが入った覚えにくい名前になっているのでこれを覚えやすい名前に変更しておくことをお勧めします。
Tailnetの管理画面にログイン → DNSと進むと一番最初にTailnet nameというのがありますのでRename tailnetボタンを押せば変更プロセスに入ります。ホストからいくつか候補が提示されますのでその中から自分の好みのものを選びましょう。ランダムに生成されるので気長にポチポチやりながら好きなのが出るまで我慢強く(笑)
次にMagicDNSを有効にします。
これはSSH接続をするときにIP番号ではなくてホスト名で接続できるようにする機能です。
一々IP番号を覚えておけないのでこれは是非やっておきましょう。特に複数のマシンを管理するときには便利なはず。
そしてHTTPS機能も有効にしておきます。
Funnelでの公開はHTTPS接続必須となっていますが、これを有効にしておいて、あとはホスト側でチョイチョイとコマンドを叩くだけで( sudo tailscale cert http://xxxx.xxxxx.xxxx )証明書が発行されて自動でHTTPS接続が確立されます。
ここまでで下準備の完了です。
次に、Funnelを使えるようにするために管理画面のAccess Controlsを開いて下記のように編集していきます。
内容はこちらに詳しく説明されているので一度読んでおいて下さい。
構文に間違いがあるとその箇所を指摘してSaveさせてくれないので頑張ってください(笑)
あとはマシン上で以下のコマンドで設定を終わらせればOKです。
SSL通信の登録
$ tailscale cert node-name.tailnet-name.ts.net ←URLは適時変更してください
ローカルホストで80番ポートでをhttps化
$ tailscale serve https / http://127.0.0.1:80
443番ポートを使用する場合
$ tailscale funnel 443 on
設定内容を確認
$ tailscale funnel status
https://node-name.tailnet-name.ts.net (Funnel on)
|-- / proxy http://127.0.0.1:80
これでインターネットでの公開ができているはずです。
設定をミスってても大丈夫、以下のコマンドでリセットできます
$ tailscale serve reset
ハノイ自宅のLANにぶら下がっているラスパイで簡単なページを公開してみました。
公開したすぐはかなり重くてこりゃ使い物にならないかなと思ったのですが、1日経つとなんとか使えるレベルになってました。お試しあれ。
2件のピンバック
ffmpegでtimelapse動画を生成する | アジアの片隅から
2023年を振り返ってみた | アジアの片隅から