Servidor TURN para Delphi

Ejecuta tu propio servidor TURN (RFC 8656) en Delphi. Asigna direcciones de transporte retransmitidas para clientes que no pueden establecer una ruta peer-to-peer, con credenciales long-term y cuotas por asignación.

TsgcTURNServer

Un servidor TURN autoalojado — procesa Allocate / CreatePermission / ChannelBind / Send / Refresh / Data, gestiona las asignaciones y su duración, valida credenciales long-term.

Clase del componente

TsgcTURNServer

Protocolo

TURN (RFC 8656)

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Enterprise

Coloca, configura el realm, entrega credenciales

Configura Port y el realm en TURNOptions.Authentication.LongTermCredentials, proporciona contraseñas por usuario mediante OnSTUNRequestAuthorization, Active := True — tu servidor ya asigna relays a cualquier cliente RFC 8656.

uses
  sgcP2P, sgcP2P_STUN_Classes;

// TFormTURNServer contiene FServer: TsgcTURNServer y el 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';

  // acota el abuso: asignaciones por usuario y duración máxima
  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
  // devuelve la contraseña de ese usuario, vacía rechaza la petición
  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;

Qué incluye

Un relay autoalojado — permite que tus despliegues WebRTC e ICE dejen de depender de proveedores TURN externos.

Allocate / Refresh / Free

Atiende las peticiones Allocate con REQUESTED-TRANSPORT, elige un puerto de relay libre y controla su duración. Refresh prolonga la asignación; el servidor la elimina al expirar.

CreatePermission / ChannelBind

Controla los permisos por par y los channel bindings por asignación. Descarta frames Send/Data de pares que no han sido permitidos según RFC 8656 §9.

Send / Data / ChannelData

Se admiten tanto los sobres Send / Data de 36 bytes como los frames ChannelData de 4 bytes. El relay reenvía datagramas entre la dirección de transporte retransmitida y el par enlazado.

Credenciales long-term

TURNOptions.Authentication.LongTermCredentials contiene el realm, y OnSTUNRequestAuthorization te entrega el nombre de usuario y ese realm para que devuelvas la contraseña. El servidor valida MESSAGE-INTEGRITY y rota los nonces automáticamente.

Cuotas y puertos de relay

TURNOptions.Allocation.MaxUserAllocations acota cuántos relays obtiene un usuario, DefaultLifeTime y MaxLifeTime acotan cuánto vive cada uno, y MinPort / MaxPort / RelayIP fijan el rango de relay. Un usuario que supere el límite recibe 486 Allocation Quota Reached.

Filtra cada asignación

OnTURNBeforeAllocate te entrega la dirección solicitante con un var Reject, y OnTURNBeforeRelayIndication y OnTURNBeforeRelayChannelData hacen lo mismo con cada datagrama retransmitido. OnTURNCreateAllocation y OnTURNDeleteAllocation permiten seguir las que siguen vivas.

Especificaciones y referencias

Fuentes autorizadas del protocolo que implementa este componente.

Documentación y demos

Accede a la referencia del componente, descarga el proyecto demo listo para ejecutar y la versión de prueba.

Ayuda en línea — TsgcTURNServer Referencia completa de propiedades, métodos y eventos de este componente.
Proyecto demo — Demos\35.P2P\03.TURN Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descarga la prueba abajo.
Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi y C++ Builder y referencias a fuentes primarias — solo este componente.
Manual de usuario (PDF) Manual completo que cubre cada componente de la biblioteca.

Preguntas frecuentes sobre el servidor TURN

Preguntas habituales sobre la ejecución de un relay TURN autoalojado en Delphi y C++ Builder.

Coloca un componente TsgcTURNServer, establece Port y Realm, proporciona las contraseñas por usuario desde el evento OnSTUNRequestAuthorization, y luego pon Active := True. El servidor maneja entonces Allocate, CreatePermission, ChannelBind, Send, Refresh y Data para cualquier cliente RFC 8656, retransmitiendo datagramas entre la dirección de transporte retransmitida y el peer vinculado.
Implementa TURN según RFC 8656, validando las credenciales de largo plazo con MESSAGE-INTEGRITY y rotando los nonces automáticamente. También referencia el RFC 6062 para las asignaciones de TURN sobre TCP y el RFC 8489 para el formato de mensaje STUN subyacente, y soporta los transportes UDP, TCP y TLS sobre TCP.
No. TsgcTURNServer es un relay autoalojado que integras en tu propia aplicación Delphi o C++ Builder, de modo que tus despliegues de WebRTC e ICE pueden dejar de depender de proveedores TURN de terceros o de una instalación de coturn separada. Las cuotas por asignación (máximo de asignaciones por usuario, ancho de banda y tiempo de vida) limitan el abuso, con OnQuotaExceeded informando de los rechazos.
El servidor TURN forma parte de la edición Enterprise de sgcWebSockets y es compatible desde Delphi 7 hasta la última versión de Delphi y las versiones de C++ Builder correspondientes, en Windows, macOS, Linux, iOS y Android. Descarga la prueba gratuita para levantar un relay TURN en tu propio proyecto.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para ejecutar tu propio servidor TURN?

Descarga la prueba gratuita y levanta un relay TURN en Delphi.