2 ポイント 投稿者 GN⁺ 2025-04-04 | 1件のコメント | WhatsAppで共有
  • Headscale は、Tailscaleコントロールサーバーをオープンソースかつセルフホスティング可能に実装したプロジェクトであり、self-hosterや趣味開発者のプロジェクト・ラボ環境を対象としている
  • Tailscale は WireGuard ベースのモダンなVPNで、NAT traversal を使用し、ネットワーク上のコンピューター間でオーバーレイネットワークのように動作する
  • Tailscale のコントロールサーバーは、ノードの WireGuard公開鍵交換、クライアントIP割り当て、ユーザー境界の作成、ユーザー間でのマシン共有、ノードが広告したルートの公開を担う
  • Headscale は、個人利用や小規模なオープンソース組織に適した 単一のTailscaleネットワーク(tailnet) 実装を、限定的なスコープで提供する
  • このプロジェクトは Tailscale Inc. とは無関係であり、Headscale の実行には リバースプロキシやコンテナの利用をサポートまたは推奨していない

Headscaleの目的と範囲

  • HeadscaleTailscale コントロールサーバーの、セルフホスティング可能なオープンソース代替を目指している
  • 対象ユーザーは self-hoster、趣味開発者、個人プロジェクトやラボ環境の利用者
  • 実装範囲は意図的に絞られており、単一の tailnet を提供する
    • 個人利用に適している
    • 小規模なオープンソース組織にも適している

Tailscaleとコントロールサーバーの役割

  • Tailscale は WireGuard 上に構築された モダンなVPN である
  • Tailscale はネットワーク上のコンピューター間で オーバーレイネットワーク のように動作し、NAT traversal を使用する
  • Tailscale では、一部のGUIクライアントとコントロールサーバーを除くすべての要素がオープンソースである
    • 例外として挙げられているGUIクライアントは、Windows や macOS/iOS などのプロプライエタリOS向けクライアントである
  • コントロールサーバー は、Tailscale ネットワークノード間の WireGuard 公開鍵交換ポイントとして動作する
    • クライアントIPアドレスを割り当てる
    • ユーザー間の境界を作成する
    • ユーザー間でのマシン共有を可能にする
    • ノードが広告したルートを公開する
  • Tailscale network、すなわち tailnet は、Tailscale が個人ユーザーまたは組織に割り当てるプライベートネットワークである

ドキュメントとバージョンに関する注意事項

実行とビルド

  • Headscale の実行には リバースプロキシとコンテナ の使用をサポートまたは推奨していない
  • 実行方法は 公式ドキュメント を参照するよう案内している
  • NixOS ユーザー向けモジュールは nix/ ディレクトリにある
  • main ブランチの開発ビルドはコンテナイメージとバイナリで提供される

プロジェクトとの関係と貢献

  • このプロジェクトは Tailscale Inc. とは無関係 である
  • Headscale のアクティブなメンテナーの1人は Tailscale に雇用されており、勤務時間中にプロジェクトへ貢献できる
    • 当該メンテナーの貢献は他のメンテナーがレビューする
  • メンテナーたちは、self-hoster、熱心なユーザー、趣味開発者コミュニティを支援しながら持続可能なプロジェクトを作るという原則のもと、プロジェクトの方向性を共同で定めている
  • 貢献者は CONTRIBUTING.md を読む必要がある

開発環境とワークフロー

  • 貢献には最新の GoBuf が必要
    • Buf は Protobuf ジェネレーターとして使われる
  • 開発環境のセットアップには Nix の使用を推奨
    • nix develop を実行すると必要なツールがインストールされ、シェルが提供される
    • この方法により、Headscale メンテナーと同一の開発環境が保証される
  • Go コードは golangci-lint で lint し、golinesgofumpt でフォーマットする
    • golines の幅は 88 に設定されている
    • コミット前に make lintmake fmt の実行を推奨
  • Proto コードは buf で lint し、clang-format でフォーマットする
  • ドキュメントは mdformat、Markdown・YAML などその他のファイルは prettier でフォーマットする
  • proto/ を変更した場合は、Protobuf から Go コードを再生成する必要がある
    • コマンドは make generate
    • gen/ の変更は、レビューを容易にするため別コミットに分けることを推奨
  • テストとビルドはそれぞれ make testmake build で実行する
  • 推奨ワークフローは nix develop の後に make testmake build を実行する方法
    • 依存関係を自分で管理する場合は Make を直接利用できる
    • Makefile は必要なツールがない場合に警告を出し、nix develop の実行を提案する
    • 利用可能なターゲットは make help で確認できる

1件のコメント

 
GN⁺ 2025-04-04
Hacker Newsのコメント
  • 数か月ごとにこのリポジトリに戻ってきて、Tailnet lockがついに動くようになったか、その間に誰かがセキュリティ監査をしたかを確認している
    残念ながらどちらも進展がないように見え、そのためこれを自分のインフラの中核コンポーネントとしてどれほど信頼できるのか、ますます不確かになっている
    Tailscale SaaSの前提は、ファイアウォールを迂回するトンネルを作り、そのトンネル経由で何をルーティングするかを、ユーザーが直感的かつ統合された形で制御できるようにすることだ
    Headscaleはファイアウォール迂回と高度なNAT越えはうまくやっているようだが、いま迂回したばかりのセキュリティを補うだけの独自のセキュリティを提供できるのかは疑問だ
    制御サーバーがクライアントに何をするよう指示しているのかをユーザーが理解したり拒否したりする方法がなく、サーバーコードのセキュリティ監査もまったくないなら、かなり大胆な選択に見える

    • Tailnet lockはHeadscaleではTailscaleよりずっと重要度が低いように見える。Headscaleインフラを自分で直接管理しているからだ
    • Headscaleが本当にそれらの機能を自前で実装しているのか気になる
      これはTailscaleの基本バックエンドサービスの上に載った制御レイヤーだと思っていたのだが、新しい方式で接続を仲介しているのだろうか?
      ZeroTierはかなりよく使うがTailscaleには詳しくないので、当たり前の質問かもしれない
    • メンテナーの1人はいまTailscaleで働いている
    • 関連して https://github.com/juanfont/headscale/issues/2416 を参照するとよい
  • セルフホスト型のオーケストレーションサーバーに興味があるなら、Netbirdも見る価値がある
    似たツールだがサーバーもオープンソースで公開されており、セルフホスト型の制御サーバーに decent なGUIと有料版の機能が付いてくる
    https://netbird.io/knowledge-hub/tailscale-vs-netbird

    • Headscaleと比べると、Netbirdは可動部品が本当に多い
      堅牢で強力、機能も多そうだが、Headscaleのセルフホストははるかに単純で要件も少ない
    • TailscaleからNetbirdへゆっくり移行中だが、TailscaleがCGNAT経路全体を持っていくようなふざけた挙動を除けば、とてもよく動いている
      いまはTailscaleも動かし続けているが、徐々に廃止してNetbirdへ完全移行する方向に近づいている
    • Netbirdを使いたいが、TailscaleのtsnetのようにGoバイナリへ埋め込める機能がまだない
      関連するGitHub issueはこちら
      https://github.com/netbirdio/netbird/issues/1103
    • IPv6がないので本当に致命的な欠点だ: https://github.com/netbirdio/netbird/issues/46
    • NetbirdもTailscaleのように洗練されたNAT越えをしてくれるのか気になる
  • タイトルにプロジェクト名であるHeadscaleを入れるとよさそうだ
    HeadscaleはHNに何度も上がっているプロジェクトだ

  • Headscaleがインスタンス間のピアリング/フェデレーションをサポートするとよさそうだ。ACLの再設計後になるかもしれない
    主な問題の1つはアドレス衝突だ
    提案はこうだ。ユニークローカルアドレス(ULA)範囲のIPv6専用オーバーレイネットワークとし、残りの121ビットをデバイスアドレス用の下位20ビット(約100万個)と、サーバー公開鍵ハッシュである上位101ビットに分ける
    別インスタンスの公開鍵を追加してフェデレーションし、ポリシーとACLでノード間通信を管理すればよい
    良いアイデアだと思うが、2023年に持ち出したとき、メンテナーのkradalbyはスコープ外だと言っていた: https://github.com/juanfont/headscale/issues/1370

  • Headscaleを半年間うまく使っている
    とても良くて、以前はTailscaleネットワークなしでどうやって暮らしていたのかわからないほどだ
    OpenBSD向けにパッケージ化されていて、私はそのパッケージをサーバーとして使っている

  • Headscaleが気に入っていて、つい先ほど本番環境に入れたが、とてもよく動いている

    • Headscaleを2.5年間運用してきて、かなり良かった
      ログインにはGmailドメインを使っているが、ユーザーが自分のデバイスを直接登録できるという大きな利点がある
      以前のOpenVPNでは、運用チームが証明書と設定を直接渡す必要があった
      唯一の欠点は、ユーザーが誤って自前サーバーではなくTailscaleのログインサーバーに接続してしまい、なぜサービスにアクセスできないのか迷う場合があることだ
      ユーザーグループでアクセス可能なサービスを設定している
      まだ古いバージョンのHeadscaleを使っているが、新しい制御プレーンへ移植しなければならない連携があるためだ
      headscale node list | wc基準でノードは約250個で、大半はサーバーだ
      Tailscaleがルーティングテーブルとファイアウォールルールに魔法のように手を入れるのはあまり好きではないが、概ね問題にはならず、かなりうまく動いていた
    • 会社全体向けの内部サービスとしてデプロイしたという意味なのか気になる
  • いくつかのユースケース、たとえばモバイルアクセスや macOS GUI では、公式の Tailscale クライアントが制御サーバーを設定できる機能を維持してくれないと Headscale を使えない。
    Tailscale で避けられない品質低下が始まった瞬間、この機能は消えるだろう。
    今は Tailscale に非常に満足している顧客だが、過去に他社が売却されたりベンチャー資金が尽きたりして何度も痛い目を見てきた立場から言っている。

    • 非オープンソース OS の GUI 部分を除けば、Tailscale クライアントの大半は オープンソースではないのか?
    • 記憶が正しければ、Tailscale はどこかで Headscale はむしろ 売上にプラスだと言っていたと思う。
      それもありそうな話だ。Headscale は主にホームラボユーザーや小規模な趣味ユーザーが使っており、Pulsesecure、Cisco Anyconnect、GlobalProtect ではなく、セルフホストの OpenVPN や WireGuard と競合している。
      余暇に新しい技術が好きだが、インフラのコントロールは手放したくない人たちに Tailscale を紹介する経路になっている。
      そういう人たちが職場に Tailscale の専門知識と熱意を持ち込むことになる。
      企業は、IT インフラ管理が中核能力でない限り、あまりやりたがらない。
      もちろん一部の企業は Tailscale 本製品ではなく Headscale を選ぶだろうが、企業規模と金額を考えると少数である可能性が高い。
      それは売上原価に近く、Facebook 広告やシリコンバレーの道路脇の看板広告と大きく変わらない。
    • Tailscale で最も不満なのはクライアント、特に モバイルクライアントのバッテリー消費だ。
      職場で Tailscale を使えない理由は、こちらが制御できないサーバーを通じてトラフィックがルーティングされるからだ。
      職場で Tailscale を本当に使いたいし、多くの問題を解決してくれるはずだ。
      ポートを開ける必要があるなら受け入れられるが、そのポートを通じてトラフィックをトンネルするのは非常に心配だ。
  • 面白そうだ。WireGuard + OpenWrt 構成と比べて、どんな付加価値があるのか気になる。

    • デバイス同士が手動設定なしで、複雑な NAT の背後にあっても ピアツーピアで接続される。
      中央で管理される ACL の制約を受けながら、そのまま動作する。
      Tailscale を「単なる WireGuard オーケストレーター」と過小評価することがあるが、実際にはそれよりはるかに多い。
      プロダクトの観点では、WireGuard は実装の詳細にすぎない。
    • メッシュ VPN なのでピア同士が直接通信し、追加の遅延がない。
      私は以前 Headscale UI があまりに基本的だと感じて Netbird を選んだが、この数年で改善されているかもしれない。
    • Tailscale の価値提案は、ある程度技術に慣れた人でも一人で設定・管理できる WireGuard だ。
      多数のクライアントで動作し、私の Apple TV も Tailscale ネットワークに接続されている。
      設定には 1 分ほどしかかからず、ゲートウェイとしても使える。
    • 固定 IP がなかったり、自宅ネットワークで何かがリッスンしていることを望まない人もいる。
      Tailscale や外部にホストした Headscale なら、そのように使える。
  • Tailscale の調整サーバーが侵害され、Tailnet lock が有効になっている場合、自分のデバイスが侵害されるリスクはどの程度なのか気になる。