その他
Tailcat: TailscaleなしのTailscale、Tailscale製
Tailcat: Tailscale Without Tailscale, by Tailscale (tailscale.com)
要約
Tailscaleは、Tailscaleのデータプレーン(WireGuard + NATトラバーサル + DERP)を、Tailscaleのコントロールプレーンなしで使用できるツール「Tailcat」をリリースしました。TailcatはオープンソースのGoパッケージおよびCLIツールであり、IPアドレス、アカウント、コントロールプレーン、ユーザー、管理者を必要としません。これはnetcatのように機能しますが、Tailscaleのmagicsock(WireGuard暗号化 + NATトラバーサル + DERPランデブー/フォールバックリレー)を介して通信します。
全文翻訳
ブログ | 製品
2026年8月31日
Tailcat: TailscaleなしのTailscale、Tailscale製
著者: Brad Fitzpatrick
本日、tailcatをリリースします。これはTailscaleのコンポーネントを再構成したもので、Tailscale自身が作成したTailscaleのオープンソースデータプレーン(WireGuard® + NATトラバーサル + DERP)を、Tailscaleコントロールプレーンなしで使用する方法を提供します。これは、Tailscale製によるTailscaleなしのTailscaleです。
具体的には、tailcatはオープンソースのGoパッケージと、そのパッケージを使用したCLIツールの両方です。これにより、サーバーサイドリスナーを実行し、そのサーバーに接続するクライアントを実行して、双方向のバイトをやり取りできます。
つまり、netcatのようなものですが、Tailscaleのmagicsock(WireGuard暗号化 + NATトラバーサル + DERPランデブー/フォールバックリレー)を流れます。
特筆すべきは、tailcatには以下のものがありません。
IPアドレスなし
アカウントなし(ログイン、パスワード、SSOなし)
コントロールプレーンなし
ユーザーなし
管理者なし
管理コントロールなし
OSのrootまたは管理者アクセス権限の必要なし
Tailscale社との関係または依存関係なし(少なくとも、独自のcmd/derper DERPサーバーを実行する場合)
「Tailscale」とはそもそも何を意味するのか?
人々がオンラインでTailscaleについて互いに説明するのを見ると、彼らにとって「Tailscale」が何を意味するのかについて、非常に異なる解釈が見られます。
あるグループの人々は、「WireGuardを自分で実行するだけだ」といった言葉をよく使い、WireGuardの部分に焦点を当て、NATトラバーサル、DERPフォールバック、中央管理されたファイアウォール(ACL)ルール、SSOログイン、タグ付け、MDMポリシー、監査ログなどの部分を考慮しない(または気にしない)ことがあります。おそらく、パブリックIP上でWireGuardの部分だけが必要か、または欲しいだけかもしれません。それは問題ありません。
別のグループの人々は、会社、企業構造、長期的な存続可能性、創業者、資金調達段階、価格設定、認証、信頼性、セキュリティ開示の責任ある取り扱いなどについて、より多くを語ります。
さらに別のグループの人々は、Tailscaleがオープンソースであるかどうかについて話します。念のため申し上げておくと、私たちのコアはオープンソース(実際のOSI承認ライセンス付き!)であり、DERPサーバーはオープンソースであり、クライアントはそれ自体がオープンソースであるプラットフォーム(LinuxとAndroid)でオープンソースです。私たちのサーバーサイドコントロールプレーンはそうではありません。このオーディエンスの多くの人々は、Headscale(私たちはそれを愛し、開発の一部を資金提供しています)が存在することに感謝しており、今日使用するため、または将来使用するためのフォールバックプランとしています。
これらのすべての解釈は問題ありません。公式コントロールプレーンの公式GUIクライアントラッパーを、企業のSSO IDプロバイダーと組み合わせて使用する場合でも、あるいはその反対の極端な例として、LinuxノードでHeadscaleサーバーに接続してtsnetのみを使用する場合でも、Tailscaleとその多くのコンポーネントを接続して使用する方法は数多くあります。
WireGuard + NATトラバーサル + DERPフォールバックデータプレーン
コントロールプレーン
会社(私たちにお金を払ってサポートを受ける)
オープンソースコード
tailcatは、Tailscaleのサブセットを使用するもう一つの方法を提供します。
仕組み
tailcatサーバーを実行したいとしましょう。それがどのように機能するかを以下に示します。
キーペアを生成します(一時的なものか、名前付きで再利用されるもの)。
DERPサーバーを選択します(指定したものか、自動選択された帯域幅制限付きのTailscale実行中のもの)。
tailcatアドレスを生成します。これは次の形式の文字列です。
tc + base64(CBOR(公開鍵 + DERPブートストラップ情報))
その後、そのアドレス文字列を帯域外で誰かと共有します。直接共有するか、DNS TXTレコードに配置して、そのDNSホスト名を帯域外で共有します。
クライアント側もほぼ同じです。
キーを選択します(一時的なものか、ローカルで名前を付けられて再利用されるもの)。
tailcatアドレスで指定されたランデブーDERPサーバーに接続します。
DERP経由でサーバーの公開鍵にMEOWメッセージを送信して、ネットマップに自分を追加します。
その時点で、サーバーがそのクライアントの公開鍵を許可していれば(オプションでロックダウン可能)、ハッピーなMEOW応答を返します。
その後、クライアントはWireGuard上の組み込みユーザー空間TCPスタックを使用して、相手側へのTCP接続を続行します。ワイヤ上には実際のIPアドレス(公開鍵から派生したIPv6アドレス)がありますが、ユーザーには決して表示されません。オペレーティングシステムはTCPレイヤーに関与せず、合成されたtailcat IPを見ることはありません。オペレーティングシステムが行うのは、DERP TCPメッセージおよび/またはNATパンチされたUDP WireGuardメッセージを送信することだけです。
Tailscaleのmagicsockデータプレーンを流れるため、NATトラバーサルが自動的に機能し、直接接続を試みます。そのため、データ転送(WireGuard UDPパケット)は、DERPリレーを介さずに、クライアントとサーバー間で直接行われます。しかし、両方の側がポートマッピングサービスが利用できないハードNATの後ろにいる場合、データパケットはフォールバックとしてDERPを介してリレーされます。TailscaleホストのDERPサーバーを使用する場合、それらはレート制限されています(帯域幅は私たちにお金がかかります)。しかし、独自のDERPサーバーを実行する場合、レート制限を制御できます。
tailcatサーバーにポート番号を指定しないデフォルトモードでは、デフォルトで受信データをサーバーの標準出力にパイプします(netcatのように)。しかし、クライアントモードで実行することもできます。このモードでは、一時的なローカルポートでSOCKSサーバーを実行し、その後、指定された子プロセス(例: curlなど)を、そのSOCKSサーバーを使用するように設定された環境変数で実行します。これにより、tailcatを意識しないプログラムもtailcatを透過的に使用できます。(tailcatは現在、常にユーザー空間のみであり、システムのネットワークスタックを再構成することはありません…TUNデバイスなし、ルーティングテーブルの変更なしなど)。
なぜ?
tailcatは2023年9月に、10時間かかるフライト中に、ひどい映画を見ながら書きました。当時、tailcatは主に楽しいノベルティでした。社内で発表し、時々自分で使用していましたが、ほとんど忘れていました。しかし、その後、多くの顧客が、tailcatが完璧に適合するユースケースで私たちにアプローチしてきたため、それらをコピーとして提供し、tailcatがTailscaleのmagicsockの使用で直接接続に失敗した場合に、DERPフォールバックリレーをホストする手配をしました。
数ヶ月前、AIエージェントコーディングの話題が盛んだった頃に早送りします。サンドボックス化されたAIエージェントに、独自の信頼できないネストされたVMを作成するアクセス権を与え、tailcatを提供するのは非常に強力でした。遠隔地の異種ハードウェアへのアクセスを得て、AIにそれらを相互に配線させ、実験を実行させました。思いつく限り、以下のようなものがあります。
あらゆる世代のRaspberry Piのフリートへのエージェントアクセスを与える
近くのEC2インスタンスを制御し、繰り返しkexecで再起動するアンビエントアクセスを持つサンドボックス化されたEC2インスタンスへのエージェントアクセスを与え、Amazon Nitro ENAネットワークドライバを純粋なGo(Tamago下)に移植することを含む、EC2のUEFI環境でのTailscaleの移植
Goランタイムと標準ライブラリのスタック破損バグをデバッグおよび修正するために、Hyper-V VMを繰り返し作成および破棄するために、Windowsホストへのエージェントアクセスを与える
これらのほとんどの場合、おそらく技術的にはTailscaleプロパーを使用できたでしょうが、それほど手間がかかり、おそらく実行しなかったでしょう。代わりに、いくつかのポートフォワーディングを設定するか、ファイアウォールでいくつかのポートを開くだけだったでしょう。tailcatは、2つの異なる世界の2台のマシンで2つのシェルが開いていて、それらを接続したい場合、簡単なファイルコピーやポートフォワーディング、または一方から他方へのSSH接続を許可したい場合に、しばしば完璧なツールであることがわかります。特に、片方が信頼できない、一時的である、またはシステム構成に触れるのを恐れている場合です。
2021年にTaildropをローンチしたとき、最初の要求の1つは、ノード間のnetcatライクな共有でした。tailcatは現在、それ以上のものを提供します。私たちはまだ、tailcatのようなものをメインのTailscaleクライアントでも提供したいと考えていますが、それがTailscale製品の残りの部分にどのように適合するかを理解する必要があります。
tailcatをオープンソースにするもう一つの理由は、それがやや明白で避けられないことだからです。私たちは、人々が私たちのデータプレーンを使用し、改善し、バグを報告してくれることを、利己的に望んでいます。そうすることで、Tailscale製品の残りの部分がより良くなります。
「営業に連絡」
tailcatが役立つ可能性のある楽しいユースケースがあれば、私たちに連絡すべきであることを言及せずに済ませることはできません。そして、