Delphi & C++ Builder 向け STUN サーバーコンポーネント | eSeGeCe

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

エディション

Enterprise

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

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

uses
  sgcP2P;

var
  STUNServer: TsgcSTUNServer;
begin
  STUNServer := TsgcSTUNServer.Create(nil);
  STUNServer.Port := 3478;

  // optional: long-term credentials
  STUNServer.Authentication.Enabled  := True;
  STUNServer.Authentication.Realm    := 'example.com';
  STUNServer.OnSTUNAuthenticate := procedure(Sender: TObject;
    const aUsername: string; var aPassword: string;
    var Accept: Boolean)
  begin
    aPassword := LookupPassword(aUsername);
    Accept    := aPassword <> '';
  end;

  STUNServer.Active := True;
end;
// uses: sgcP2P
TsgcSTUNServer *STUNServer = new TsgcSTUNServer(this);
STUNServer->Port = 3478;
STUNServer->Active = true;

主な機能

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

Binding リクエストハンドラ

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

長期 / 短期認証

Authentication.Enabled を切り替えることで MESSAGE-INTEGRITY を必須化できます。OnSTUNAuthenticate によりリクエストのユーザー名を取得できるため、保存先からパスワードを返却するだけで認証が完了します。

IP 単位のレート制限

TsgcWSRateLimiter と組み合わせれば、ソース IP ごとに受信 STUN リクエストを制限できます。増幅攻撃への有効な対策となります。

IPv4 / IPv6

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

TCP 上の TLS (RFC 8489 §5)

STUN-over-TLS の構成では、基底の TCP リスナーに SSL オプションを設定します。ネットワーク出口で UDP がブロックされる環境で有効です。

診断

OnSTUNRequest / OnSTUNResponse は Method、MessageType、解析済み属性リストを含むトランザクションをすべて記録します。デプロイ環境のデバッグに最適です。

仕様と参考資料

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

ドキュメントとデモ

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

オンラインヘルプ — 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 を有効にし、OnSTUNAuthenticate を処理して、長期認証情報による 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 エンドポイントを立ち上げてください。

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

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