Tailscaleには、Tailscaleネットワーク上の任意のTCPポートをインターネットに公開できる「Tailscale Funnel」という機能があり、これを利用することでインターネットから自宅サーバにTailnetのドメイン(xxx.tailXXX.ts.net
というやつ)でアクセスできるようになります。
ということで、以下の記事で紹介したTailscale + Caddy + Nextcloudの環境で実際に試してみました。
前提
作業環境は上述した記事のとおりです。Nextcloudには、Caddyで443ポートから80ポートにリバプロして接続しています。
- 自宅サーバ: Ubuntu 22.04
- Tailscale: v1.70.0(インストール済)
- Nextcloud: snap版を使用して初期設定済
留意点として、Tailscale Funnelのコマンドはv1.52.0で変更があったようです。実際、昨年(2023年)の他サイトの記事でも参考にならなかったりしたので、公式サイトに掲載されている最新情報を今一度確認したほうがよいです。
tailscale funnel
のコマンドリファレンスはこちら。
また、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"] } ] }
なお、groups
もnodeAttrs
も、デフォルトではコメントアウトの状態で既に定義されていると思うので、それを編集するのがよいです。
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に独自ドメイン公開機能が実装されないと優位性が低いかなと感じました。