TURN サーバー

Delphi で独自の TURN (RFC 8656) サーバーを運用できます。ピアツーピア経路を確立できないクライアントに対し、長期認証情報と割り当て単位のクォータを備えたリレーアドレスを提供します。

TsgcTURNServer

セルフホスト型の TURN サーバーです。Allocate / CreatePermission / ChannelBind / Send / Refresh / Data を処理し、割り当てと帯域幅を管理し、長期認証情報を検証します。

コンポーネントクラス

TsgcTURNServer

プロトコル

TURN (RFC 8656)

プラットフォーム

Windows, macOS, Linux, iOS, Android

エディション

Enterprise

配置して Realm を設定し、認証情報を発行するだけ

Port と Realm を設定し、OnTURNAuthenticate でユーザーごとのパスワードを返却し、Active := True にします。これだけで RFC 8656 準拠の任意のクライアントにリレーを割り当てるサーバーが完成します。

uses
  sgcP2P;

var
  TURNServer: TsgcTURNServer;
begin
  TURNServer := TsgcTURNServer.Create(nil);
  TURNServer.Port  := 3478;
  TURNServer.Realm := 'turn.example.com';

  TURNServer.OnTURNAuthenticate := procedure(Sender: TObject;
    const aUsername: string; var aPassword: string;
    var Accept: Boolean)
  begin
    aPassword := LookupPassword(aUsername);
    Accept    := aPassword <> '';
  end;

  TURNServer.Active := True;
end;
// uses: sgcP2P
TsgcTURNServer *TURNServer = new TsgcTURNServer(this);
TURNServer->Port  = 3478;
TURNServer->Realm = "turn.example.com";
TURNServer->Active = true;

主な機能

セルフホスト型のリレーです。WebRTC や ICE のデプロイをサードパーティの TURN プロバイダーに依存させないようにできます。

Allocate / Refresh / Free

REQUESTED-TRANSPORT 付きの Allocate リクエストを処理し、空きリレーポートを選択して有効期限を管理します。Refresh で割り当てを延長し、有効期限の到来時にサーバーが解放します。

CreatePermission / ChannelBind

割り当てごとのピア権限とチャネルバインディングを管理します。RFC 8656 §9 に基づき、権限のないピアからの Send/Data フレームは破棄します。

Send / Data / ChannelData

36 バイトの Send / Data エンベロープと 4 バイトの ChannelData フレームの両方に対応します。リレーは、リレー側トランスポートアドレスとバインド済みピアの間でデータグラムを転送します。

長期認証情報

OnTURNAuthenticate でユーザー名を受け取り、パスワードを返却するだけで、サーバーは MESSAGE-INTEGRITY を検証し、nonce を自動的にローテーションします。

クォータ

Quota.MaxAllocationsPerUserQuota.MaxBandwidthKbpsQuota.AllocationLifetime を設定して悪用を抑制できます。拒否は OnQuotaExceeded から通知されます。

TCP / TLS 上の TURN

基底サーバーのトランスポートを切り替えるだけで、UDP、TCP、TCP 上の TLS のすべてに対応します。WebRTC クライアントは NAT を通過できるものを選択します。

仕様と参考資料

このコンポーネントが実装するプロトコルの一次資料です。

ドキュメントとデモ

コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、そして体験版のダウンロードはこちらです。

オンラインヘルプ — TsgcTURNServer 本コンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。
デモプロジェクト — Demos\35.P2P\03.TURN すぐに実行可能なサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。下記より体験版をダウンロードしてください。
技術ドキュメント (PDF) 本コンポーネントのみを対象とした機能解説、クイックスタート、Delphi および C++ Builder のコードサンプル、一次資料への参照を収録しています。
ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した総合マニュアルです。

独自の TURN サーバーを運用しませんか?

体験版をダウンロードして、Delphi で TURN リレーを立ち上げましょう。