CC for Biz
2026/10/26Claude Code
導入・運用セキュリティ

Tailscale Funnelとは|Serveとの違いと使い方

Tailscale Funnelとは|Serveとの違いと使い方

「Tailscale Funnelって何?」「Serveと何が違うの?」「手元のサーバーをインターネットに出して大丈夫?」——Tailscaleを使い始めて、コマンド一覧に funnel と serve が並んでいるのを見たとき、多くの人がこう迷います。

結論から言うと、Tailscale Funnelは手元の端末で動くサービスを、インターネットの誰にでも見えるURLで公開する機能です。tailnet(自分のTailscaleネットワーク)の中だけに見せるのがServe、外の全員に見せるのがFunnelで、名前は似ていても公開範囲は正反対です。手軽な分、相手が誰かを確かめる仕組みは自分で用意する必要があります。

株式会社Fyveは、事務所のMac miniでAIの無人ジョブを毎日動かし、外出先からはTailscale経由で入っています。この記事では、Tailscaleの公式ドキュメント(2026年10月26日に確認)をもとにFunnelの仕組み・条件・使い方を整理し、私たちがあえてFunnelを使っていない理由も、実機の状態を見ながらお伝えします。

結論:Tailscale Funnelは「手元のサービスをインターネット全体に出す」機能

先に要点を3つにまとめます。

  • 何をするか:自分の端末で動くWebサーバー・ファイル・フォルダを、https://(端末名).(tailnet名).ts.net という形のURLでインターネットに公開する
  • Serveとの違い:Serveはtailnetの中だけ、Funnelはインターネット全体。Funnelで届くアクセスには、相手が誰かを示す情報が付かない
  • 使う条件:Tailscale v1.38.3以降・MagicDNS・HTTPS証明書・ポリシーファイルの許可の4つ。ポートは443・8443・10000の3つだけ。公式の表記では現在もベータ

ルーターのポートを開けずに外へ公開できるのは大きな利点です。一方で、公開したURLには世界中の誰でも届きます。「手軽に開ける」と「閉じ忘れる」はセットで起きるので、使うときは止め方まで決めてから開くのが安全です。

Tailscale Funnelとは:仕組みと公開できるもの

公式ドキュメントは、Funnelを「インターネットから、tailnet内の端末で動くローカルのサービスへ通信を流す機能」と説明しています。仕組みを順に見ると、なぜポートを開けなくてよいのかが分かります。

通信の流れ:中継サーバーは中身を読めない

公式ドキュメントによると、Funnelの通信は次の順に流れます。

  1. 訪問者がFunnelのURLを開くと、DNSが返すのはあなたの端末のIPアドレスではなく、Funnel用の中継サーバー(relay)のアドレス
  2. 中継サーバーは、Tailscaleの経路を使ってあなたの端末までTCPの通り道(プロキシ)をつなぐ
  3. 暗号化(TLS)をほどくのは、あなたの端末のTailscale。ほどいたリクエストを手元のサービスに渡す
  4. 返事は暗号化されて、同じ通り道を戻る

公式は「Funnelの中継サーバーは、このプロキシを通るデータを復号できない」と明記しています。端末のIPアドレスもインターネットからは見えません。ルーターのポート開放やDDNS(動的なIPに名前を付ける仕組み)が要らないのは、この中継があるからです。

ただし「中継が中身を読めない」ことと「誰でも届く」ことは別の話です。URLを知っている人、あるいは推測した人は、誰でもあなたの手元のサービスに届きます。

Funnelで公開できるもの

CLIのヘルプ(tailscale funnel --help)によると、公開する対象(target)には次を指定できます。

  • ポート番号:3000 のように書けば、手元の 127.0.0.1:3000 で動くHTTPサーバーを公開する(いちばん多い使い方)
  • URL:http://localhost:3000/foo のようにパスまで指定できる。自己署名証明書のHTTPSサーバーは https+insecure://localhost:8443
  • ファイル・フォルダ・テキスト:静的なファイルをそのまま配る
  • Unixソケット:Linux・macOS・BSDのみ

このほか、TCPをそのまま中継する --tcp、TLSをほどいたTCPを中継する --tls-terminated-tcp も用意されています。

Tailscale ServeとFunnelの違い:Serveはtailnetの中だけで身元ヘッダーが付き、Funnelはインターネットの誰でも届き身元ヘッダーが付かない
この記事を読んでいるあなたへ無料プレゼントClaudeのこの5つの設定、今すぐ見直した方がいい共有・学習・入力・権限・委任。事故が起きるのはこの5つだけ(全28ページ)
見落としやすい共有リストは3つある(3つ目は画面の下)学習をオフにしても残る、公式の例外条項権限モード6つの違いと、Shift+Tabでの切り替え方
中身のプレビューを見る ↓登録すると、過去の特典もまとめて受け取れます(PDF 18点・合計468ページ + すぐ使えるzip素材 3点)

Tailscale FunnelとServeの違い(比較表)

Funnelを理解するいちばんの近道は、兄弟機能のServeと並べることです。公式ドキュメント(Serve・Funnelの各ページ)の記述を表にしました。

項目

Tailscale Serve

Tailscale Funnel

公開範囲

tailnetの中の端末だけ

インターネットの誰でも

相手の身元

リクエストに Tailscale-User-Login などのヘッダーが付く

付かない(公式に「Funnelの通信には含まれない」と記載)

アクセス制御

tailnetのアクセス制御ルールがそのまま効く

Funnelを「使える人」はポリシーで絞れるが、訪問者は絞れない

使えるポート

特に絞られていない

443・8443・10000のみ

URLの形

tailnetのドメイン(ts.net)

同じ(ts.net)。独自ドメインは使えない

HTTPS証明書

必要

必要

帯域

記載なし

変更できない帯域の上限がある(値は非公開)

状態

—

ベータ

Serveには「誰が来たか」が付き、Funnelには付かない

表の中で、実務でいちばん効く違いは相手の身元です。Serveはリクエストを手元のサービスへ渡すとき、Tailscale-User-Login(ログイン名)・Tailscale-User-Name(表示名)・Tailscale-User-Profile-Pic(プロフィール画像のURL)を付けます。外から同じ名前のヘッダーを送って成りすます手口は、Serveが受け取った時点で取り除きます。

Funnelの通信には、このヘッダーが付きません。つまりFunnelで出したサービスは、来た相手が誰かを自分で確かめる必要があるということです。社内向けの管理画面をFunnelで出して「Tailscaleを通しているから安全」と考えるのは、ここで間違えます。社内だけに見せたいならServeを使います。

同じポートは、ServeとFunnelのどちらか一方だけ

1つのポートをServeとFunnelで同時に使うことはできません。公式は「最後に実行したコマンドで、そのポートが非公開(serve)か公開(funnel)かが決まる」と書いています。Serveで社内に見せていたポートに、うっかり tailscale funnel を実行すると、そのポートはインターネットに出ます。コマンドを打つ前に、どちらの名前を打っているかを一度見直してください。

Tailscale Funnelを使う条件(2026年10月26日時点)

必要な条件4つ

公式ドキュメントが挙げる条件は次の4つです。

  1. Tailscale v1.38.3以降
  2. MagicDNSが有効(tailnet内の端末に名前で届く仕組み)
  3. HTTPS証明書が有効
  4. ポリシーファイルに funnel のノード属性がある(誰がFunnelを使えるかを決める)

4つ目の属性は、管理画面のアクセス制御のページで「Add Funnel to policy」を選ぶと追加されます。追加される内容は次のとおりです。

"nodeAttrs": [
  {
    "target": ["autogroup:member"],
    "attr":   ["funnel"],
  },
],

既定の対象は autogroup:member、つまりtailnetの全メンバーがFunnelを使える状態です。メンバーが複数いる会社のtailnetでは、ここを特定の人やタグ付きの端末に絞ることを検討してください。ポリシーファイルを書き換えられるのは、Owner・Admin・Network adminの役割の人だけです。

なお公式によると、Funnelは既定では無効です。CLIで有効にすると承認の画面が開き、承認すると証明書とポリシーの属性が作られます。

使えるポートは443・8443・10000だけ

Funnelが待ち受けられるのは443・8443・10000の3つだけです。手元のサービスが3000番で動いていても、外から見えるのはこの3つのどれか(既定は443)になります。通信はTLSで暗号化されたものに限られ、平文のHTTPでは公開できません。

Macでは、入れている版によって使えることが違う

MacのTailscaleには、App Store版・Standalone版(公式サイトのpkg)・オープンソース版(tailscaled)の3種類があります。Funnelについて、公式ドキュメントの書き方は次のとおりです。

  • Funnelのページ:Macでファイル・フォルダを共有するのはオープンソース版だけ。ポートの共有は、App Store版かStandalone版のシステム拡張でできる
  • Macの版を比べるページ:表の「Funnel」の行は、App Store版・Standalone版ともに「no」、オープンソース版だけ「yes」

同じ公式ドキュメントの中で、ポートの共有ができるかどうかの書き方が割れています。確実に言えるのは「ファイル・フォルダの公開にはオープンソース版が要る」ことです。App Store版・Standalone版でポートを公開したい場合は、手元で tailscale funnel --help と承認画面まで進めるかを確かめてから計画に組み込んでください。

料金:全プランで使えるが、無料のPersonalは非商用

公式ドキュメントは、Funnelを「すべてのプランで利用できる」としています。ただし、無料のPersonalプランは非商用の利用に限られます。業務でFunnelを使うなら、会社として有料プランで契約するのが前提です。プランごとの違いは、別の記事で詳しくまとめています。

Tailscaleの料金|無料でどこまで使えるか
Claude CodeTailscaleの料金|無料でどこまで使えるか

Tailscale Funnelの使い方(3ステップ)

ステップ1:手元でサービスを動かし、Funnelを有効にする

まず公開したいサービスを手元で動かします。開発中のWebアプリなら、たとえば3000番で起動しておきます。そのうえで tailscale funnel を実行すると、初回は承認の画面のURLが表示されます。ブラウザで開いて承認すると、HTTPS証明書とポリシーファイルの属性が自動で用意されます。

ステップ2:公開する

# 手前で動かしたまま公開する(Ctrl+Cで止まる)
tailscale funnel 3000

# 裏で公開し続ける
tailscale funnel --bg 3000

実行すると、公開先のURL(https://(端末名).(tailnet名).ts.net)が表示されます。このURLを相手に渡せば、相手はTailscaleを入れていなくても開けます。Linuxでは公式の例にならって sudo を付けます。Macのアプリ版では、アプリに入っているCLIを使います。

🔴 --bg の扱いには注意が要ります。公式のCLIリファレンスによると、裏で動かしたFunnelは、端末の再起動や tailscale down/up をはさんでも、止めるまで残ります。「試しに開いただけ」のつもりでも、明示的に止めない限り公開は続きます。

ステップ3:状態を見る・止める

# いま何を公開しているかを見る
tailscale funnel status

# 公開を止める(オンにしたときのコマンドの末尾に off)
tailscale funnel --https=443 3000 off

# Funnelの設定をすべて消す
tailscale funnel reset

止めるときは、オンにしたときと同じフラグを付けて末尾に off を足します(対象の指定は省略できますが、フラグは省略できません)。どう開いたか覚えていないときは、reset で全部消すのが確実です。止めたあとに tailscale funnel status を実行し、「No serve config」と出れば何も公開していない状態です。

公開した直後につながらないとき

公式ドキュメントが挙げる、つまずきやすい点が2つあります。

  • DNSの反映に最大10分:新しいFunnelのURLは、公開のDNSに載るまで最大10分かかることがある。すぐに開けなくても、少し待ってから試す
  • 証明書の発行回数の上限:証明書を短い間に何度も取り直すと、発行元(Let's Encrypt)の回数制限にかかり、公式によると最大34時間待つことになる。設定を何度も消しては作り直す試し方は避ける

帯域にも上限があり、公式は「変更できない上限がある」とだけ書いています。動画や大きなファイルを大勢に配る用途には向きません。

Tailscale Funnelの使いどころ(公式の5つの例)

公式の使い方の例のページには、次の5つが載っています。

使いどころ

コマンドの例

向いている場面

ファイルを渡す

tailscale funnel /tmp/public

外部サービスを使わずに、手元のフォルダから1回だけ渡す

静的サイトを見せる

tailscale funnel /tmp/static-site

HTML・CSSだけのサイトの試作を見せる

開発中の画面を見せる

tailscale funnel 3000

手元で動かしている途中の画面に、レビューをもらう

Funnel用の端末を共有する

tailscale funnel 8080+SSHのポート転送

複数人で決まったURLを使い回す

Webhookを受ける

tailscale funnel 3000

GitHubやStripeからの通知を、クラウドに上げる前に手元で試す

共通しているのは、短い間だけ、決まった相手に見せる用途だという点です。ずっと公開しておくWebサイトや、社員が毎日使う社内システムの入口は、Funnelの想定から外れます。前者は通常のホスティング、後者はServeかTailscaleの中だけに置くのが筋です。

Tailscale Funnelで公開する前に決めておく5つのこと

Funnelは1行で開けるぶん、開ける前の判断が抜けやすい機能です。私たちが自社のサーバーで「外から届く入口」を作るときに確かめている点を、Funnel向けに5つにまとめました。

1. 来た相手を、サービスの側で確かめられるか

Funnelの通信には身元のヘッダーが付かないので、ログインや合言葉はサービスの側に必要です。Webhookを受けるなら、送り元が付ける署名を必ず検証します。StripeもGitHubも、送ってきたリクエストが本物かを署名で確かめる方法を公式に案内しています。署名を見ずに受け付けると、URLを知った第三者が偽の通知を送れてしまいます。

2. 手元のサービスが、外向きに作られているか

開発用のサーバーは、エラー時に内部の情報(ファイルの場所や設定値)を画面に出すことがあります。手元だけで使う前提の作りのまま公開しないでください。Serveの公式ドキュメントも、手元のサービスは localhost だけで待ち受けるよう勧めています。Tailscale以外の経路から直接届かないようにするためです。

3. いつ閉じるかを決めたか

レビューが終わった、Webhookの試験が終わった、というタイミングで off か reset を実行します。--bg で開いたものは再起動しても残るので、「開けた日」と「閉じる日」をセットで決めておくと閉じ忘れを防げます。

4. 誰がFunnelを使えるかを絞ったか

既定ではtailnetの全メンバーがFunnelを使えます。人が増えたtailnetでは、誰かが自分の端末からサービスを公開していても、管理する側が気づきにくくなります。必要な人や端末に絞っておきます。

5. Tailscaleを更新しているか

Tailscale自体にも脆弱性は見つかります。2026年に公開されたセキュリティ情報のうち、TS-2026-008は「ServeまたはFunnelを動かしている端末」に関するものでした。Funnelを使うなら、更新を止めないことが前提になります。Tailscale全体の安全性と、使う側が塞ぐべき穴は別の記事でまとめています。

Tailscaleの安全性|通信の仕組みと自分で塞ぐ穴
Claude CodeTailscaleの安全性|通信の仕組みと自分で塞ぐ穴
Tailscale Funnelで公開する前に決める5つのこと:相手の確認・外向きの作り・閉じる日・使える人の絞り込み・更新

私たちのMac miniでTailscale Funnelを使っていない理由

私たちの事務所のMac miniは、AIの無人ジョブ(記事の下書き、発信の準備、通知など)を1日に何本も動かしています。外出先からは、Tailscale経由の通常のSSHで入っています。導入の経緯は別の記事に書きました。

Tailscale使い方|Mac miniへ外出先から安全に接続
Claude CodeTailscale使い方|Mac miniへ外出先から安全に接続

実機の状態(2026年10月26日時点)

この記事を書くにあたって、Mac mini上で次のコマンドを実行しました。

$ tailscale version
1.98.8

$ tailscale funnel status
No serve config

$ tailscale serve status
No serve config

FunnelもServeも何も設定していない状態です。入れているのは公式サイトのpkg(Standalone版)で、アプリに入っているCLIで tailscale funnel --help は表示されます。使えない状態なのではなく、使わないと決めている状態です。理由は3つあります。

理由1:外から受け取る仕事が、そもそも無い

Mac miniのジョブは、すべて自分から取りに行く作りにしています。macOSの定期実行の仕組み(launchd)で決まった時刻に起動し、最初に作業用のリポジトリを最新の状態にそろえてから仕事を始めます。結果の報告もSlackへ自分から送ります。外部のサービスから通知を受け取る入口が要らないので、Funnelで入口を開ける理由がありません。

これは偶然ではなく、意図してそうしています。外から届く入口を1つ開けると、その入口を守る仕事(来た相手の確認、更新、閉じ忘れの点検)が1つ増えます。Webhookで即時に動く便利さより、入口が無いことの安心を取りました。定期実行の仕組みについては、次の記事にまとめています。

launchdとは|読み方とMacで定期実行する使い方
Claude Codelaunchdとは|読み方とMacで定期実行する使い方

理由2:入れている版では、ファイルの公開ができない

前述のとおり、Macでファイル・フォルダをFunnelで公開できるのはオープンソース版だけです。私たちのMac miniはStandalone版なので、「手元のフォルダをそのまま渡す」使い方はできません。オープンソース版へ入れ替えることはできますが、そのためにサーバーへ道具を増やすことになり、GUIや自動更新も失います。サーバーに入れる道具をできるだけ増やさない方針なので、見合わないと判断しています。

理由3:入口は、開けた人が閉じ忘れる

以前、Tailscaleを入れて安心していたあとで外から届く経路を調べたところ、Tailscaleとは関係のない経路が開いていたことがあります。Tailscaleの外に開いた穴は、Tailscaleでは守れません。この経験から、使っていない入口は最初から開けないことにしています。--bg のFunnelは再起動しても残るので、無人で動き続けるサーバーとは特に相性がよくありません。

逆に、もしFunnelを使うなら、次の条件をそろえます。使うのは手元の開発用のMacで、無人のサーバーではないこと。期間は試験の間だけにすること。Webhookなら署名を検証すること。この3つがそろわない用途には、Funnelを使いません。

Tailscale Funnelでよくある質問

Tailscale Funnelは無料で使えますか

公式ドキュメントでは、Funnelはすべてのプランで利用できるとされています。ただし無料のPersonalプランは非商用の利用に限られるため、業務で使う場合は有料プランの契約が前提です。料金は変わることがあるため、契約前にTailscaleの公式の料金ページで確認してください。

Tailscale Serveとは何ですか

手元の端末で動くサービスを、tailnetの中の端末にだけ見せる機能です。Funnelと同じコマンドの形(tailscale serve 3000 など)で使えますが、インターネットからは届きません。届いたリクエストには、相手のTailscaleのログイン名などがヘッダーとして付きます。社内向けの画面を見せたいなら、Funnelではなくこちらを使います。

独自ドメインで公開できますか

できません。公式ドキュメントによると、FunnelのURLはtailnetのドメイン(ts.net)の名前に限られます。会社のドメインで公開したい場合は、通常のホスティングや別の公開の仕組みを検討してください。

Funnelで公開すると、自宅や事務所のIPアドレスは知られますか

公式ドキュメントによると、訪問者のDNSが返すのはFunnelの中継サーバーのアドレスで、端末のIPアドレスはインターネットから見えません。ただし、公開したサービスの画面やエラー表示に内部の情報が出れば、そちらから漏れます。隠れるのは通り道であって、サービスの中身ではありません。

止めたつもりなのに公開が続いています

--bg で開いたFunnelは、再起動や tailscale down をはさんでも残ります。tailscale funnel status で何が残っているかを確かめ、オンにしたときと同じフラグで off を実行するか、tailscale funnel reset で設定をすべて消してください。

ngrokやCloudflare Tunnelとどう違いますか

手元のサービスを外に出すという目的は同じです。Funnelの違いは、すでに使っているTailscaleの中で完結し、別のアカウントやツールが要らない点です。一方で、ポートは3つに限られ、独自ドメインは使えず、帯域にも上限があり、現在もベータです。試験や一時的な共有ならFunnel、長く公開し続けるなら、条件が合う別の仕組み、という分け方が現実的です。

まとめ:Tailscale Funnelは「短く・決まった相手に」使う

  • Tailscale Funnelは、手元のサービスを ts.net のURLでインターネット全体に公開する機能(2026年10月26日時点でベータ)
  • Serveはtailnetの中だけ。Funnelには相手の身元のヘッダーが付かないので、確認はサービス側で行う
  • 条件は v1.38.3以降・MagicDNS・HTTPS証明書・ポリシーの funnel 属性。ポートは443・8443・10000のみ
  • Macでのファイル公開はオープンソース版だけ。ポートの公開は、公式の書き方が割れているので手元で確かめる
  • --bg は再起動しても残る。開けるときに、閉じる日と止め方を決める

私たちのMac miniは、外から受け取る仕事が無い作りにしているので、Funnelを使っていません。Funnelが向いているのは、開発中の画面のレビューやWebhookの試験のように、短い間だけ決まった相手に見せる場面です。株式会社Fyveでは、こうした「外から届く入口」をどこに作り、どこに作らないかを、実際に運用しているサーバーの設計から判断しています。

この記事を読んでいるあなたへ無料プレゼント

Claudeのこの5つの設定、今すぐ見直した方がいい

共有・学習・入力・権限・委任。事故が起きるのはこの5つだけ(全28ページ)

2026年7月、Claudeの共有チャットがGoogle検索から読める状態になっていました。原因は設定そのものではなく、自分が過去に共有したものを覚えていないことでした。共有リンクの棚卸しから、学習をオフにしても残る例外条項、Claude Codeの権限モードまで、今日30分で確認できる形にまとめています。

  • 見落としやすい共有リストは3つある(3つ目は画面の下)
  • 学習をオフにしても残る、公式の例外条項
  • 権限モード6つの違いと、Shift+Tabでの切り替え方
  • 私が実際に禁止しているコマンド23行を全文公開

メールアドレス登録で他にも様々な資料を閲覧できます

仕事でAIを使う人が「絶対に」知っておくべき Claude Codeスキル TOP10「Sonnet 5.5」を、実務で比べてみた。Codexを使い始める前に、「絶対に」見直してほしい5つのこと「Opus 5.5」を、実務で比べてみた。Jevで得する仕事、損する仕事Astra と Fable 5.1、ベンチマークでは分からない「使い分け」。Fable 5.1、賢さは「どこ」に出たか。Workにしかできない仕事は、2つだけその太字、本物ですか+9

PDF 18点・合計468ページ + すぐ使えるzip素材 3点

どれも登録後の受け取りページから、まとめてダウンロードできます。

毎週配信の無料ニュースレター「AIネイティブ超研究」の購読特典です。メール登録後すぐ、受け取りページのご案内が届きます。そこにはこの資料に加えて、過去の特典もすべてまとめて置いてあります。あわせて、AI活用に関するお知らせやお役に立てそうなご案内をお送りすることがあります。解除はいつでも1クリック。

← 記事一覧に戻る

御社の業務に合わせたClaude Code導入支援

「AIツールを導入したが、現場で使われない」を終わらせる。
業務課題のヒアリングから設計、ハンズオン実践、運用定着まで一貫して支援します。

無料AI活用診断を受ける料金とサービス一覧を見る →
© 2025 Fyve Inc. All rights reserved.