Arquitectura y Flujos de Llamadas de OmniEPDG
Este documento describe la arquitectura interna de OmniEPDG, sus interfaces de protocolo, máquinas de estado de UE y diagramas de secuencia de mensajes detallados para procedimientos clave. OmniEPDG admite dos modos operativos: modo GTP (túnel completo 3GPP a través de PGW) y modo VPN Simple (salida local con interfaz TUN). Consulte la Guía de Operaciones para una comparación de alto nivel.
Arquitectura del Sistema
OmniEPDG está construido sobre Erlang/OTP e implementa la función de red ePDG (evolved Packet Data Gateway) de 3GPP. Conecta el acceso WiFi no confiable a la red central móvil, permitiendo que los UEs realicen y reciban llamadas VoWiFi.
Arquitectura del Modo GTP
En el modo GTP, el tráfico de suscriptores se tunela a través de un PGW utilizando GTPv2-C para el control de sesión y el módulo GTP-U del núcleo de Linux para el plano de usuario.
Arquitectura del Modo VPN Simple
En el modo VPN Simple, el tráfico de suscriptores se enruta localmente a través de una interfaz TUN de Linux. No se requiere infraestructura de PGW o GTP. Los componentes de Diámetro S6b, GTPv2-C y GTP-U son reemplazados por el subsistema VPN Simple.
Árbol de Supervisores
OmniEPDG utiliza una estrategia de supervisor uno-para-todos, lo que significa que si algún proceso hijo falla, todos los hijos se reinician. El supervisor inicia condicionalmente diferentes procesos hijos dependiendo del modo operativo.
Procesos iniciados en ambos modos:
| Proceso | Rol | Descripción |
|---|---|---|
aaa_diameter_swx | Cliente Diámetro SWx | Se conecta al HSS para operaciones de autenticación y perfil de suscriptor |
aaa_diameter_swm | Diámetro SWm (Interno) | Enruta mensajes EAP de Diámetro y de sesión entre el ePDG y las FSM de AAA |
epdg_diameter_swm | Manejador SWm ePDG | Maneja el lado ePDG de la señalización interna de Diámetro SWm |
Procesos adicionales en modo GTP:
| Proceso | Rol | Descripción |
|---|---|---|
aaa_diameter_s6b | Servidor Diámetro S6b | Acepta conexiones del PGW para autorización de sesión |
epdg_gtpc_s2b | Cliente GTPv2-C | Envía solicitudes de Crear/Eliminar Sesión al PGW a través de S2b |
gtp_u_kmod | Manejador del Núcleo GTP-U | Gestiona los contextos PDP GTP-U en el módulo del núcleo de Linux |
Procesos adicionales en modo VPN Simple:
| Proceso | Rol | Descripción |
|---|---|---|
simple_vpn_supervisor | Supervisor del Subsistema VPN | Supervisa los procesos del gestor de IP y del gestor de rutas |
simple_vpn_pool | Gestor de IPs | Asigna y libera direcciones IPv4 del grupo CIDR configurado utilizando ETS |
simple_vpn_route | Gestor de Rutas | Crea la interfaz TUN omniepdg0 y gestiona las rutas de host por suscriptor |
Máquinas de Estado por UE
Para cada suscriptor activo (identificado por IMSI), OmniEPDG crea dos instancias de máquinas de estado:
- FSM UE ePDG (
epdg_ue_fsm) - Gestiona el ciclo de vida de la sesión del suscriptor desde la perspectiva del ePDG: autenticación, creación de túneles GTP y coordinación de desmantelamiento. - FSM UE AAA (
aaa_ue_fsm) - Gestiona la señalización del lado AAA: intercambios de Diámetro SWx con el HSS e intercambios S6b con el PGW.
Ambas FSM se implementan como procesos gen_statem de Erlang con modo de devolución de llamada de función de estado.
Estados de la FSM UE ePDG
La FSM UE ePDG rastrea la sesión de un suscriptor desde la solicitud de autenticación inicial hasta el estado de túnel activo y el desmantelamiento. El comportamiento de la FSM diverge en el estado authenticated según el modo operativo.
FSM del Modo GTP
En el modo GTP, el establecimiento del túnel pasa por la creación de sesión GTPv2-C hacia el PGW, y el desmantelamiento implica la eliminación de sesión GTPv2-C, eliminación de portadora iniciada por PGW y flujos de desregistro iniciados por HSS.
FSM del Modo VPN Simple
En el modo VPN Simple, la FSM toma un atajo en el estado authenticated. En lugar de enviar una solicitud de creación de sesión GTPv2-C, la FSM asigna una dirección IP del grupo local, crea una ruta de host en la interfaz TUN y transita directamente a active. Los estados de desmantelamiento específicos de GTP (wait_create_session_resp, wait_delete_session_resp, dereg_pgw_wait_cancel, dereg_net_wait_s2b_delete) no se utilizan.
Referencia de Estados de la FSM UE ePDG
| Estado | Modo | Descripción | Esperando |
|---|---|---|---|
new | Ambos | Estado inicial. No hay sesión activa. | Solicitud de autenticación de UE |
wait_auth_resp | Ambos | Solicitud de autenticación enviada a través de SWm DER. | SWm DEA con vectores de autenticación o error |
authenticating | Ambos | Vectores de autenticación recibidos, intercambio EAP en progreso. | Actualización de ubicación / finalización de autenticación |
authenticated | Ambos | Autenticación completa, perfil de suscriptor descargado. | Solicitud de túnel de UE |
wait_create_session_resp | GTP | Solicitud de creación de sesión GTPv2-C enviada al PGW. | Respuesta de creación de sesión del PGW |
active | Ambos | Túnel/ruta operativo. El tráfico del suscriptor está fluyendo. | Disparador de desmantelamiento |
wait_delete_session_resp | GTP | Solicitud de eliminación de sesión GTPv2-C enviada al PGW (desmantelamiento iniciado por UE). | Respuesta de eliminación de sesión del PGW |
wait_swm_sta | Ambos | Solicitud de terminación de sesión SWm enviada. | SWm STA de AAA |
dereg_pgw_wait_cancel | GTP | Desregistro iniciado por PGW. Ubicación de cancelación enviada a UE. | Resultado de ubicación de cancelación |
dereg_net_wait_cancel | GTP | Desregistro iniciado por la red/HSS. Ubicación de cancelación enviada a UE. | Resultado de ubicación de cancelación |
dereg_net_wait_s2b_delete | GTP | Desregistro iniciado por la red. S2b Delete Session enviado al PGW. | Respuesta de eliminación de sesión |
Estados de la FSM UE AAA
La FSM UE AAA gestiona la señalización de Diámetro hacia el HSS (SWx) y el PGW (S6b) en nombre de cada suscriptor.
Referencia de Estados de la FSM UE AAA
| Estado | Descripción | Esperando |
|---|---|---|
new | Estado inicial. No hay sesión AAA activa. | Solicitud de autenticación de Diámetro |
wait_swx_maa | SWx MAR enviado al HSS para vectores EAP-AKA. | SWx MAA del HSS |
wait_swx_saa | SWx SAR enviado al HSS para asignación de servidor. | SWx SAA del HSS |
authenticated | Ambas sesiones ePDG y PGW pueden estar activas. Rastreando el estado de sesión dual. | Eventos de sesión |
auth_wait_swx_saa | SWx SAR enviado para actualización de PGW o desregistro de usuario. | SWx SAA del HSS |
dereg_net_wait_s6b_asa | Desregistro iniciado por HSS. S6b ASR enviado al PGW. | S6b ASA del PGW |
dereg_net_wait_swm_asa | Desmantelamiento de S6b completo. SWm ASR enviado al ePDG. | SWm ASA del ePDG |
Flujos de Llamadas
Modo GTP: Establecimiento de Sesión Exitoso
Esta secuencia muestra una sesión completa exitosa desde la autenticación EAP-AKA hasta un túnel GTP activo.
Modo GTP: Desmantelamiento de Sesión Iniciado por UE
Cuando el UE se desconecta (por ejemplo, cambia de WiFi a celular o el usuario cuelga).
Modo GTP: Desmantelamiento de Sesión Iniciado por PGW
Cuando el PGW termina la sesión (por ejemplo, violación de política, tiempo de espera o acción administrativa).
Modo GTP: Desregistro Iniciado por la Red (HSS)
Cuando el HSS revoca el registro de un suscriptor (por ejemplo, cambio de suscripción, detección de fraude o acción administrativa).
Modo GTP: Push de Perfil HSS y Re-autenticación
Cuando el HSS envía un perfil de suscriptor actualizado, OmniEPDG activa la re-autenticación en ambas sesiones ePDG (SWm) y PGW (S6b) según 3GPP TS 29.273 Sección 8.1.2.3.3.
Modo VPN Simple: Establecimiento de Sesión Exitoso
En el modo VPN Simple, el establecimiento de la sesión es más corto. Después de la autenticación EAP-AKA, la FSM ePDG asigna una IP del grupo local y configura una ruta de host en la interfaz TUN, eludiendo toda interacción con PGW. Si skip_sar está habilitado, el intercambio SAR/SAA con el HSS también se omite.
Modo VPN Simple: Desmantelamiento de Sesión Iniciado por UE
Cuando el UE se desconecta en modo VPN Simple, la FSM libera la dirección IP asignada y elimina la ruta de host.
Identificadores de Aplicación de Diámetro
| Identificador de Aplicaci��n | Interfaz | Identificador de Proveedor | Descripción | Referencia |
|---|---|---|---|---|
| 16777265 | SWx | 10415 (3GPP) | ePDG ↔ HSS autenticación y gestión de suscriptores | 3GPP TS 29.273 |
| 16777272 | S6b | 10415 (3GPP) | AAA ↔ PGW autorización de sesión | 3GPP TS 29.273 |
Códigos de Resultado de Diámetro
OmniEPDG mapea los códigos de resultado de Diámetro a valores de causa internos para la propagación de errores entre protocolos.
Códigos de Resultado Estándar
| Código de Resultado | Nombre | Significado |
|---|---|---|
| 2001 | DIAMETER_SUCCESS | Operación completada con éxito |
| 2002 | DIAMETER_LIMITED_SUCCESS | Operación parcialmente exitosa |
Códigos de Resultado Experimentales de 3GPP
| Código de Resultado | Nombre | Significado | Referencia |
|---|---|---|---|
| 4181 | DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE | HSS no puede proporcionar datos de autenticación temporalmente | 3GPP TS 29.273 |
| 5001 | DIAMETER_ERROR_USER_UNKNOWN | IMSI del suscriptor no encontrado en HSS | 3GPP TS 29.273 |
| 5002 | DIAMETER_UNKNOWN_SESSION_ID | Sesión no encontrada (utilizada para STR/AAR obsoletos) | RFC 6733 |
| 5003 | DIAMETER_AUTHORIZATION_REJECTED | Suscriptor no autorizado para el servicio | 3GPP TS 29.273 |
| 5004 | DIAMETER_ERROR_ROAMING_NOT_ALLOWED | Se aplican restricciones de roaming | 3GPP TS 29.273 |
| 5005 | DIAMETER_MISSING_AVP | AVP requerido faltante en el mensaje | RFC 6733 |
| 5012 | DIAMETER_UNABLE_TO_COMPLY | Fallo genérico de procesamiento | RFC 6733 |
| 5420 | DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION | No se encontró suscripción EPS | 3GPP TS 29.273 |
| 5421 | DIAMETER_ERROR_RAT_NOT_ALLOWED | Tecnología de acceso no permitida | 3GPP TS 29.273 |
| 5422 | DIAMETER_ERROR_EQUIPMENT_UNKNOWN | Dispositivo IMEI no reconocido | 3GPP TS 29.273 |
Códigos de Causa GTPv2-C (Solo Modo GTP)
OmniEPDG maneja los siguientes códigos de causa GTPv2-C en las respuestas de Crear/Eliminar Sesión del PGW. Los códigos del 1 al 15 son informativos, del 16 al 63 indican éxito y del 64 en adelante indican errores. Consulte 3GPP TS 29.274 Sección 8.4.
Causas de Éxito
| Código | Nombre | Descripción |
|---|---|---|
| 16 | Request Accepted | Operación completada con éxito |
| 17 | Request Accepted Partially | Éxito parcial |
| 18 | New PDN Type (Network Preference) | Tipo de PDN cambiado debido a preferencia de red |
| 19 | New PDN Type (Single Address Bearer) | Tipo de PDN cambiado debido a restricción de portadora de dirección única |
Causas de Error (Seleccionadas)
| Código | Nombre | Descripción |
|---|---|---|
| 64 | Context Not Found | Contexto de sesión no encontrado en PGW |
| 73 | No Resources Available | Agotamiento de recursos en PGW |
| 78 | Missing or Unknown APN | APN solicitado no configurado en PGW |
| 82 | Denied in RAT | Tecnología de acceso no permitida |
| 84 | All Dynamic Addresses Occupied | Grupo de direcciones IP agotado en PGW |
| 92 | User Authentication Failed | Fallo de autenticación en PGW |
| 93 | APN Access Denied | Suscriptor no autorizado para APN |
| 96 | IMSI/IMEI Not Known | Identidad del suscriptor no reconocida |
| 109 | Invalid Peer | Fallo en la validación del par |
| 113 | APN Congestion | APN sobrecargado |
| 120 | GTP-C Entity Congestion | Sobrecarga del plano de control del PGW |
Formato NAI
OmniEPDG identifica a los suscriptores utilizando el formato de Identificador de Acceso a la Red (NAI) definido en 3GPP TS 23.003 Sección 19:
<prefix><IMSI>@nai.epc.mnc<MNC>.mcc<MCC>.3gppnetwork.org
Prefijo de Identidad y Tipo de Autenticación
El prefijo NAI determina el método de autenticación EAP según 3GPP TS 23.003:
| Prefijo | Tipo de Autenticación | Descripción |
|---|---|---|
0 | EAP-AKA | Autenticación AKA estándar (más común para llamadas WiFi) |
6 | EAP-AKA' | Autenticación AKA mejorada con vinculación a la red |
OmniEPDG selecciona automáticamente el método de autenticación basado en el prefijo de identidad del UE. La mayoría de los UEs utilizan el prefijo 0 (EAP-AKA) para llamadas WiFi.
OmniEPDG extrae el IMSI del NAI analizando todo entre el prefijo y el símbolo @. El IMSI se utiliza como la clave principal para todas las máquinas de estado y operaciones de señalización por suscriptor.
Algoritmos Criptográficos
OmniEPDG implementa algoritmos criptográficos según 3GPP TS 33.402 y RFC 7296 (IKEv2).
Algoritmos de Cifrado IKEv2
| Algoritmo | ID | Tamaño de Clave | Estado | Referencia |
|---|---|---|---|---|
| AES-CBC | 12 | 128, 192, 256 bits | Soportado (predeterminado: 256) | RFC 3602 |
| AES-GCM-16 | 20 | 128, 192, 256 bits | Soportado | RFC 5282 |
| AES-GCM-12 | 19 | 128, 192, 256 bits | Soportado | RFC 5282 |
| AES-GCM-8 | 18 | 128, 192, 256 bits | Soportado | RFC 5282 |
| 3DES | 3 | 192 bits | Soportado (legado) | RFC 2451 |
Algoritmos de Integridad IKEv2
| Algoritmo | ID | Tamaño de Clave | Tamaño de ICV | Estado | Referencia |
|---|---|---|---|---|---|
| HMAC-SHA2-256-128 | 12 | 256 bits | 128 bits | Soportado (predeterminado) | RFC 4868 |
| HMAC-SHA2-384-192 | 13 | 384 bits | 192 bits | Soportado | RFC 4868 |
| HMAC-SHA2-512-256 | 14 | 512 bits | 256 bits | Soportado | RFC 4868 |
| HMAC-SHA1-96 | 2 | 160 bits | 96 bits | Soportado (legado) | RFC 2404 |
| HMAC-MD5-96 | 1 | 128 bits | 96 bits | Soportado (legado) | RFC 2403 |
Algoritmos PRF IKEv2
| Algoritmo | ID | Tamaño de Salida | Estado | Referencia |
|---|---|---|---|---|
| PRF-HMAC-SHA2-256 | 5 | 256 bits | Soportado (predeterminado) | RFC 4868 |
| PRF-HMAC-SHA2-384 | 6 | 384 bits | Soportado | RFC 4868 |
| PRF-HMAC-SHA2-512 | 7 | 512 bits | Soportado | RFC 4868 |
| PRF-HMAC-SHA1 | 2 | 160 bits | Soportado (legado) | RFC 2104 |
| PRF-HMAC-MD5 | 1 | 128 bits | Soportado (legado) | RFC 2104 |
Grupos de Diffie-Hellman IKEv2
| Grupo | ID | Tamaño | Estado | Referencia |
|---|---|---|---|---|
| MODP-2048 | 14 | 2048 bits | Soportado (predeterminado) | RFC 3526 |
| MODP-1024 | 2 | 1024 bits | Soportado (legado) | RFC 2409 |
| MODP-1536 | 5 | 1536 bits | Soportado | RFC 3526 |
| MODP-3072 | 15 | 3072 bits | Soportado | RFC 3526 |
| MODP-4096 | 16 | 4096 bits | Soportado | RFC 3526 |
| ECP-256 | 19 | 256 bits | Soportado | RFC 5903 |
| ECP-384 | 20 | 384 bits | Soportado | RFC 5903 |
| ECP-521 | 21 | 521 bits | Soportado | RFC 5903 |
| Curve25519 | 31 | 256 bits | Soportado | RFC 8031 |
| Curve448 | 32 | 448 bits | Soportado | RFC 8031 |
Algoritmos ESP (SA Hijo)
El túnel ESP utiliza los mismos algoritmos de cifrado e integridad negociados durante IKEv2 CREATE_CHILD_SA.
Configuración predeterminada de ESP:
- Cifrado: AES-CBC-256 (clave de 32 bytes, IV de 16 bytes)
- Integridad: HMAC-SHA2-256-128 (clave de 32 bytes, ICV de 16 bytes)
Funciones Criptográficas EAP-AKA
| Función | Algoritmo | Referencia |
|---|---|---|
| Derivación de MK | SHA-1 | RFC 4187 Sección 7 |
| Expansión de clave PRF+ | FIPS 186-2 PRF (SHA-1) | RFC 4187 Apéndice D |
| AT_MAC | HMAC-SHA1-128 | RFC 4187 Sección 10.15 |
| Milenage (f1-f5) | AES-128 | 3GPP TS 35.206 |
Funciones Criptográficas EAP-AKA'
| Función | Algoritmo | Referencia |
|---|---|---|
| Derivación de CK'/IK' | HMAC-SHA-256 | RFC 5448 Sección 3.3 |
| Derivación de MK | SHA-256 | RFC 5448 Sección 3.4 |
| AT_MAC | HMAC-SHA256-128 | RFC 5448 Sección 3.1 |
Cumplimiento de 3GPP
OmniEPDG implementa todos los algoritmos criptográficos obligatorios especificados en 3GPP TS 33.402 Sección 8:
| Requisito | Algoritmo | Estado |
|---|---|---|
| Cifrado IKEv2 (obligatorio) | AES-CBC-128 | ✓ Soportado |
| Integridad IKEv2 (obligatorio) | HMAC-SHA2-256-128 | ✓ Soportado (predeterminado) |
| PRF IKEv2 (obligatorio) | PRF-HMAC-SHA-256 | ✓ Soportado (predeterminado) |
| DH IKEv2 (obligatorio) | Grupo 14 (MODP-2048) | ✓ Soportado (predeterminado) |
| Cifrado ESP (obligatorio) | AES-CBC-128/256 | ✓ Soportado |
| Integridad ESP (obligatorio) | HMAC-SHA2-256-128 | ✓ Soportado (predeterminado) |
| EAP-AKA | RFC 4187 | ✓ Implementado |
| EAP-AKA' | RFC 5448 | ✓ Implementado |
Tipos de Dirección PDP (Solo Modo GTP)
OmniEPDG admite los siguientes tipos de dirección PDP según lo definido en 3GPP TS 29.274 Sección 8.14. En el modo VPN Simple, solo se asignan direcciones IPv4 del grupo local.
| Tipo | Descripción | Formato PAA GTPv2-C |
|---|---|---|
| IPv4 | Portadora solo IPv4 | Dirección IPv4 de 4 bytes |
| IPv6 | Portadora solo IPv6 | Longitud de prefijo de 1 byte + dirección IPv6 de 16 bytes |
| IPv4v6 | Portadora de doble pila | Longitud de prefijo de 1 byte + dirección IPv6 de 16 bytes + dirección IPv4 de 4 bytes |