Delphi TURN Server

Betreibe deinen eigenen TURN-Server (RFC 8656) in Delphi. Allokiere weitergeleitete Transportadressen für Clients, die keinen Peer-to-Peer-Pfad herstellen können — mit Long-Term-Credentials und Per-Allocation-Quotas.

TsgcTURNServer

Ein selbst gehosteter TURN-Server — verarbeitet Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, verwaltet Allokationen und deren Lebensdauer und validiert Long-Term-Credentials.

Komponentenklasse

TsgcTURNServer

Protokoll

TURN (RFC 8656)

Plattformen

Windows, macOS, Linux, iOS, Android

Edition

Enterprise

Platzieren, Realm setzen, Credentials ausgeben

Setze Port und den Realm auf TURNOptions.Authentication.LongTermCredentials, liefere Passwörter pro Benutzer über OnSTUNRequestAuthorization, Active := True — dein Server allokiert jetzt Relays für jeden RFC-8656-Client.

uses
  sgcP2P, sgcP2P_STUN_Classes;

// TFormTURNServer enthält FServer: TsgcTURNServer und den Handler

procedure TFormTURNServer.StartServer;
begin
  FServer := TsgcTURNServer.Create(nil);
  FServer.Port := 3478;

  FServer.TURNOptions.Authentication.Enabled := True;
  FServer.TURNOptions.Authentication.LongTermCredentials.Enabled := True;
  FServer.TURNOptions.Authentication.LongTermCredentials.Realm :=
    'turn.example.com';

  // Missbrauch begrenzen: Allokationen pro Benutzer und maximale Lebensdauer
  FServer.TURNOptions.Allocation.MaxUserAllocations := 4;
  FServer.TURNOptions.Allocation.MaxLifeTime := 3600;

  FServer.OnSTUNRequestAuthorization := OnSTUNRequestAuthorization;

  FServer.Active := True;
end;

procedure TFormTURNServer.OnSTUNRequestAuthorization(Sender: TObject;
  const aRequest: TsgcSTUN_Message;
  const aUsername, aRealm: string;
  var Password: string);
begin
  // das Passwort dieses Benutzers zurückgeben, leer lehnt die Anfrage ab
  Password := LookupPassword(aUsername);
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Classes.hpp
TsgcTURNServer *Server = new TsgcTURNServer(this);
Server->Port = 3478;
Server->TURNOptions->Authentication->Enabled = true;
Server->TURNOptions->Authentication->LongTermCredentials->Enabled = true;
Server->TURNOptions->Authentication->LongTermCredentials->Realm = "turn.example.com";
Server->TURNOptions->Allocation->MaxUserAllocations = 4;
Server->OnSTUNRequestAuthorization = OnSTUNRequestAuthorization;
Server->Active = true;

Was steckt drin

Ein selbst gehostetes Relay — sodass deine WebRTC- und ICE-Deployments nicht mehr auf Drittanbieter-TURN-Provider angewiesen sind.

Allocate / Refresh / Free

Bedient Allocate-Requests mit REQUESTED-TRANSPORT, wählt einen freien Relay-Port und verfolgt die Lebensdauer. Refresh verlängert die Allokation; der Server baut sie beim Ablauf ab.

CreatePermission / ChannelBind

Verfolgt Peer-Permissions und Channel-Bindings pro Allokation. Verwirft Send-/Data-Frames für Peers, die gemäß RFC 8656 §9 nicht freigeschaltet sind.

Send / Data / ChannelData

Sowohl 36-Byte-Send/Data-Envelopes als auch 4-Byte-ChannelData-Frames werden unterstützt. Das Relay leitet Datagramme zwischen der weitergeleiteten Transportadresse und dem gebundenen Peer weiter.

Long-Term-Credentials

TURNOptions.Authentication.LongTermCredentials enthält den Realm, und OnSTUNRequestAuthorization übergibt dir den Benutzernamen und diesen Realm, sodass du das Passwort zurückgibst. Der Server validiert MESSAGE-INTEGRITY und rotiert die Nonces selbst.

Quotas und Relay-Ports

TURNOptions.Allocation.MaxUserAllocations begrenzt, wie viele Relays ein Benutzer bekommt, DefaultLifeTime und MaxLifeTime begrenzen deren Lebensdauer, und MinPort / MaxPort / RelayIP legen den Relay-Bereich fest. Ein Benutzer über dem Limit erhält 486 Allocation Quota Reached.

Jede Allokation prüfen

OnTURNBeforeAllocate liefert dir die anfragende Adresse mit einem var Reject, und OnTURNBeforeRelayIndication sowie OnTURNBeforeRelayChannelData tun dasselbe für jedes weitergeleitete Datagramm. OnTURNCreateAllocation und OnTURNDeleteAllocation verfolgen die bestehenden Allokationen.

Spezifikationen & Referenzen

Maßgebliche Quellen für das Protokoll, das diese Komponente implementiert.

Dokumentation & Demos

Springe direkt zur Komponentenreferenz, hole dir das sofort lauffähige Demo-Projekt und lade die Testversion herunter.

Online-Hilfe — TsgcTURNServer Vollständige Referenz zu Eigenschaften, Methoden und Ereignissen dieser Komponente.
Demo-Projekt — Demos\35.P2P\03.TURN Sofort lauffähiges Beispielprojekt. Wird im sgcWebSockets-Paket mitgeliefert — lade unten die Testversion herunter.
Technisches Dokument (PDF) Funktionen, Schnellstart, Code-Beispiele für Delphi & C++ Builder und Primärquellen-Referenzen — nur diese Komponente.
Benutzerhandbuch (PDF) Umfassendes Handbuch, das jede Komponente der Bibliothek abdeckt.

TURN-Server – Häufig gestellte Fragen

Häufige Fragen zum Betrieb eines selbst gehosteten TURN-Relays in Delphi und C++ Builder.

Platziere eine TsgcTURNServer-Komponente, setze Port und Realm, liefere Passwörter pro Benutzer aus dem OnSTUNRequestAuthorization-Ereignis und setze dann Active := True. Der Server verarbeitet dann Allocate, CreatePermission, ChannelBind, Send, Refresh und Data für jeden RFC-8656-Client und leitet Datagramme zwischen der weitergeleiteten Transportadresse und dem gebundenen Peer weiter.
Er implementiert TURN gemäß RFC 8656, validiert Long-Term-Credentials mit MESSAGE-INTEGRITY und rotiert Nonces automatisch. Er verweist außerdem auf RFC 6062 für TURN-over-TCP-Allokationen und RFC 8489 für das zugrunde liegende STUN-Nachrichtenformat und unterstützt UDP-, TCP- und TLS-over-TCP-Transporte.
Nein. TsgcTURNServer ist ein selbst gehostetes Relay, das du in deine eigene Delphi- oder C++ Builder-Anwendung einbettest, sodass deine WebRTC- und ICE-Deployments nicht mehr von Drittanbieter-TURN-Providern oder einer separaten coturn-Installation abhängen. Quotas pro Allocation (max. Allocations pro Benutzer, Bandbreite und Lifetime) begrenzen Missbrauch, wobei OnQuotaExceeded Ablehnungen meldet.
Der TURN-Server ist Teil der sgcWebSockets-Enterprise-Edition und unterstützt Delphi 7 bis zum aktuellen Delphi-Release und die passenden C++ Builder-Versionen, unter Windows, macOS, Linux, iOS und Android. Lade die kostenlose Testversion herunter, um ein TURN-Relay in deinem eigenen Projekt aufzusetzen.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit, deinen eigenen TURN-Server zu betreiben?

Lade die kostenlose Testversion herunter und richte ein TURN-Relay in Delphi ein.