果報

二度寝して待つ

Tailscale Funnelで自宅のNextcloudにhttps接続する

Tailscaleには、Tailscaleネットワーク上の任意のTCPポートをインターネットに公開できる「Tailscale Funnel」という機能があり、これを利用することでインターネットから自宅サーバにTailnetのドメイン(xxx.tailXXX.ts.netというやつ)でアクセスできるようになります。

ということで、以下の記事で紹介したTailscale + Caddy + Nextcloudの環境で実際に試してみました。

text.yusukesakai.com

前提

作業環境は上述した記事のとおりです。Nextcloudには、Caddyで443ポートから80ポートにリバプロして接続しています。

  • 自宅サーバ: Ubuntu 22.04
  • Tailscale: v1.70.0(インストール済)
  • Nextcloud: snap版を使用して初期設定済

留意点として、Tailscale Funnelのコマンドはv1.52.0で変更があったようです。実際、昨年(2023年)の他サイトの記事でも参考にならなかったりしたので、公式サイトに掲載されている最新情報を今一度確認したほうがよいです。

tailscale.com

tailscale funnelのコマンドリファレンスはこちら。

tailscale.com

また、Tailscale Funnelの利用にあたり、以下のTailscaleの機能を予め有効化しておきます。

  • MagicDNS
  • HTTPS Certificates

いずれも、管理画面の「DNS」ページから設定できます。

Tailscale FunnelのACL追加

TailscaleのACLに、Funnelの設定を追加します。ここではtest@yusukesakai.comが管理するノードでFunnelを使えるようにします。

{
  "groups": {
    "group:funnel": ["test@yusukesakai.com"],
  },

  "nodeAttrs": [
    {
      "target": ["group:funnel"],
      "attr":   ["funnel"]
    }
  ]
}

なお、groupsnodeAttrsも、デフォルトではコメントアウトの状態で既に定義されていると思うので、それを編集するのがよいです。

Funnelの実行

以下のコマンドでFunnelを起動し、Nextcloudの80ポートに転送します。

$ sudo tailscale funnel --bg http://localhost:80
Available on the internet:

https://xxx.tailXXX.ts.net/
|-- proxy http://localhost:80

Funnel started and running in the background.
To disable the proxy, run: tailscale funnel --https=443 off

Funnelの通信は自動的にhttps化されるので、これでTailscaleをインストールしたクライアントでなくても、インターネットからhttps://xxx.tailXXX.ts.netで自宅サーバのNextcloudにアクセスできるようになります。

なお、--bgを付けずに実行することで、お試しで接続確認できます(Ctrl + Cで解除できます)。

また、Funnelが有効化されたノードには、Tailscaleの管理画面上でバッチが付きます。

補足

今回はTailnetのドメインをそのまま利用しましたが、AWSのCloudFrontと組み合わせることで、独自ドメインでアクセスすることもできるようです。

ただ、類似サービスのCloudflare Tunnelなら単独で同じことを実現できるので、Tailscale Funnelに独自ドメイン公開機能が実装されないと優位性が低いかなと感じました。

text.yusukesakai.com

text.yusukesakai.com