# Tailscale + FunnelでLAN上のサーバーを公開する

- リンク: https://reveil.ddns.net/tailscale-funnel/
- 公開日: 2023-07-13T21:49:07+09:00
- 作成者: reveil

> 2023年12月28日追記
> tailscaleのバージョンアップに伴い一部のコマンドに変更があり
> ます。この記事後半に記されているコマンドは最新バージョンでは動かないので各自ネット
> で情報収集して対応をお願いします。
> [https://tailscale.com/kb/1223/funnel](https://tailscale.com/kb/1223/funnel)

Tailscaleを使うようになって神戸、ハノイの自宅に置いてあるサーバーに「いつでも、どこ
でも」気軽にアクセスできるようになって非常に快適になった。嬉しい！あとは「だれと
でも」を実現すれば３つのモットーが達成されるわけだ（笑）

> [外出先から自宅ラズパイにsshする](https://reveil.ddns.net/tailscale/)

　

今回は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ボタンを押せば変更プロセスに入ります。ホストからいくつか候補が
提示されますのでその中から自分の好みのものを選びましょう。ランダムに生成されるので
気長にポチポチやりながら好きなのが出るまで我慢強く（笑）

![](https://reveil.ddns.net/wp-content/uploads/2023/07/image-26-600x225.png)

**次にMagicDNSを有効にします。これはSSH接続をするときにIP番号ではなくてホスト名で
接続できるようにする機能です。
一々IP番号を覚えておけないのでこれは是非やっておき
ましょう。特に複数のマシンを管理するときには便利なはず。

![](https://reveil.ddns.net/wp-content/uploads/2023/07/image-27-600x161.png)

**そしてHTTPS機能も有効にしておきます。Funnelでの公開はHTTPS接続必須となっています
が、これを有効にしておいて、あとはホスト側でチョイチョイとコマンドを叩くだけで（
sudo tailscale cert http://xxxx.xxxxx.xxxx )証明書が発行されて自動でHTTPS接続が確立
されます。

![](https://reveil.ddns.net/wp-content/uploads/2023/07/image-22-600x179.png)

ここまでで下準備の完了です。

次に、Funnelを使えるようにするために管理画面のAccess Controlsを開いて下記のように
編集していきます。
内容は[こちら](https://tailscale.com/kb/1223/tailscale-funnel/?q=funnel#setup)
に詳しく説明されているので一度読んでおいて下さい。

構文に間違いがあるとその箇所を指摘してSaveさせてくれないので頑張ってください（笑）

![](https://reveil.ddns.net/wp-content/uploads/2023/07/image-25-586x600.png)

あとはマシン上で以下のコマンドで設定を終わらせればOKです。

**SSL通信の登録**

    ```wp-block-prismatic-blocks
    $ tailscale cert node-name.tailnet-name.ts.net ←URLは適時変更してください
    ```

**ローカルホストで80番ポートでをhttps化**

    ```bash
    $ tailscale serve https / http://127.0.0.1:80
    ```

**４４３番ポートを使用する場合**

    ```bash
    $ tailscale funnel 443 on
    ```

**設定内容を確認**

    ```bash
    $ tailscale funnel status
    https://node-name.tailnet-name.ts.net (Funnel on)
    |-- / proxy http://127.0.0.1:80
    ```

これでインターネットでの公開ができているはずです。

**設定をミスってても大丈夫、以下のコマンドでリセットできます**

    ```bash
    $ tailscale serve reset
    ```

ハノイ自宅のLANにぶら下がっているラスパイで簡単なページを公開してみました。

公開したすぐはかなり重くてこりゃ使い物にならないかなと思ったのですが、１日経つと
なんとか使えるレベルになってました。お試しあれ。

この記事がお気に召しましたらシェア・いいねを！！
