
headscale v0.29.3
オープンソースでセルフホスト可能なTailscaleコントロールサーバーの実装。

Tailscale コントロールサーバーのオープンソースでセルフホスト可能な実装です。
チャットには Discord サーバーにご参加ください。
注意: 正しいサンプル設定を確保するため、使用しているリリースバージョンと同じ GitHub タグを常に選択してください。main ブランチには未リリースの変更が含まれている可能性があります。ドキュメントは安定版と開発版の両方で利用可能です:
Tailscale とは
Tailscale は Wireguard の上に構築されたモダンな VPNです。 ネットワーク内のコンピューター間でNAT トラバーサルを用いてオーバーレイネットワークのように動作します。
Tailscale のすべてはオープンソースです。ただし、プロプライエタリな OS 向けの GUI クライアント(Windows および macOS/iOS)とコントロールサーバーを除きます。
コントロールサーバーは、Tailscale ネットワーク内のノードに対する Wireguard 公開鍵の交換ポイントとして機能します。クライアントの IP アドレスを割り当て、各ユーザー間の境界を作成し、ユーザー間でのマシンの共有を可能にし、ノードが広告するルートを公開します。
Tailscale ネットワーク(tailnet)は、プライベートユーザーまたは組織に対して Tailscale が割り当てるプライベートネットワークです。
設計目標
Headscale は、Tailscale コントロールサーバーのセルフホスト可能なオープンソース代替の実装を目指しています。Headscale の目標は、セルフホスターやホビイストに、自身のプロジェクトやラボで使用できるオープンソースサーバーを提供することです。個人利用や小規模なオープンソース組織に適した、単一 の Tailscale ネットワーク(tailnet)という狭いスコープを実装しています。
Headscale の支援
headscale を気に入り、役に立っていると感じていただけたら、リポジトリにはスポンサーシップと寄付のボタンが用意されています。
機能
ドキュメントの「機能」をご覧ください。
クライアント OS のサポート
ドキュメントの「クライアントとオペレーティングシステムのサポート」をご覧ください。
headscale の実行
リバースプロキシやコンテナを使用して Headscale を実行することは、サポートも推奨もしていないことにご注意ください。
ドキュメントをご覧ください。
NixOS ユーザー向けには、nix/ にモジュールが用意されています。
main からのビルド
main ブランチからの開発ビルドは、コンテナイメージおよびバイナリとして利用可能です。詳細は開発ビルドのドキュメントをご覧ください。
講演
- Fosdem 2026(動画): Headscale & Tailscale: The complementary open source clone
- Kristoffer Dalby による発表
- Fosdem 2023(動画): Headscale: How we are using integration testing to reimplement Tailscale
- Juan Font Alonso と Kristoffer Dalby による発表
免責事項
このプロジェクトは Tailscale Inc. とは関係ありません。
ただし、Headscale のアクティブなメンテナーの一人は Tailscale に雇用されており、プロジェクトへの貢献に勤務時間を費やすことが許可されています。このメンテナーによる貢献は、他のメンテナーによってレビューされます。
メンテナーたちは協力してプロジェクトの方向性を定めています。基本原則は、持続可能なプロジェクトでありながら、セルフホスター、愛好家、ホビイストのコミュニティに貢献することです。
コントリビューション
CONTRIBUTING.md ファイルをお読みください。
AI_POLICY.md もご覧ください。
要件
headscale に貢献するには、最新バージョンの Go と Buf(Protobuf ジェネレーター)が必要です。
開発環境のセットアップには Nix の使用を推奨します。これは nix develop で実行でき、ツールがインストールされシェルが提供されます。これにより、headscale のメンテナーと同じ開発環境が保証されます。
コードスタイル
貢献者の増加に伴う一貫性を確保するため、このプロジェクトではリンティングとスタイル/フォーマットのルールを採用しています:
Go コードは golangci-lint でリントされ、golangci-lint のフォーマッター(gofumpt、gci、goimports)でフォーマットされます。開発中はエディターでこれらのツールを実行するよう設定し、コードをコミットする前に必ず make lint と make fmt を実行してください。
Proto コードは buf でリントされ、clang-format でフォーマットされます。
ドキュメントは mdformat でフォーマットされます。
その他(Markdown、YAML など)は prettier でフォーマットされます。
具体的な設定については .golangci.yaml と Makefile を確認してください。
開発ツールのインストール
- Go
- Buf
- Protobuf ツール
インストールと有効化:
nix develop
テストとビルド
プロジェクトの一部では、Protobuf からの Go コードの生成が必要です
(proto/ に変更が加えられた場合)。また、次のコマンドで(再)生成する必要があります:
make generate
注: レビューを容易にするため、gen/ からの変更は別のコミットでチェックインしてください。
テストを実行するには:
make test
プログラムをビルドするには:
make build
開発ワークフロー
必要なツールがすべて揃っていることを保証するため、依存関係の管理には Nix の使用を推奨します。依存関係を自分で管理したい場合は、Make を直接使用できます:
Nix を使用する場合(推奨):
nix develop
make test
make build
独自の依存関係を使用する場合:
make test
make build
Makefile は、必要なツールが不足している場合に警告を表示し、nix develop の実行を提案します。利用可能なすべてのターゲットを確認するには make help を実行してください。
コントリビューター
contrib.rocks で作成。