tailnet外のデバイスを接続する
最終検証日:
翻訳: 竹洞 陽一郎
Aperture by Tailscaleは、現在ベータ版です。
Apertureはtailnet上で動作し、そのtailnet内のデバイスは直接Apertureに到達できます。
ただし、LLMへのアクセスを必要とするすべてのデバイスがtailnetに参加できるわけではありません。
CI/CDランナー、業務委託先のマシン、個人のデバイス、別のtailnet上のデバイスなどは、いずれも ts-unplug を使ってApertureに接続できます。
ts-unplug は ts-plug リポジトリのツールで、軽量なtailnetノードを作成し、ローカルのトラフィックをApertureインスタンスへプロキシします。
デバイス上で ts-unplug を実行すると、それは独自のノードとしてtailnetに参加し、Apertureへトラフィックを転送するローカルポートを開きます。
そのデバイスにTailscaleをインストールする必要はありません。
Apertureは、共有のAPIキーではなく、ts-unplug ノードのTailscaleアイデンティティを使ってリクエストを認証します。
各人が自分専用の ts-unplug インスタンスを実行する場合、Apertureはアクティビティを個々のユーザーに帰属させます。
ts-plug と ts-unplug のツールは、現在活発に開発中です。
最新の状況やリリース情報については、ts-plug リポジトリを参照してください。
ユースケース
ts-unplug は、デバイスをtailnetに直接参加させられない場合や、参加させるべきでない場合に役立ちます。
- CI/CDランナー: ビルド中にLLMへのアクセスが必要な、GitHub Actionsランナーのような一時的な環境。対話的な承認を省略するには、認証キー(auth key)を使用します。
- 業務委託先・ベンダーのマシン: 組織のtailnetに参加せずにApertureへのアクセスが必要な、外部の協力者。
- 個人のデバイス: 個人所有のハードウェアにTailscaleをインストールしたくないチームメンバー。
- tailnetをまたいだアクセス: Apertureインスタンスへ到達する必要がある、別のtailnet上のデバイス。
すでにtailnetに参加しているデバイスであれば、直接接続する方が手順が少なく、同じユーザーごとのアイデンティティが得られます。
接続手順については、LLMクライアントをセットアップするを参照してください。
制限事項
ts-unplug がアルファ版である間は、次の制限が適用されます。
ts-unplugはソースからビルドする必要があります。ビルド済みのバイナリは提供されていません。ts-unplugはlocalhostでのみ待ち受けます。同じネットワーク上の他のデバイスは、このプロキシにアクセスできません。- 各
ts-unplugインスタンスは、それぞれ別個のtailnetノードを作成します。多数のインスタンスが必要な場合は、適切なタグとアクセス制御ポリシーを設定した認証キーの使用を検討してください。
前提条件
始める前に、次のものが揃っていることを確認してください。
- Goツールチェーン。
ts-unplugはソースからビルドします。Go 1.21以降をインストールしてください。 - Git。
ts-plug リポジトリをクローンするために必要です。 - ApertureインスタンスのFQDN。
デフォルトでは<aperture-hostname>.<tailnet-id>.ts.netです。tailnet名は、管理コンソールの「General(全般)」で確認できます。 - デバイスを承認する権限。
認証キーを使って自動的に認証する場合を除き、管理コンソールでts-unplugノードを承認するには、オーナー、管理者、またはネットワーク管理者である必要があります。
ts-unplugをセットアップする
ts-unplug を使ってデバイスをApertureに接続するには、ツールをソースからビルドし、プロキシを起動し、tailnetでそのデバイスを承認します。
ステップ1: ts-unplugをビルドする
ts-plug リポジトリをクローンし、ts-unplug をビルドします。
git clone https://github.com/tailscale/ts-plug.git cd ts-plug make ts-unplug
これにより、./build/ts-unplug にバイナリが作成されます。
ステップ2: ts-unplugを起動する
ts-unplug を実行し、Apertureインスタンスを指定します。
<tailnet-id> は自分のtailnet名に置き換え、ローカルポートを選びます。
./build/ts-unplug -dir ./state -port 8080 <aperture-hostname>.<tailnet-id>.ts.net
初回実行時、ts-unplug は新しいノードを認証するためのURLを表示します。
ブラウザでそのURLを開いて認証を完了します。
ステップ3: デバイスを承認する
Apertureをホストしているtailnetの管理コンソールで、「Machines(マシン)」から新しいデバイスを承認します。
承認後、ts-unplug は HTTP proxy listening と表示し、http://localhost:8080 でApertureにアクセスできるようになります。
ステップ4: 接続を検証する
ts-unplug が動作したら、テストリクエストを送信して接続が機能することを確認します。
curl -s http://localhost:8080/v1/messages \
-H "Content-Type: application/json" \
-d '{
"model": "claude-haiku-4-5-20251001",
"max_tokens": 25,
"messages": [{"role": "user", "content": "respond with: hello"}]
}'
リクエストが成功したら、Apertureダッシュボード(http://localhost:8080/ui/)を開き、利用履歴でそのリクエストを確認してください。
次のステップ
-
プロキシを使うようにツールを設定する
接続が機能することを確認したら、APIリクエストのベースURLとしてhttp://localhost:<port>を使うようにツールを設定します。ツールごとの設定については、LLMクライアントをセットアップするを参照し、設定例のhttp://<aperture-hostname>をhttp://localhost:<port>に置き換えてください。 -
ts-unplugインスタンスを管理する
セキュリティを維持し、tailnetを整理された状態に保つために、ts-unplugインスタンスを管理することが重要です。使用していないときはプロキシを停止し、不要になったデバイスはtailnetから削除し、複数のユーザーがアクセスを必要とする場合は、状態ディレクトリ(state directory)を分けて複数のインスタンスを実行できます。