Delphi STUN サーバー

Delphi で独自の STUN (RFC 8489) サーバーを運用できます。バインディングリクエストに対し、正規の XOR-MAPPED-ADDRESS で応答します。プライベートネットワーク、オンプレミス環境、ICE ブートストラップで活用いただけます。

TsgcSTUNServer

型付きの RFC 8489 STUN サーバーです。Binding / Indication メッセージを処理し、XOR-MAPPED-ADDRESS で応答します。長期間認証用に MESSAGE-INTEGRITY を強制することも可能です。

コンポーネントクラス

TsgcSTUNServer

プロトコル

STUN (RFC 8489)

プラットフォーム

Windows, macOS, Linux, iOS, Android

エディション

Professional / Enterprise

配置してポートを設定するだけで STUN エンドポイントが完成

Port (デフォルト 3478) を設定し、Active := True にするだけで、サーバーは Binding リクエストに対し正規の RFC 8489 XOR-MAPPED-ADDRESS で応答します。

uses
  sgcP2P, sgcP2P_STUN_Classes;

// TFormSTUNServer は FServer: TsgcSTUNServer とハンドラーを保持します

procedure TFormSTUNServer.StartServer;
begin
  FServer := TsgcSTUNServer.Create(nil);
  FServer.Port := 3478;

  // オプション: 長期認証情報
  FServer.STUNOptions.Authentication.Enabled := True;
  FServer.STUNOptions.Authentication.LongTermCredentials.Enabled := True;
  FServer.STUNOptions.Authentication.LongTermCredentials.Realm :=
    'example.com';

  FServer.OnSTUNRequestAuthorization := OnSTUNRequestAuthorization;

  FServer.Active := True;
end;

procedure TFormSTUNServer.OnSTUNRequestAuthorization(Sender: TObject;
  const aRequest: TsgcSTUN_Message;
  const aUsername, aRealm: string;
  var Password: string);
begin
  // そのユーザーのパスワードを返します。空文字はリクエストを拒否します
  Password := LookupPassword(aUsername);
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Classes.hpp
TsgcSTUNServer *Server = new TsgcSTUNServer(this);
Server->Port = 3478;
Server->STUNOptions->Authentication->Enabled = true;
Server->STUNOptions->Authentication->LongTermCredentials->Enabled = true;
Server->STUNOptions->Authentication->LongTermCredentials->Realm = "example.com";
Server->OnSTUNRequestAuthorization = OnSTUNRequestAuthorization;
Server->Active = true;

主な機能

セルフホスト型の STUN サーバー。オンプレミスの WebRTC 環境やプライベートクラウドでのテストに最適です。

Binding リクエストハンドラ

受信した Binding リクエストには XOR-MAPPED-ADDRESS、MAPPED-ADDRESS (レガシー)、FINGERPRINT を付与して応答し、RFC 8489 標準の応答形式に準拠します。

長期 / 短期認証

STUNOptions.Authentication.Enabled を切り替えると MESSAGE-INTEGRITY を必須化でき、realm は LongTermCredentials.Realm で設定します。OnSTUNRequestAuthorization ではユーザー名と realm が渡されるため、対応するパスワードを返却します。

制御できる応答属性

STUNOptions.BindingAttributes では、従来の RFC 3489 MAPPED-ADDRESS、OTHER-ADDRESS、RESPONSE-ORIGIN、SOURCE-ADDRESS のオンとオフを切り替えられます。AlternateServer を設定すると、指定したサーバーを示す 300 Try Alternate を返します。

IPv4 / IPv6

IPVersion によって、いずれかのファミリまたはデュアルスタックでバインドできます。XOR-MAPPED-ADDRESS の応答は受信トランスポートのファミリに合わせて生成されます。

stale nonce のローテーション

LongTermCredentials.StaleNonce は nonce の有効期間を設定します。期限が切れると、サーバーは新しい nonce とともに 438 Stale Nonce を返します。これは RFC 8489 §9.2 が求める動作です。

診断

OnSTUNRequestSuccessOnSTUNRequestError では、リクエストと、サーバーが送信しようとしているレスポンスが渡され、var Accept をクリアできます。LogFile は生のやり取りをディスクに書き出します。

仕様と参考資料

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

ドキュメントとデモ

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

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

STUN サーバーに関するよくある質問

Delphi および C++ Builder でセルフホスト型 STUN サーバーを運用することに関するよくある質問です。

TsgcSTUNServer コンポーネントを配置し、Port(デフォルトは 3478)を設定して Active := True を設定します。すると、サーバーは受信した Binding リクエストに対し、正規の XOR-MAPPED-ADDRESS で応答します。必要に応じて Authentication を有効にし、OnSTUNRequestAuthorization を処理して、長期認証情報による MESSAGE-INTEGRITY を要求できます。
RFC 8489 に準拠して STUN を実装し、Binding および Indication メッセージを処理して、XOR-MAPPED-ADDRESS、レガシーの MAPPED-ADDRESS、FINGERPRINT で応答します。IPv4 と IPv6、オプションの STUN-over-TLS をサポートし、NAT 動作検出については RFC 5780 を参照します。
いいえ。TsgcSTUNServer は、ご自身の Delphi または C++ Builder アプリケーションに直接組み込めるセルフホスト型 STUN サーバーなので、別途 coturn インスタンスをデプロイして運用する必要はありません。プライベートネットワーク、オンプレミスの WebRTC 環境、ご自身の管理下での ICE ブートストラップに最適です。
STUN サーバーは sgcWebSockets Enterprise エディションの一部であり、Delphi 7 から最新の Delphi リリースまで、および対応する C++ Builder のバージョンを、Windows、macOS、Linux、iOS、Android でサポートします。無料体験版をダウンロードして、ご自身のプロジェクトで STUN エンドポイントを立ち上げてください。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

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

体験版をダウンロードして、Delphi で STUN エンドポイントを立ち上げましょう。