GitHubのWebhookサーバーはインターネット上の「パブリック」な空間にありますが、Tailscaleのネットワーク(Tailnet)は「プライベート」な仮想ネットワークであるため、GitHub側から非公開の内部サーバーの名前を解決したり、直接アクセスしたりすることができないです。
ただし、Tailscaleの特定の機能や代替案を使うことで、これを実現可能にする「プロの解決策」が3つあります。
1. Tailscale Funnel を使う(最も直接的な解決策)
「Tailscale Funnel」は、プライベートなTailscaleネットワーク内のサーバーを、一時的にインターネットへ公開する機能です。
- 仕組み: Tailscaleが提供するパブリックなDNS名(
node-name.tail-net.ts.netなど)を介して、GitHubからのWebhookを受け取れるようになります。 - メリット: サーバー名(MagicDNS名)に近いURLをそのままWebhookの送り先に指定できます。
- 設定イメージ:
# 8080番ポートで動くWebhookレシーバーを公開する場合tailscale serve https:443 / http://localhost:8080tailscale funnel 443 on
2. GitHub Actions + Tailscale を使う(名前解決が可能)
Webhookではなく、GitHub Actionsをトリガーにする方法です。以前の回答でも触れましたが、GitHub Actions内でTailscaleを起動させると、アクション自体があなたのネットワークに参加します。
- 仕組み: GitHub ActionsがあなたのTailnetの一員になるため、スクリプト内で
server-name(MagicDNS名)を指定して通信が可能になります。 - メリット: インターネットにポートを公開(Funnel)する必要がないため、よりセキュアです。
- 設定例:
YAML- name:
Connect to Tailscale
uses: tailscale/github-action@v2
with:
authkey: ${{ secrets.TS_AUTHKEY }}- name: Trigger script on server
run: curl http://ubuntu-server:8080/deploy # サーバー名でアクセス可能!
3. Webhook Relay(プロキシ)を介する
GitHubからの入力をパブリックな場所で一度受け取り、それをTailscale経由で中継する手法です。
- 仕組み: 公開サーバー(VPSなど)でWebhookを受け、そのマシンもTailscaleに入れておくことで、内部ネットワークのサーバー名へリレー(転送)します。
- メリット: 常にFunnelを開放しておく必要がなく、特定のトラフィックだけを制御できます。
まとめ:どちらを選ぶべきか?
| 手法 | 名前で通信可能か | 安全性 | おすすめのケース |
| Tailscale Funnel | Yes (パブリックURL) | 中 (公開される) | 外部サービスからの入力を直接受け取りたい場合 |
| GitHub Actions | Yes (MagicDNS名) | 高 | デプロイや自動化処理をトリガーにしたい場合 |

コメント