ヘッドスケール、テールスケールのオープンソース実装

数日前、このブログでFirezoneについて取り上げました。Firezoneは、WireGuardベースのVPNサーバーを作成するための優れたユーティリティです。

さて、今回は「Headscale」という非常によく似たユーティリティについてお話しします。これは、Tailscale VPNサーバーコンポーネントのオープンソース実装として開発されたプロジェクトで、サードパーティのサービスに縛られることなく、自社内でTailscaleのようなVPNを構築することができます。

Tailscaleは、地理的に分散した任意の数のホストをメッシュネットワークをイメージしたネットワークに組み合わせることを可能にします。このネットワークでは、各ノードはVPNプロバイダーの中央集中型外部サーバーを経由してトラフィックを送信することなく、他のノードと直接(P2P)または近隣ノードを介して通信します。

本システムは、 ACLベースのルーティングおよびアクセス制御をサポートし、ネットワークアドレス変換(NAT)使用条件下での通信チャネルの確立を可能にするだけでなく、STUN、ICE、およびDERPメカニズム(TURNに類似しているが、HTTPSに基づく)もサポートしています。特定のノード間の通信チャネルがブロックされた場合、ネットワークはトラフィックを他のノード経由で再ルーティングできます。

Tailscaleは、メッシュルーティングを備えた分散型VPNネットワークの構築を目的として設計されたNebulaプロジェクトとは異なり、ノード間のデータ転送を整理するためにWireguardプロトコルを使用する一方、Tincプロジェクトの開発成果を利用しており、 GSMパケットの暗号化にはAES-256アルゴリズムを使用している(WireguardはChaCha20暗号化を使用しており、テストではより高いパフォーマンスと応答性を示している)。

同様のプロジェクトであるInnernetは、別途開発が進められており、ノード間のデータ交換にはWireguardプロトコルが使用されています。TailscaleやNebulaとは異なり、InnernetはACL(アクセス制御リスト)に基づく異なるアクセス分離システムを採用しています。従来のインターネットネットワークのように、ラベルを個々のノードやサブネットにリンクさせて異なるIPアドレス範囲を分離・隔離するのではなく、独自のシステムとなっています。

また、InnernetはGoの代わりにRustを使用しており、NATトラバーサルサポートが改善されたInnernet1.5が数日前にリリースされたことは言及する価値があります。 Wireguardを使用してさまざまなトポロジのネットワークに接続できるNetmakerプロジェクトもありますが、そのコードはSSPL(Server Side Public License)の下で提供されており、差別的な要件があるためオープンではありません。

Tailscaleはフリーミアムモデルで提供されており、個人向けには無料アクセス、企業やチーム向けには有料アクセスを提供しています。WindowsおよびmacOS用のグラフィカルアプリケーションを除き、TailscaleクライアントコンポーネントはBSDライセンスの下でオープンソースプロジェクトとして開発されています。

Tailscaleの外部委託サーバーソフトウェアは、新規クライアントの認証、鍵管理の調整、ノード間の通信管理を行うものであり、独自仕様である。Headscaleプロジェクトは、この問題を解決し、Tailscaleサーバーコンポーネントに依存しないオープンソースの実装を提供する。

Headscaleは、ノード間の公開鍵交換の機能を担うとともに、ノード間のIPアドレス割り当てやルーティングテーブルの配布といった操作も実行します。

Headscaleは現状では、MagicDNSとSmart DNSのサポートを除き、管理サーバーのコア機能をすべて実装しています。具体的には、ノードの登録(Web経由を含む)、ノードの追加や削除によるネットワークの適応、名前空間を使用したサブネット化(複数ユーザー向けのVPNの作成が可能)、異なる名前空間内のサブネットへの共有ノードアクセスの整理、ルーティング制御(外部ネットワークにアクセスするためのアウトバウンドノードの割り当てを含む)、ACLによる共有アクセス、およびDNS実行をサポートしています。

ヘッドスケールコードはGoで記述されており、BSDライセンスの下で配布されています。 このプロジェクトは、欧州宇宙機関のJuanFontによって開発されています。

最後に、さらに詳しく知りたい場合は、以下のリンクから詳細をご確認いただけます。


Googleで優先ソースとして追加する