[Github]Webhookを内部サーバへ通す

TIPS
TIPS

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:8080
    tailscale funnel 443 on
[Github]Webhookを内部サーバへ通す
[SSL]非公開サーバで証明書を取得
外部からアクセスできない非公開の内部サーバーで、Let's EncryptのSSL証明書を取得・運用する方法を解説。DNS-01チャレンジを活用し、インバウンド通信不要で証明書を発行する仕組みや条件、API連携による自動更新の自動化手法まで紹介します。

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 # サーバー名でアクセス可能!
[Github]Webhookを内部サーバへ通す
[git]git pullで「Need to specify how to reconcile divergent branches」エラーが出た時の原因と解決策
git pull実行時に「Need to specify how to reconcile divergent branches」エラーが出る原因と、rebase、merge、fast-forwardの3つの解決策を解説。開発スタイルに合わせた最適な設定方法がわかります。

3. Webhook Relay(プロキシ)を介する

GitHubからの入力をパブリックな場所で一度受け取り、それをTailscale経由で中継する手法です。

  • 仕組み: 公開サーバー(VPSなど)でWebhookを受け、そのマシンもTailscaleに入れておくことで、内部ネットワークのサーバー名へリレー(転送)します。
  • メリット: 常にFunnelを開放しておく必要がなく、特定のトラフィックだけを制御できます。

まとめ:どちらを選ぶべきか?

手法名前で通信可能か安全性おすすめのケース
Tailscale FunnelYes (パブリックURL)中 (公開される)外部サービスからの入力を直接受け取りたい場合
GitHub ActionsYes (MagicDNS名)高デプロイや自動化処理をトリガーにしたい場合

Q よくある質問 (FAQ)
Q. Tailscale Funnelを使用する際のセキュリティ上のリスクはありますか?
A.
Funnelは指定したポートをインターネットへ公開するため、エンドポイントが露出するリスクがあります。より安全に運用したい場合は、インターネットにポートを公開しないGitHub Actions連携の利用が推奨されます。
Q. GitHub Actionsを利用する方法で、なぜ内部サーバーの名前解決(MagicDNS)が可能になるのですか?
A.
ワークフロー内でTailscaleのActionを実行することで、実行環境自体が一時的にTailnet(プライベートネットワーク)に参加するため、MagicDNS名を用いた直接通信が可能になります。

コメント

タイトルとURLをコピーしました