mcpField
J
join-tailnet

join-tailnet

github.com/kylelundstedtクラウド・DevOps49 回インストール
リポジトリ

join-tailnet について

Join Tailnetは、exe.dev VMをIV Tailscale tailnetに参加させるスキルです。既存の連携を確認し、参加に必要な連携を一時的にアタッチして、完了後に解除します。

主な機能

  1. 01exe.dev VMのtailnet参加
  2. 02既存の連携アタッチ状態の確認
  3. 03参加用認証のアタッチと解除
  4. 04必要に応じたtailscaledの起動
  5. 05一時的な事前認証キーの使用

活用シーン

  1. 01VMをIV Tailscale tailnetに参加させる
  2. 02恒常的な権限なしでVMを参加させる
  3. 03一時ノード削除後の再参加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kylelundstedt/dotfiles --skill join-tailnet

インストール後、Claude Code で/join-tailnetを入力して読み込まれたか確認します。

同梱ファイルjoin-tailnet.sh

詳細

Tailnet に参加する

exe.dev VM を IV Tailscale tailnet に参加させます。

使い方

ヘルパーを実行します。認証情報のアタッチとデタッチを含め、すべて処理します。

~/.agents/skills/join-tailnet/join-tailnet.sh <vm-name>

その後、tailscale status で VM が表示されることを確認します。参加したら、それ以外の操作には ssh <vm>(Tailscale SSH)を使用します。

スクリプトを使う理由(生のコマンドを使わない理由)

api-tailscale(旧称 tailscale-api)は、2 つの経路でアタッチされます(2026-09-15 に確定。契約内容は iv-provision の tailnet.md に記載されています)。

  • プライベート開発用 VM には、exe.dev のタグ tailnet を通じて継続的な権限を付与します。ブラウザー操作で実行する create-vm スキルでは、VM の作成時にしか設定を修正できないためです(そのトークンではアタッチもデタッチもできません)。開発用 VM はプライベートなので、VM 自体と同じ範囲に公開されます。
  • インターネットに公開されるもの、およびすべての本番環境向けデプロイ先には、VM ごとに期限付きの権限を付与します。ssh exe.dev integrations attach api-tailscale vm:<vm> --for 30m を使用し、タグは使いません。これが 2026-07-28 の是正対応の対象でした。auto:all によって、公開されている rss-feed と telnyx-vm でキーの発行が可能になっていました(rss-feed からのトークン交換は HTTP 200 を返しました)。さらに、tailnet タグによって、2026-08-19 から 2026-09-15 まで、いつの間にか再びこれらの VM に権限が付与されていました。2026-09-15 に、公開 VM 4 台から再度削除しました(tag -d <vm> tailnet)。

このスクリプトは 3 つ目の経路です。どちらの権限も持たない VM に対して、mini から一度だけ参加させる方法です。参加処理の間だけアタッチし、処理後にデタッチします。

これはコントロールプレーン版です。アタッチとデタッチに exe.dev へのアクセスが必要ですが、VM にはその権限がありません。VM 側の版は、tailnet タグを通じてすでに api-tailscale を持つ VM 向けで、iv-provision の skills-local/join-tailnet にあります。こちらでは、事前チェックと、このフリートではベンダー提供の tailscale スキルの参加方法が適用できない理由も扱います。同じ名前ですが呼び出し元が異なります。一方をもう一方に同期するのではなく、別々に管理してください。

スクリプトは次の処理を行います。

  1. api-tailscale がすでに VM にアタッチされているか確認します。アタッチ済みの場合は、その状態を変更せず、手順 4 を省略します。
  2. api-tailscale を vm:<name> にアタッチします。
  3. *.exe.xyz 経由で SSH 接続し、tailscaled が実行中であることを確認します。プロキシ経由で OAuth トークンを交換し、公開 API に対して 1 回限りのエフェメラル事前認証キーを発行して、tailscale up を実行します。
  4. 終了時に api-tailscale をデタッチします。成功時だけでなく、エラーや中断時にも実行されるトラップを使います。

そのため、権限が存在するのは使用中だけです。デタッチに失敗した場合、スクリプトは大きく警告します。残った vm: アタッチは ssh exe.dev integrations list で確認できます。

以前のインライン curl コマンドを手動で実行しないでください。 アタッチがないと、トークン交換で access_token が返されません。そこで次に、api-tailscale を手動でアタッチしたままデタッチを忘れるという事態は、この変更で取り除いた継続的な権限そのものです。

前提条件

  • VM が存在し、<vm>.exe.xyz でアクセスできること。
  • VM に curl と jq がインストールされていること(標準の exeuntu と iv-image にはありますが、軽量の exe slim ベースにはない場合があります。このスキルを使用する前に確認してください)。
  • tailscaled がスクリプトによって有効化され、起動されること。標準の exeuntu では無効になっているため、すでに実行中だと思い込まないでください。
  • exe.dev のコントロールプレーンに変更を加える klundstedt-mini から実行すること。

注意事項

  • キーは ephemeral:true で発行されるため、ノードが長時間オフラインになると tailnet から削除され、再参加するにはこのスクリプトを再実行する必要があります。停止後も稼働を続ける必要がある長期運用のアプライアンスでは、IV_TAILSCALE_EPHEMERAL=false で実行してください(AgentsView コレクターの再構築に伴い、2026-09-15 に追加)。この場合、ノードは保持されます。VM を廃止する際は、管理コンソールでノードを削除してください(iv-provision retiring.md §5)。
  • VM の作成時に --tag=iv を指定しても、tailnet への参加にはもはや不十分でも必須でもありません。ほかの tag:iv 統合には引き続き適用されます。
  • Prod-lane イメージは起動時に自動で参加します(exeslim 2026-08-23 以降)。 exeslim(exeslim-dev ではありません)イメージには iv-tailnet-join.service が含まれています。初回起動時に api-tailscale プロキシを確認し、接続されていれば tag:prod キーを発行して参加します。api-tailscale は exe.dev の tailnet タグに接続されているため、exeslim VM で new --tag=tailnet を実行すると、起動から数秒後には tag:prod として tailnet に参加し、このヘルパーはその後、早期に終了します(「すでに tailnet に参加しています」)。このような VM で tag:dev を取得するには、その VM で sudo tailscale logout を実行してから、このヘルパーを実行してください。2026-09-15 に iv-llm-relay で確認されています。
  • Prod-lane ノードは exeslim 2026-09-15 以降、非エフェメラルとして発行されるため、アプライアンスは初回起動後に API を必要としません。以前のエフェメラルな prod ノードが長時間の停止後に削除された場合は、.exe.xyz エッジ経由で 30 分間接続し、systemctl start iv-tailnet-join を実行する必要があります(または、このスクリプトを実行します。ただし、その場合は tag:dev になります)。

SSH の運用ルール

  • SSH は一度に 1 回だけ試行してください。 *.exe.xyz への SSH を並行して実行しないでください。
  • SSH に失敗した場合は、次の試行まで 30~60 秒待ってください。

コメント