Saltar al contenido principal

Configuración Base de DRA

La Configuración Base de DRA define la identidad de OmniDRA, los oyentes de red, los tiempos de espera, la política de admisión de pares y la lista de pares Diameter a los que se conecta. Este bloque es la base para cada decisión de enrutamiento que toma el agente. Decláralo bajo config :dra, diameter: %{...} en config/runtime.exs.

Visión General​

Todos los ajustes base residen en un único mapa diameter. El mapa contiene un conjunto de claves de nivel superior que describen el DRA en sí. También contiene una lista peers. Cada entrada en la lista describe un par Diameter.

Estructura de Configuración​

config :dra,
diameter: %{
service_name: :omnitouch_dra,
listen_ip: "127.0.0.2",
listen_port: 3868,
host: "dra01",
realm: "production.omnitouch",
product_name: "OmniDRA",
vendor_id: 10415,
request_timeout: 5000,
allow_undefined_peers_to_connect: false,
log_unauthorized_peer_connection_attempts: true,
allow_multiple_origin_host_connections: false,
peer_selection_algorithm: :random,
peers: [
# Configuraciones de pares...
]
}

Parámetros de Nivel Superior​

Estas claves configuran la identidad del DRA, su oyente de red, los tiempos de espera y su política de admisión y selección de pares. Cada clave aparece una vez en el mapa diameter.

ParámetroTipoRequeridoPredeterminadoDescripción
service_nameÁtomoSí-Identificador interno del servicio para la instancia del servicio Diameter. Cualquier átomo único (por ejemplo :omnitouch_dra).
listen_ipCadena o ListaSí-Dirección(es) IP en las que el DRA escucha conexiones Diameter entrantes. Proporciona una única cadena para una dirección, o una lista de cadenas para SCTP multihoming (ver SCTP Multihoming).
listen_portEnteroSí-Puerto en el que el DRA escucha. El puerto estándar de Diameter es 3868.
hostCadenaSí-La etiqueta de host de la Identidad Diameter del DRA. Combinado con realm, forma el Origin-Host completamente calificado (por ejemplo dra01.production.omnitouch) que se publicita en CER/CEA.
realmCadenaSí-El realm Diameter del DRA, publicitado como Origin-Realm.
product_nameCadenaSí-Nombre del producto publicitado en el intercambio de capacidades CER/CEA.
vendor_idEnteroSí-Vendor-Id publicitado en el intercambio de capacidades según RFC 6733 Sección 5.3.3. 10415 es el identificador de proveedor de 3GPP.
request_timeoutEnteroNo5000Tiempo de espera en milisegundos para un par de solicitud/respuesta. Si no llega respuesta dentro de este intervalo, el DRA trata la solicitud como si hubiera expirado.
allow_undefined_peers_to_connectBooleanoSífalseCuando es false, solo los pares en la lista peers pueden establecer una conexión. Cuando es true, el DRA acepta conexiones entrantes de pares que no están en la configuración. Mantén esto en false en producción.
log_unauthorized_peer_connection_attemptsBooleanoSítrueCuando es true, el DRA registra los intentos de conexión de pares no autorizados para monitoreo de seguridad.
allow_multiple_origin_host_connectionsBooleanoSífalseCuando es false, el DRA permite una conexión por nodo para un único Origin-Host. Cuando es true, el DRA permite múltiples conexiones concurrentes desde el mismo Origin-Host.
peer_selection_algorithmÁtomoSí-Algoritmo que elige entre múltiples pares elegibles durante el enrutamiento. Ver Selección de Pares a continuación y Enrutamiento Estándar.
peer_settle_time_msEnteroNo0Milisegundos que un par recién conectado debe permanecer activo antes de que el DRA enrute tráfico hacia él. Esto protege contra pares inestables. 0 enruta inmediatamente después de que se completa CER/CEA. Ver Conectividad de Pares.
watchdog_timer_msEnteroNo30000Anulación opcional para el temporizador de vigilancia RFC 3539 Tw (intervalo de vitalidad DWR). Deja sin establecer para mantener el valor predeterminado de OTP. Ver Conectividad de Pares.
peersListaSí-Lista de mapas de pares. Cada entrada define una conexión de par Diameter. Ver Configuración de Pares.

Tamaño del Búfer de Socket SCTP​

El tamaño del búfer de socket es una clave de nivel superior :dra. Configúralo con config :dra, diameter_socket_buffer_size:. No es un miembro del mapa diameter:.

config :dra, diameter_socket_buffer_size: 4_194_304

config :dra,
diameter: %{
# ... configuración base ...
}
ParámetroTipoRequeridoPredeterminadoDescripción
diameter_socket_buffer_sizeEnteroNo4194304 (4 MB)Tamaño del búfer de recepción/envío de socket SCTP en bytes. Una clave de nivel superior :dra (config :dra, diameter_socket_buffer_size:), no un miembro del mapa diameter:. Solo afecta a los pares :diameter_sctp. Ver SCTP Multihoming.

Selección de Pares​

Cuando más de un par configurado coincide con los criterios de enrutamiento para una solicitud, peer_selection_algorithm determina qué par la recibe. Esta configuración afecta cómo el DRA distribuye el tráfico y cómo se comporta durante las interrupciones de pares. Ver Enrutamiento Estándar para el flujo completo de decisiones de enrutamiento. Ver Enrutamiento Avanzado para anulaciones basadas en reglas.

ValorComportamiento
:randomEl DRA elige un par coincidente al azar para cada solicitud. Esto distribuye la carga entre todos los pares elegibles.
:failoverEl DRA prefiere el primer par coincidente. Utiliza pares posteriores solo cuando los pares de mayor prioridad no están disponibles.

Configuración de Pares​

Cada entrada en la lista peers es un mapa que describe un único par Diameter. El mapa define su identidad, su dirección de red, el transporte que utiliza y si el DRA marca al par o espera ser marcado.

%{
host: "diameter-benchmark-server.production.omnitouch",
realm: "production.omnitouch",
ip: "127.0.0.3",
port: 3868,
transport: :diameter_tcp,
initiate_connection: true
}

Parámetros por Par​

ParámetroTipoRequeridoPredeterminadoDescripción
hostCadenaSí-La Identidad Diameter del par (FQDN). Este valor debe coincidir exactamente y es sensible a mayúsculas y minúsculas. Las reglas de enrutamiento y Enrutamiento Avanzado requieren una coincidencia exacta.
realmCadenaSí-El realm Diameter del par.
ipCadenaSí-La dirección IP principal del par utilizada para la conexión.
additional_ipsListaNo-Lista de direcciones IP para una asociación SCTP multi-homed. Cuando no está establecida, el DRA utiliza ip. Esta clave se aplica solo con transport: :diameter_sctp. Ver SCTP Multihoming.
portEnteroSí-El puerto Diameter del par (típicamente 3868).
transportÁtomoSí-Protocolo de transporte para la conexión: :diameter_tcp para TCP, o :diameter_sctp para SCTP. Ver la referencia de Transportes a continuación.
source_ipCadenaNolisten_ipDirección IP local para enlazar cuando el DRA marca a este par (solo conexiones salientes). Por defecto, se utiliza la listen_ip del servicio.
source_portEnteroNo-Puerto local para enlazar cuando el DRA marca a este par (solo conexiones salientes). Cuando no está establecido, el sistema operativo asigna un puerto efímero. Si dos pares comparten la misma IP y puerto de destino, establece un valor explícito. Cada conexión utiliza un socket local distinto.
initiate_connectionBooleanoSí-Cuando es true, el DRA se conecta al par (rol de cliente). Cuando es false, el DRA espera a que el par se conecte (rol de servidor). Ver Modos de Conexión.
origin_hostCadenaNoservice host.realmEl Origin-Host que el DRA presenta a este par. Esta clave es separada de host arriba, que es la propia identidad de este par. Establece esta clave cuando un par espera que el DRA use un host específico (por ejemplo, un realm asociado). El DRA aplica la anulación al CER/CEA y a los mensajes de protocolo base en esta conexión. Ver Identidad por Par.
origin_realmCadenaNoservice realmEl Origin-Realm que el DRA presenta a este par. Esta clave es separada de realm arriba, que es el propio realm de este par. Establece esta clave junto con origin_host o por su cuenta. Ver Identidad por Par.

SCTP multihoming: un par que utiliza :diameter_sctp puede enlazar múltiples direcciones locales y remotas para resiliencia. SCTP Multihoming describe la configuración de multihoming y las listas de direcciones por par.

Transportes​

Valor de TransporteProtocoloReferencia
:diameter_tcpTCPRFC 6733 (Base Diameter)
:diameter_sctpSCTPRFC 4960 (SCTP) - ver SCTP Multihoming

Modos de Conexión​

La clave initiate_connection controla si el DRA marca a un par o espera ser marcado.

Iniciar Conexión (initiate_connection: true)

  • El DRA actúa como el cliente Diameter e inicia la conexión TCP/SCTP al par.
  • Usa este modo para sistemas de backend como un HSS o PCRF.
  • Si el par es inalcanzable, el DRA reintenta la conexión.

Aceptar Conexión (initiate_connection: false)

  • El DRA actúa como el servidor Diameter y espera a que el par se conecte.
  • Usa este modo para nodos del lado de acceso como un MME, SGSN o P-GW.
  • El par debe estar presente en peers, a menos que establezcas allow_undefined_peers_to_connect en true.
  • El DRA diferencia los pares entrantes por el Origin-Host que publicitan en el CER. Dos nodos Diameter pueden compartir una IP de origen. El DRA los empareja de forma independiente cuando cada uno presenta un host distinto.

Identidad por Par​

El DRA tiene una identidad a nivel de servicio. Combina host y realm en el Origin-Host (por ejemplo dra01.production.omnitouch) y publicita realm como el Origin-Realm. Por defecto, el DRA presenta esta identidad a cada par.

Algunos pares esperan que el DRA presente una identidad diferente. Un socio de interconexión o de roaming a menudo requiere que el DRA use un host y realm del esquema de nombres del socio. Establece origin_host y origin_realm en ese par para cambiar la identidad que el DRA presenta en esa conexión.

Estas dos claves son la identidad que el DRA presenta a el par. Son separadas de la propia host y realm del par, que son la identidad que el par publicita al DRA. El DRA aplica la anulación solo a esa conexión. Cada otro par continúa viendo la identidad a nivel de servicio.

peers: [
%{
# La propia identidad de este par (lo que publicita al DRA):
host: "hss.partner.example",
realm: "partner.example",
ip: "10.0.0.9",
port: 3868,
transport: :diameter_sctp,
initiate_connection: true,
# La identidad que el DRA presenta A este par:
origin_host: "dra-partner.epc.mnc001.mcc001.3gppnetwork.org",
origin_realm: "epc.mnc001.mcc001.3gppnetwork.org"
}
]

Ver Parámetros por Par para las definiciones de parámetros origin_host y origin_realm.

El diagrama a continuación muestra al DRA presentando su identidad predeterminada a un par y una identidad de anulación a un par asociado.

Comportamiento​

La anulación cambia la identidad en el Intercambio de Capacidades (CER / CEA) en esa conexión. También cambia la identidad en los mensajes de protocolo base en esa conexión: los mensajes de vigilancia (DWR / DWA) y los mensajes de desconexión (DPR / DPA).

Puedes establecer cualquiera de las claves por su cuenta. Una clave no establecida vuelve al valor del servicio. Si estableces solo origin_realm, el DRA cambia solo el realm y mantiene el Origin-Host a nivel de servicio.

El DRA utiliza el Origin-Host de anulación para la detección de bucles en esa conexión. Si una solicitud ya lleva un AVP Route-Record que coincide con la anulación, el DRA aún detecta el bucle según RFC 6733 §6.1.8.

El DRA fija la identidad cuando envía el CER. Si cambias una anulación y recargas la configuración en tiempo de ejecución, el DRA restablece esa conexión para que la nueva identidad entre en efecto. Las conexiones a otros pares no se ven afectadas.

Ejemplo Completo​

El siguiente ejemplo configura un DRA. El DRA acepta conexiones de un MME a través de SCTP. Marca a un HSS y a un PCRF a través de TCP.

config :dra,
diameter: %{
service_name: :mvno_dra,
listen_ip: "10.100.1.10",
listen_port: 3868,
host: "dra01",
realm: "mvno.example.com",
product_name: "OmniDRA",
vendor_id: 10415,
request_timeout: 5000,
allow_undefined_peers_to_connect: false,
log_unauthorized_peer_connection_attempts: true,
allow_multiple_origin_host_connections: false,
peer_selection_algorithm: :random,
peers: [
# MME - DRA espera a que el MME se conecte
%{
host: "mme01.operator.example.com",
realm: "operator.example.com",
ip: "10.100.2.15",
port: 3868,
transport: :diameter_sctp,
initiate_connection: false
},
# HSS - DRA inicia la conexión desde un puerto local de origen explícito
%{
host: "hss01.mvno.example.com",
realm: "mvno.example.com",
ip: "10.100.3.141",
port: 3868,
source_port: 13868,
transport: :diameter_tcp,
initiate_connection: true
},
# PCRF - DRA inicia la conexión
%{
host: "pcrf01.mvno.example.com",
realm: "mvno.example.com",
ip: "10.100.3.22",
port: 3868,
transport: :diameter_tcp,
initiate_connection: true
}
]
}

Notas Operativas​

  • Coincidencia de Nombres de Host - El DRA coincide los valores de host de los pares exactamente y de manera sensible a mayúsculas y minúsculas. Las reglas en Enrutamiento Avanzado deben hacer referencia a la misma cadena host que configuras aquí.
  • Intercambio de Capacidades - Al conectarse, el DRA y cada par intercambian aplicaciones e identidades soportadas a través de CER/CEA. El DRA publicita los valores de host, realm, product_name y vendor_id en esta etapa.
  • Vendor-ID 10415 - Este es el estándar Vendor-Id de 3GPP. Es el valor esperado para interfaces Diameter de 3GPP.
  • Selección de Pares - Cuando múltiples pares coinciden con una solicitud, peer_selection_algorithm decide cuál usa el DRA. Ver Enrutamiento Estándar.

Consideraciones de Seguridad​

  • Establece allow_undefined_peers_to_connect: false en producción para que solo los pares conocidos puedan conectarse.
  • Habilita log_unauthorized_peer_connection_attempts: true para registrar intentos de conexión rechazados para monitoreo de seguridad.
  • Asegúrate de que las reglas del firewall estén alineadas con la listen_ip y listen_port configuradas.

Documentación Relacionada​

  • SCTP Multihoming - Transporte SCTP multi-homed y configuración de direcciones por par.
  • Enrutamiento Estándar - Cómo el DRA selecciona pares y enruta solicitudes, incluyendo el comportamiento de peer_selection_algorithm.
  • Enrutamiento Avanzado - Anulaciones de enrutamiento basadas en reglas claveadas en valores de host de pares.