OpenClaw × Tailscale Funnel 深掘り — MacからLINE Botを公開する
OpenClaw × Tailscale Funnel 深掘り — MacからLINE Botを公開する
Tailscale FunnelはOpenClawが公式にネイティブ統合している唯一のトンネリング手段。ngrokやCloudflare Tunnelと違い、OpenClawの設定だけで完結する。
Tailscale Funnel とは何か
Tailscaleは本来、デバイス間のプライベートVPN(tailnet)を作るサービス。Funnelはそのtailnetの中にあるサービスをパブリックインターネットに公開する拡張機能。
インターネット
│
▼
Tailscale Funnel イングレスノード(Tailscaleが管理)
│ (TLS終端、HTTPS自動)
▼
あなたのMac上のOpenClaw (:18789)
│ (loopbackのまま!)
▼
LINEに返信
ポイント:
- OpenClawのGatewayは
127.0.0.1:18789にバインドしたまま - Tailscaleがloopback経由でプロキシする
- HTTPS証明書はTailscaleが自動管理
- URL は
https://<machine-name>.<tailnet>.ts.netで固定
Serve と Funnel の違い
| Serve | Funnel | |
|---|---|---|
| アクセス範囲 | tailnet内のデバイスだけ | インターネット全体 |
| 用途 | ダッシュボードを自分のスマホから見る | LINEのWebhookを受ける |
| 認証 | Tailscale ID で自動認証可能 | パスワード認証必須 |
| LINEで使える | ❌(LINEサーバーはtailnetに入れない) | ✅ |
LINE Botには Funnel が必須。 LINEサーバーはあなたのtailnetのメンバーではないので、Serveでは到達できない。
前提条件
- Tailscale v1.38.3 以上
- MagicDNS 有効
- HTTPS 有効(Tailscale管理コンソールで)
- macOSではオープンソース版のTailscaleアプリが必要(App Store版ではFunnelが動かない)
- Funnelが使えるポートは 443, 8443, 10000 のみ(TLS経由)
セットアップ手順
1. Tailscaleインストール(オープンソース版)
# Homebrew でオープンソース版をインストール
brew install tailscale
# デーモン起動
sudo tailscaled
# ログイン
tailscale up
⚠️ App Store版のTailscaleではFunnelは動かない。 Homebrewでインストールすること。
2. Tailscale管理コンソールで設定
login.tailscale.com/admin にアクセスして:
- DNS → MagicDNSが有効か確認
- DNS → HTTPSが有効か確認(「Enable HTTPS」)
- Access controls → Funnelのnode attributeが設定されているか確認
ACLに以下を追加(まだなければ):
{
"nodeAttrs": [
{
"target": ["autogroup:member"],
"attr": ["funnel"]
}
]
}
3. OpenClawの設定
# Funnelモードを有効化
openclaw config set gateway.tailscale.mode "funnel"
# Funnelにはパスワード認証が必須(トークン認証では起動を拒否する)
export OPENCLAW_GATEWAY_PASSWORD="your-secure-password"
# または設定ファイルに直接書く(非推奨)
openclaw config set gateway.auth.mode "password"
openclaw config set gateway.auth.password "your-secure-password"
# bindはloopbackのまま(Tailscaleがプロキシするので変更不要)
openclaw config set gateway.bind "loopback"
# Gateway再起動
openclaw gateway restart
⚠️ tailscale.mode: "funnel" は auth.mode: "password" でないと起動を拒否する。 これはOpenClawのセキュリティ設計。公開インターネットにトークンだけで晒すのは危険なため。
4. 動作確認
# Tailscaleのステータスを確認
tailscale status
# FunnelのURLを確認
tailscale funnel status
公開URL(例):
https://macbook-pro.tail12345.ts.net
5. LINE Developers に Webhook URL を登録
https://macbook-pro.tail12345.ts.net/line/webhook
⚠️ 重要な注意点
macOSのオープンソース版 Tailscale が必要
App Store版のTailscaleではFunnelが使えない。Homebrewでインストールしたtailscaleコマンドが必要。既にApp Store版を使ってる場合は:
- App Store版をアンインストール
brew install tailscaleでインストールsudo tailscaled→tailscale upで再ログイン
Webhook ポートの問題(既知のIssue)
Telegramで報告されている問題(GitHub #30022)がLINEにも当てはまる可能性がある。gateway.tailscale.mode: "funnel" はGatewayのメインポート(18789)にFunnelを向けるが、一部チャネルのWebhookリスナーが別ポートで動いている場合、リクエストが到達しない。
LINEの場合、Webhookはメインポートの /line/webhook で受けるので通常は問題ないが、もし405エラーが出たら手動Funnel設定に切り替える:
# 自動Funnel を無効化
openclaw config set gateway.tailscale.mode "off"
# 手動でFunnelを設定
tailscale funnel --bg 18789
# Gateway再起動
openclaw gateway restart
Macのスリープ対策
sudo pmset -a sleep 0 disksleep 0 displaysleep 0
sudo pmset -a hibernatemode 0 powernap 0
sudo pmset -a standby 0 autopoweroff 0
sudo pmset -a autorestart 1 # クラッシュ時の自動再起動
セキュリティ設計
Funnel経由でインターネットに公開されるということは:
- ダッシュボードもインターネットから見える(パスワード保護されている)
- LINEのWebhookエンドポイントもインターネットから見える(LINE署名検証で保護)
- ただしOpenClawのGateway自体はloopbackのまま(直接攻撃不可)
Funnelのイングレスノードはtailnetへのパケットレベルのアクセスは持たない。つまりFunnelが侵害されても、tailnet内の他のデバイスには影響しない。
shutdownでFunnel設定を片付ける
openclaw config set gateway.tailscale.resetOnExit true
これを設定しておくと、OpenClawが停止した時にTailscale Funnel/Serveの設定を自動でクリーンアップする。
Serve vs Funnel の使い分け(社長向け推奨構成)
# 普段はServe(tailnet内からダッシュボード見る用)
openclaw config set gateway.tailscale.mode "serve"
# LINEを使いたい時だけFunnelに切り替え
openclaw config set gateway.tailscale.mode "funnel"
openclaw gateway restart
ただし切り替えるたびにGateway再起動が必要なので、LINE Botを常時使うなら最初からFunnelで良い。
最終的な設定ファイル(完成形)
{
"gateway": {
"bind": "loopback",
"tailscale": {
"mode": "funnel",
"resetOnExit": true
},
"auth": {
"mode": "password"
}
}
}
パスワードは環境変数で管理:
export OPENCLAW_GATEWAY_PASSWORD="your-secure-password"
トラブルシューティング
| 症状 | 原因 | 解決策 |
|---|---|---|
| Funnel起動拒否 | auth.modeがpasswordじゃない | openclaw config set gateway.auth.mode "password" |
| HTTPS エラー | Tailscale管理コンソールでHTTPS無効 | 管理コンソールで有効化 |
| Funnel使えない | App Store版Tailscale | Homebrewでオープンソース版をインストール |
| LINE Webhook 405 | ポートミスマッチ | 手動Funnel設定(tailscale funnel --bg 18789) |
| Macスリープで止まる | macOSデフォルトのスリープ | pmset で無効化 |
参考リンク
- OpenClaw公式 - Tailscale設定
- Tailscale Funnel ドキュメント
- Tailscale Serve ドキュメント
- OpenClaw + Tailscale Mac Mini構築記
- GitHub Issue #30022 - Webhook port mismatch with Funnel
関連記事
- 既存Docker環境にOpenClawを追加する手順 — VPSでの構築記録
- MacローカルのOpenClawをLINE Botとして公開する方法 — トンネリング比較