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 y se declara bajo config :dra, diameter: %{...} en config/runtime.exs.
Descripció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í, seguido de una lista peers donde cada entrada 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 exactamente una vez en el mapa diameter.
| Parámetro | Tipo | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
service_name | Átomo | Sí | - | Identificador interno del servicio para la instancia del servicio Diameter. Cualquier átomo único (por ejemplo :omnitouch_dra). |
listen_ip | Cadena o Lista | Sí | - | Dirección(es) IP en las que el DRA escucha conexiones Diameter entrantes. Proporcione una única cadena para una dirección, o una lista de cadenas para multihoming SCTP (ver Multihoming SCTP). |
listen_port | Entero | Sí | - | Puerto en el que el DRA escucha. El puerto estándar de Diameter es 3868. |
host | Cadena | Sí | - | 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 anuncia en CER/CEA. |
realm | Cadena | Sí | - | El realm Diameter del DRA, anunciado como Origin-Realm. |
product_name | Cadena | Sí | - | Nombre del producto anunciado en el intercambio de capacidades CER/CEA. |
vendor_id | Entero | Sí | - | Vendor-Id anunciado en el intercambio de capacidades según RFC 6733 Sección 5.3.3. 10415 es el identificador del proveedor 3GPP. |
request_timeout | Entero | No | 5000 | Tiempo de espera en milisegundos para un par de solicitud/respuesta. Si no se recibe respuesta dentro de este intervalo, la solicitud se considera como agotada. |
allow_undefined_peers_to_connect | Booleano | Sí | false | Cuando es false, solo los pares listados en peers pueden establecer una conexión. Cuando es true, el DRA acepta conexiones entrantes de pares no presentes en la configuración. Mantenga esto en false en producción. |
log_unauthorized_peer_connection_attempts | Booleano | Sí | true | Cuando es true, se registran los intentos de conexión de pares no autorizados para el monitoreo de seguridad. |
allow_multiple_origin_host_connections | Booleano | Sí | false | Cuando es false, el DRA restringe las conexiones para que un único Origin-Host mantenga una conexión por nodo. Cuando es true, esta restricción se levanta y se permiten múltiples conexiones concurrentes desde el mismo Origin-Host. |
peer_selection_algorithm | Átomo | Sí | - | Algoritmo utilizado para elegir entre múltiples pares elegibles al enrutamiento. Ver Selección de Pares a continuación y Enrutamiento Estándar. |
peer_settle_time_ms | Entero | No | 0 | Milisegundos que un par recién conectado debe permanecer activo antes de que se enrute tráfico hacia él, protegiendo contra pares inestables. 0 enruta inmediatamente una vez que se completa CER/CEA. Ver Conectividad de Pares. |
watchdog_timer_ms | Entero | No | 30000 | Anulación opcional para el temporizador de vigilancia RFC 3539 Tw (intervalo de actividad DWR). Deje sin configurar para mantener el valor predeterminado de OTP. Ver Conectividad de Pares. |
peers | Lista | Sí | - | 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, configurada 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ámetro | Tipo | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
diameter_socket_buffer_size | Entero | No | 4194304 (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 Multihoming SCTP. |
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. Esto afecta directamente cómo el DRA distribuye el tráfico y se comporta durante las interrupciones de pares; ver Enrutamiento Estándar para el flujo completo de decisiones de enrutamiento, y Enrutamiento Avanzado para anulaciones basadas en reglas.
| Valor | Comportamiento |
|---|---|
:random | Se elige un par coincidente al azar para cada solicitud, distribuyendo la carga entre todos los pares elegibles. |
:failover | Se prefiere el primer par coincidente; los pares subsiguientes solo se utilizan 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: 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ámetro | Tipo | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
host | Cadena | Sí | - | La Identidad Diameter del par (FQDN). Este valor debe coincidir exactamente (sensible a mayúsculas y minúsculas) para que se aplique el enrutamiento y las reglas de Enrutamiento Avanzado. |
realm | Cadena | Sí | - | El realm Diameter del par. |
ip | Cadena | Sí | - | La dirección IP principal del par utilizada para la conexión. |
additional_ips | Lista | No | - | Lista de direcciones IP para una asociación SCTP multi-homed; vuelve a ip cuando no se configura. Solo significativo con transport: :diameter_sctp. Ver Multihoming SCTP. |
port | Entero | Sí | - | El puerto Diameter del par (típicamente 3868). |
transport | Átomo | Sí | - | 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_ip | Cadena | No | listen_ip | Direcció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_port | Entero | No | - | Puerto local para enlazar cuando el DRA marca a este par (solo conexiones salientes). Cuando no se configura, el sistema operativo asigna un puerto efímero. Establezca un valor explícito cuando dos pares compartan la misma IP y puerto de destino, para que cada conexión utilice un socket local distinto. |
initiate_connection | Booleano | Sí | - | 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. |
Multihoming SCTP: los pares que utilizan
:diameter_sctppueden enlazar múltiples direcciones locales y remotas para resiliencia. La configuración de multihoming y las listas de direcciones por par se cubren en Multihoming SCTP.
Transportes
| Valor de transporte | Protocolo | Referencia |
|---|---|---|
:diameter_tcp | TCP | RFC 6733 (Base Diameter) |
:diameter_sctp | SCTP | RFC 4960 (SCTP) - ver Multihoming SCTP |
Modos de Conexión
Si el DRA marca a un par o espera ser marcado se controla mediante initiate_connection.
Iniciar Conexión (initiate_connection: true)
- El DRA actúa como cliente Diameter e inicia la conexión TCP/SCTP al par.
- Típicamente utilizado para sistemas de backend como un HSS o PCRF.
- El DRA volverá a intentar la conexión si el par no es accesible.
Aceptar Conexión (initiate_connection: false)
- El DRA actúa como servidor Diameter y espera a que el par se conecte.
- Típicamente utilizado para nodos del lado de acceso como un MME, SGSN o P-GW.
- El par debe estar presente en
peers, a menos queallow_undefined_peers_to_connectesté configurado comotrue. - Los pares entrantes se diferencian por el
Origin-Hostque anuncian en el CER, por lo que dos nodos Diameter que comparten una IP de origen se emparejan de manera independiente siempre que cada uno presente unhostdistinto.
Ejemplo Completo
El siguiente ejemplo configura un DRA que acepta conexiones de un MME a través de SCTP y marca a un HSS y 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 de origen local 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 - Los valores de
hostde los pares se coinciden exactamente y son sensibles a mayúsculas y minúsculas. Las reglas en Enrutamiento Avanzado deben hacer referencia a la misma cadenahostconfigurada aquí. - Intercambio de Capacidades - Al conectarse, el DRA y cada par intercambian aplicaciones e identidades soportadas a través de CER/CEA. Los valores de
host,realm,product_nameyvendor_idse anuncian en esta etapa. - Vendor-ID 10415 - Este es el
Vendor-Idestándar 3GPP y es el valor esperado para las interfaces Diameter 3GPP. - Selección de Pares - Cuando múltiples pares coinciden con una solicitud,
peer_selection_algorithmdecide cuál se utiliza; ver Enrutamiento Estándar.
Consideraciones de Seguridad
- Establezca
allow_undefined_peers_to_connect: falseen producción para que solo los pares conocidos puedan conectarse. - Habilite
log_unauthorized_peer_connection_attempts: truepara registrar intentos de conexión rechazados para el monitoreo de seguridad. - Asegúrese de que las reglas del firewall se alineen con la
listen_ipylisten_portconfiguradas.
Documentación Relacionada
- Multihoming SCTP - 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 basadas en valores de
hostde pares.