「自宅のMac miniで動かしてるn8nやWebアプリ、外からアクセスできないかな…」と思ったこと、ありませんか?
ルーターのポート開放は設定が面倒だし、プロバイダーによっては固定IPが取れないこともあります。そんな悩みをシンプルに解決するのが、Tailscale Funnelです。
結論、TailscaleをインストールしてコマンドひとつでOK。自宅サーバーで動いているサービスを、インターネット上の誰でもアクセスできるURLで公開できます。
初めてTailscaleを触る方は基本編から、すでに使っている方は応用編からどうぞ。
この記事では、Funnelの仕組みから設定手順、実運用のコツまで解説します。
Tailscale Funnelとは?30秒でわかる仕組み
Tailscale Funnelは、ポート開放なしでローカルサービスをインターネットに公開できる機能です。
通常、自宅サーバーのサービスを外部公開するには「ポート開放」が必要です。ルーターの管理画面に入り、ポート番号を設定して…という作業は、初心者にはハードルが高いですよね。
Tailscale Funnelはこの問題を、暗号化されたリレーサーバーを経由することで解決します。
【Funnelの通信の流れ】
- あなたのデバイスに
yourname.tailnet-name.ts.netという固定URLが割り当てられる - インターネットからのアクセスは、TailscaleのリレーサーバーがDNSで受け取る
- リレーサーバーが暗号化トンネルを通じてあなたのデバイスに転送
- ローカルで動いているサービスがレスポンスを返す
大事なポイントは、リレーサーバーは通信を復号しないという点です。エンドツーエンドで暗号化されているので、外部への通信も安全に保たれます。
Tailscale ServeとFunnelの違い
Tailscaleには「Serve」という似た機能もあります。違いはこうです。
| 機能 | アクセスできる人 |
|---|---|
| Tailscale Serve | 自分のtailnet(VPN)メンバーのみ |
| Tailscale Funnel | インターネット上の誰でも |
社内ツールや個人利用なら Serve、Webhookの受け口や外部に公開したいサービスには Funnel が向いています。
Funnelを使う前に確認すること
設定に入る前に、3つだけ確認してください。
① Tailscaleがインストールされていること
Tailscale v1.38.3以降が必要です。まだインストールしていない方は、Tailscale公式サイトからダウンロードできます。インストール自体は無料で、個人利用なら月0円のPersonalプランで使えます。
② MagicDNSが有効になっていること
Tailscaleの管理コンソール(login.tailscale.com)にアクセスして、「DNS」タブで「MagicDNS」がオンになっているか確認してください。これがオフだとFunnelのURLが生成されません。
③ macOSの場合はCLI版を使うこと
macOSでApp Store版のTailscaleを使っている方は注意が必要です。公式ドキュメントによると、macOSのApp Store版ではFunnelが使えない場合があります。Tailscaleの公式サイトからダウンロードできるオープンソース版(pkgインストーラー)を使いましょう。
【基本編】3ステップでFunnelを有効化する
実際に設定してみます。ここでは「ローカルのポート3000で動いているサービスを外部公開する」ことを例にします。
ステップ1:ローカルサービスを起動する
まず、公開したいサービスがローカルで動いていることを確認してください。
たとえばn8nをDocker経由で動かしている場合、http://localhost:5678 のようなURLでアクセスできる状態にします。Pythonのシンプルなテストサーバーを使う場合は下記のように起動できます。
# Pythonのテスト用HTTPサーバー(ポート3000で起動)
python3 -m http.server 3000
ステップ2:Funnelコマンドを実行する
ターミナルを開いて、以下のコマンドを実行します。
# ポート3000のサービスをFunnelで外部公開
tailscale funnel 3000
初回実行時は、ブラウザが自動で開いてtailnetのポリシーファイルの更新確認が表示されます。「承認する」をクリックすると、自動でFunnelが設定されます。
成功すると、以下のようなURLが表示されます。
https://your-device.tailnet-name.ts.net
このURLが、外部からアクセスできる公開URLです。
ステップ3:動作確認とFunnelの停止
表示されたURLをブラウザで開いて、ローカルサービスが見えれば成功です。
現在の状態を確認するコマンドは下記です。
# Funnelの現在の状態を確認
tailscale funnel status
公開を止めたいときはこちらです。
# Funnelを無効化
tailscale funnel off
以上です。ルーターの設定画面を一切触ることなく、外部公開が完了しました。
💡 公式ドキュメントに沿って検証
公式の手順通りに進めたところ、初回実行時にtailnetポリシーファイルの更新承認が必要な点で少し戸惑いました。コマンドを打っても何も起きないように見えますが、バックグラウンドでブラウザが開くのを待つ必要があります(ブラウザが前面に来ないケースもあるため、タスクバーを確認してください)。
また、使えるポートは443・8443・10000の3種類のみという制限があります。ローカルのサービスはどのポートでもOKですが、Funnel側(インターネットに公開するポート)はこの3つに限られます。コマンドでポートを指定する場合は以下のように書きます。
tailscale funnel --https=8443 3000 # ローカルポート3000を、外部ポート8443で公開ドキュメントには書かれていないポイント:App Store版macOSのTailscaleではFunnelコマンドが動作しない場合があります。その場合はpkg版(公式サイトからダウンロード)に切り替えると解決します。
検証環境:macOS Sequoia 15 / Tailscale 1.80系
結果:コマンド1回で外部アクセス可能なHTTPS URLが発行、SSL証明書も自動生成されていました。
【応用編】実運用で役立つカスタマイズ
基本の設定ができたら、実運用で使えるオプションを紹介します。
特定のパスだけを公開する
サービス全体ではなく、特定のパスだけを公開したい場合は、ターゲットにURLを指定します。
# /api パスだけをFunnelで公開
tailscale funnel --https=443 http://localhost:3000/api
Webhookの受け口だけを外部に開けたい、というユースケースに便利です。
TCPポートをそのまま転送する
HTTPに限らず、TCPポートをそのまま転送することもできます。
# TCPポート2222を外部ポート10000でFunnel
tailscale funnel --tcp=10000 2222
SSHやデータベースの特定ポートを外部に公開したいときに使えます(セキュリティに注意してください)。
常時稼働させる(起動時に自動で有効化)
Tailscaleはデフォルトでは再起動後にFunnelの設定が引き継がれます。ただし、ローカルサービス(n8nなど)が立ち上がっていないとFunnel経由のアクセスは失敗します。
Dockerを使っているなら、restart: always を設定しておくと、Mac mini再起動後も自動でサービスが起動します。
# docker-compose.yml
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
n8nのWebhookをFunnelで受け取る実例
n8nをローカルで動かしながら、GitHubのWebhookを受け取りたい場面を考えます。
- n8nをポート5678で起動
tailscale funnel 5678で外部URL発行- GitHubのWebhook設定に
https://your-device.tailnet.ts.net/webhook/xxxを入力 - GitHubからのPushイベントをローカルのn8nで受信できる
これだけで、クラウドサーバーを用意しなくてもWebhookを受け取れます。
ただし、常時稼働が必要な用途ではVPSの方が安定します。自宅Macのネット環境やスリープ設定に依存するため、本番用途には向きません。本番運用を検討している方は、XServer VPS のような常時稼働VPSと組み合わせる方法も検討してみてください。
よくあるトラブルと対処法
Q. URLにアクセスしても「接続できない」と表示される
原因1:ローカルサービスが起動していない
Funnelが有効でも、ローカル側のサービスが落ちていると接続できません。まず localhost:ポート番号 に直接アクセスできるか確認してください。
原因2:Funnelが停止している
tailscale funnel status で現在の状態を確認してください。再起動後に停止している場合は、もう一度 tailscale funnel ポート番号 を実行します。
原因3:ポートの指定ミス
Funnelで使えるポートは443・8443・10000のみです。他のポートを指定してもエラーになります。
Q. macOSでコマンドが「command not found」になる
App Store版のTailscaleを使っている場合、tailscale コマンドがPATHに含まれていないことがあります。
Tailscale公式サイトからpkg版をダウンロードしてインストールし直すと解決します。もしApp Store版を使い続けたい場合は、以下のパスを試してください。
/Applications/Tailscale.app/Contents/MacOS/Tailscale funnel 3000
Q. 「Funnel is not allowed for this device」エラーが出る
tailnetのポリシーファイルで、Funnelの使用が許可されていない状態です。
管理コンソール(login.tailscale.com/admin/acls)で、ポリシーファイルに以下が含まれているか確認してください。
"nodeAttrs": [
{
"target": ["autogroup:member"],
"attr": ["funnel"]
}
]
初回Funnel実行時に自動で追加されるはずですが、管理者が手動で削除していた場合はこの設定を追記します。
Q. HTTPSにリダイレクトされない
FunnelはTLS(HTTPS)専用です。HTTPでのアクセスは自動的にHTTPSにリダイレクトされます。ローカルサービス側がHTTPSを要求する設定になっていないか確認してください。Funnel側でSSL証明書は自動発行されるので、ローカルサービスはHTTPのままでOKです。
Tailscale Funnelが向いているケース・向いていないケース
Funnelは便利ですが、万能ではありません。使い分けの基準を整理しておきます。
Funnelが向いているケース
- Webhookの一時的な受け口(GitHub、Stripe等)
- 開発中のサービスを一時的にデモ共有したい
- 自宅NASやHomeAssistantに外からアクセスしたい
- AIツール(Ollamaなど)のAPIを一時的に外部公開したい
- コストをかけずに試してみたい
Funnelが向いていないケース
- 24時間365日の安定稼働が必要な本番サービス
- 大量のトラフィックが想定される用途(帯域制限がある)
- 固定IPアドレスが必要な場合
- ポート443・8443・10000以外が必要な場合
本番運用や常時稼働が必要なら、VPSを使う方が現実的です。ConoHa VPS は月額1,000円程度から使えて、Dockerとの相性もよいのでn8nやOllamaのホスティングに向いています。
まとめ
- Tailscale Funnelはポート開放なしでローカルサービスをHTTPSで外部公開できる
- コマンドは
tailscale funnel ポート番号のみ。SSL証明書も自動 - 使えるFunnel側ポートは443・8443・10000の3種類のみ
- macOSのApp Store版は動作しない場合があるため、pkg版を推奨
- 常時稼働・本番用途にはVPSと組み合わせるのが現実的
Tailscale Funnelは「とりあえず外から繋いでみたい」という場面で非常に役立ちます。無料で始められるので、まずは試してみてください。
自宅サーバーでn8nを動かす手順については、こちらの記事も参考にしてください。
→ n8nをDockerで自宅サーバーに構築する方法
0人が役に立ったと評価


コメント