join-tailnet について
Join Tailnetは、exe.dev VMをIV Tailscale tailnetに参加させるスキルです。既存の連携を確認し、参加に必要な連携を一時的にアタッチして、完了後に解除します。
主な機能
- 01exe.dev VMのtailnet参加
- 02既存の連携アタッチ状態の確認
- 03参加用認証のアタッチと解除
- 04必要に応じたtailscaledの起動
- 05一時的な事前認証キーの使用
活用シーン
- 01VMをIV Tailscale tailnetに参加させる
- 02恒常的な権限なしでVMを参加させる
- 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 スキルの参加方法が適用できない理由も扱います。同じ名前ですが呼び出し元が異なります。一方をもう一方に同期するのではなく、別々に管理してください。
スクリプトは次の処理を行います。
api-tailscaleがすでに VM にアタッチされているか確認します。アタッチ済みの場合は、その状態を変更せず、手順 4 を省略します。api-tailscaleをvm:<name>にアタッチします。*.exe.xyz経由で SSH 接続し、tailscaledが実行中であることを確認します。プロキシ経由で OAuth トークンを交換し、公開 API に対して 1 回限りのエフェメラル事前認証キーを発行して、tailscale upを実行します。- 終了時に
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-provisionretiring.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 秒待ってください。