Architecture et Flux d'Appels OmniEPDG
Ce document décrit l'architecture interne d'OmniEPDG, ses interfaces de protocole, les machines d'état UE et les diagrammes de séquence de messages détaillés pour les procédures clés. OmniEPDG prend en charge deux modes opérationnels : mode GTP (tunneling complet 3GPP via PGW) et mode VPN Simple (sortie locale avec interface TUN). Voir le Guide des opérations pour une comparaison à haut niveau.
Architecture du Système
OmniEPDG est construit sur Erlang/OTP et implémente la fonction réseau ePDG (evolved Packet Data Gateway) 3GPP. Il relie l'accès WiFi non sécurisé au réseau mobile central, permettant aux UEs de passer et de recevoir des appels VoWiFi.
Architecture du Mode GTP
En mode GTP, le trafic des abonnés est tunnelé à travers un PGW utilisant GTPv2-C pour le contrôle de session et le module GTP-U du noyau Linux pour le plan utilisateur.
Architecture du Mode VPN Simple
En mode VPN Simple, le trafic des abonnés est routé localement via une interface TUN Linux. Aucune infrastructure PGW ou GTP n'est requise. Les composants Diameter S6b, GTPv2-C et GTP-U sont remplacés par le sous-système VPN Simple.
Arbre de Superviseur
OmniEPDG utilise une stratégie de superviseur one-for-all, ce qui signifie que si un processus enfant plante, tous les enfants sont redémarrés. Le superviseur démarre conditionnellement différents processus enfants en fonction du mode opérationnel.
Processus démarrés dans les deux modes :
| Processus | Rôle | Description |
|---|---|---|
aaa_diameter_swx | Client Diameter SWx | Se connecte au HSS pour l'authentification et les opérations de profil d'abonné |
aaa_diameter_swm | Diameter SWm (Interne) | Route les messages EAP Diameter et de session entre les FSM ePDG et AAA |
epdg_diameter_swm | Gestionnaire SWm ePDG | Gère le côté ePDG de la signalisation Diameter interne SWm |
Processus supplémentaires en mode GTP :
| Processus | Rôle | Description |
|---|---|---|
aaa_diameter_s6b | Serveur Diameter S6b | Accepte les connexions du PGW pour l'autorisation de session |
epdg_gtpc_s2b | Client GTPv2-C | Envoie des demandes de création/suppression de session au PGW via S2b |
gtp_u_kmod | Gestionnaire du noyau GTP-U | Gère les contextes PDP GTP-U dans le module du noyau Linux |
Processus supplémentaires en mode VPN Simple :
| Processus | Rôle | Description |
|---|---|---|
simple_vpn_supervisor | Superviseur du sous-système VPN | Supervise les processus de gestion du pool IP et de route |
simple_vpn_pool | Gestionnaire de Pool IP | Alloue et libère des adresses IPv4 à partir du pool CIDR configuré en utilisant ETS |
simple_vpn_route | Gestionnaire de Route | Crée l'interface TUN omniepdg0 et gère les routes hôtes par abonné |
Machines d'État par UE
Pour chaque abonné actif (identifié par l'IMSI), OmniEPDG crée deux instances de machines d'état :
- FSM UE ePDG (
epdg_ue_fsm) - Gère le cycle de vie de la session de l'abonné du point de vue de l'ePDG : authentification, création de tunnel GTP et coordination de la destruction - FSM UE AAA (
aaa_ue_fsm) - Gère la signalisation côté AAA : échanges Diameter SWx avec le HSS et échanges S6b avec le PGW
Les deux FSM sont implémentées comme des processus Erlang gen_statem avec un mode de rappel de fonction d'état.
États de la FSM UE ePDG
La FSM UE ePDG suit la session d'un abonné depuis la demande d'authentification initiale jusqu'à l'état de tunnel actif et à la destruction. Le comportement de la FSM diverge à l'état authenticated en fonction du mode opérationnel.
FSM en Mode GTP
En mode GTP, l'établissement du tunnel passe par la création de session GTPv2-C au PGW, et la destruction implique la suppression de session GTPv2-C, la suppression d'ours initiée par le PGW et les flux de désinscription initiés par le HSS.
FSM en Mode VPN Simple
En mode VPN Simple, la FSM prend un raccourci à l'état authenticated. Au lieu d'envoyer une demande de création de session GTPv2-C, la FSM alloue une adresse IP à partir du pool local, crée une route hôte sur l'interface TUN et passe directement à active. Les états de destruction spécifiques au GTP (wait_create_session_resp, wait_delete_session_resp, dereg_pgw_wait_cancel, dereg_net_wait_s2b_delete) ne sont pas utilisés.
Référence d'État de la FSM UE ePDG
| État | Mode | Description | Attente de |
|---|---|---|---|
new | Les deux | État initial. Pas de session active. | Demande d'authentification de l'UE |
wait_auth_resp | Les deux | Demande d'authentification envoyée via SWm DER. | SWm DEA avec vecteurs d'authentification ou erreur |
authenticating | Les deux | Vecteurs d'authentification reçus, échange EAP en cours. | Mise à jour de localisation / achèvement de l'authentification |
authenticated | Les deux | Authentification terminée, profil d'abonné téléchargé. | Demande de tunnel de l'UE |
wait_create_session_resp | GTP | Demande de création de session GTPv2-C envoyée au PGW. | Réponse de création de session du PGW |
active | Les deux | Tunnel/route opérationnel. Le trafic de l'abonné circule. | Déclencheur de destruction |
wait_delete_session_resp | GTP | Demande de suppression de session GTPv2-C envoyée au PGW (destruction initiée par l'UE). | Réponse de suppression de session du PGW |
wait_swm_sta | Les deux | Demande de terminaison de session SWm envoyée. | SWm STA de AAA |
dereg_pgw_wait_cancel | GTP | Désinscription initiée par le PGW. Annulation de l'emplacement envoyée à l'UE. | Résultat d'annulation de l'emplacement |
dereg_net_wait_cancel | GTP | Désinscription initiée par le réseau/HSS. Annulation de l'emplacement envoyée à l'UE. | Résultat d'annulation de l'emplacement |
dereg_net_wait_s2b_delete | GTP | Désinscription initiée par le réseau. Suppression de session S2b envoyée au PGW. | Réponse de suppression de session |
États de la FSM UE AAA
La FSM UE AAA gère la signalisation Diameter vers le HSS (SWx) et le PGW (S6b) au nom de chaque abonné.
Référence d'État de la FSM UE AAA
| État | Description | Attente de |
|---|---|---|
new | État initial. Pas de session AAA active. | Demande d'authentification Diameter |
wait_swx_maa | SWx MAR envoyé au HSS pour les vecteurs EAP-AKA. | SWx MAA du HSS |
wait_swx_saa | SWx SAR envoyé au HSS pour l'attribution du serveur. | SWx SAA du HSS |
authenticated | Les sessions ePDG et PGW peuvent être actives. Suit l'état de session dual. | Événements de session |
auth_wait_swx_saa | SWx SAR envoyé pour mise à jour du PGW ou désinscription de l'utilisateur. | SWx SAA du HSS |
dereg_net_wait_s6b_asa | Désinscription initiée par le HSS. S6b ASR envoyé au PGW. | S6b ASA du PGW |
dereg_net_wait_swm_asa | La destruction S6b est terminée. SWm ASR envoyé à l'ePDG. | SWm ASA de l'ePDG |
Flux d'Appels
Mode GTP : Établissement de Session Réussi
Cette séquence montre une session réussie complète de l'authentification EAP-AKA jusqu'à un tunnel GTP actif.
Mode GTP : Destruction de Session Initiée par l'UE
Lorsque l'UE se déconnecte (par exemple, passe de WiFi à cellulaire ou l'utilisateur raccroche).
Mode GTP : Destruction de Session Initiée par le PGW
Lorsque le PGW termine la session (par exemple, violation de politique, délai d'attente ou action administrative).
Mode GTP : Désinscription Initiée par le Réseau (HSS)
Lorsque le HSS révoque l'enregistrement d'un abonné (par exemple, changement d'abonnement, détection de fraude ou action administrative).
Mode GTP : Poussée de Profil HSS et Ré-authentification
Lorsque le HSS pousse un profil d'abonné mis à jour, OmniEPDG déclenche une ré-authentification sur les sessions ePDG (SWm) et PGW (S6b) conformément à 3GPP TS 29.273 Section 8.1.2.3.3.
Mode VPN Simple : Établissement de Session Réussi
En mode VPN Simple, l'établissement de session est plus court. Après l'authentification EAP-AKA, la FSM ePDG alloue une IP à partir du pool local et configure une route hôte sur l'interface TUN, contournant toute interaction avec le PGW. Si skip_sar est activé, l'échange SAR/SAA avec le HSS est également ignoré.
Mode VPN Simple : Destruction de Session Initiée par l'UE
Lorsque l'UE se déconnecte en mode VPN Simple, la FSM libère l'adresse IP allouée et supprime la route hôte.
Identifiants d'Application Diameter
| Identifiant d'Application | Interface | Identifiant de Fournisseur | Description | Référence |
|---|---|---|---|---|
| 16777265 | SWx | 10415 (3GPP) | Authentification ePDG ↔ HSS et gestion des abonnés | 3GPP TS 29.273 |
| 16777272 | S6b | 10415 (3GPP) | Autorisation de session AAA ↔ PGW | 3GPP TS 29.273 |
Codes de Résultat Diameter
OmniEPDG mappe les codes de résultat Diameter aux valeurs de cause internes pour la propagation d'erreur inter-protocoles.
Codes de Résultat Standards
| Code de Résultat | Nom | Signification |
|---|---|---|
| 2001 | DIAMETER_SUCCESS | Opération terminée avec succès |
| 2002 | DIAMETER_LIMITED_SUCCESS | Opération partiellement réussie |
Codes de Résultat Expérimentaux 3GPP
| Code de Résultat | Nom | Signification | Référence |
|---|---|---|---|
| 4181 | DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE | HSS ne peut temporairement pas fournir de données d'authentification | 3GPP TS 29.273 |
| 5001 | DIAMETER_ERROR_USER_UNKNOWN | IMSI de l'abonné non trouvé dans le HSS | 3GPP TS 29.273 |
| 5002 | DIAMETER_UNKNOWN_SESSION_ID | Session non trouvée (utilisée pour STR/AAR obsolètes) | RFC 6733 |
| 5003 | DIAMETER_AUTHORIZATION_REJECTED | Abonné non autorisé pour le service | 3GPP TS 29.273 |
| 5004 | DIAMETER_ERROR_ROAMING_NOT_ALLOWED | Restrictions de roaming appliquées | 3GPP TS 29.273 |
| 5005 | DIAMETER_MISSING_AVP | AVP requis manquant dans le message | RFC 6733 |
| 5012 | DIAMETER_UNABLE_TO_COMPLY | Échec de traitement générique | RFC 6733 |
| 5420 | DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION | Aucune souscription EPS trouvée | 3GPP TS 29.273 |
| 5421 | DIAMETER_ERROR_RAT_NOT_ALLOWED | Technologie d'accès non autorisée | 3GPP TS 29.273 |
| 5422 | DIAMETER_ERROR_EQUIPMENT_UNKNOWN | IMEI de l'appareil non reconnu | 3GPP TS 29.273 |
Codes de Cause GTPv2-C (Uniquement en Mode GTP)
OmniEPDG gère les codes de cause GTPv2-C suivants dans les réponses de création/suppression de session du PGW. Les codes 1-15 sont informatifs, 16-63 indiquent le succès, et 64+ indiquent des erreurs. Voir 3GPP TS 29.274 Section 8.4.
Causes de Succès
| Code | Nom | Description |
|---|---|---|
| 16 | Request Accepted | Opération terminée avec succès |
| 17 | Request Accepted Partially | Succès partiel |
| 18 | New PDN Type (Network Preference) | Type de PDN changé en raison de la préférence du réseau |
| 19 | New PDN Type (Single Address Bearer) | Type de PDN changé en raison de la restriction d'un porteur d'adresse unique |
Causes d'Erreur (Sélectionnées)
| Code | Nom | Description |
|---|---|---|
| 64 | Context Not Found | Contexte de session non trouvé sur le PGW |
| 73 | No Resources Available | Épuisement des ressources PGW |
| 78 | Missing or Unknown APN | APN demandé non configuré sur le PGW |
| 82 | Denied in RAT | Technologie d'accès non autorisée |
| 84 | All Dynamic Addresses Occupied | Pool d'adresses IP épuisé sur le PGW |
| 92 | User Authentication Failed | Échec de l'authentification au PGW |
| 93 | APN Access Denied | Abonné non autorisé pour l'APN |
| 96 | IMSI/IMEI Not Known | Identité de l'abonné non reconnue |
| 109 | Invalid Peer | Échec de validation du pair |
| 113 | APN Congestion | APN surchargé |
| 120 | GTP-C Entity Congestion | Plan de contrôle PGW surchargé |
Format NAI
OmniEPDG identifie les abonnés en utilisant le format d'Identifiant d'Accès au Réseau (NAI) défini dans 3GPP TS 23.003 Section 19:
<prefix><IMSI>@nai.epc.mnc<MNC>.mcc<MCC>.3gppnetwork.org
Préfixe d'Identité et Type d'Authentification
Le préfixe NAI détermine la méthode d'authentification EAP selon 3GPP TS 23.003 :
| Préfixe | Type d'Authentification | Description |
|---|---|---|
0 | EAP-AKA | Authentification AKA standard (la plus courante pour les appels WiFi) |
6 | EAP-AKA' | Authentification AKA améliorée avec liaison au réseau |
OmniEPDG sélectionne automatiquement la méthode d'authentification en fonction du préfixe d'identité de l'UE. La plupart des UEs utilisent le préfixe 0 (EAP-AKA) pour les appels WiFi.
OmniEPDG extrait l'IMSI du NAI en analysant tout ce qui se trouve entre le préfixe et le symbole @. L'IMSI est ensuite utilisé comme clé principale pour toutes les machines d'état et opérations de signalisation par abonné.
Algorithmes Cryptographiques
OmniEPDG implémente des algorithmes cryptographiques conformément à 3GPP TS 33.402 et RFC 7296 (IKEv2).
Algorithmes de Chiffrement IKEv2
| Algorithme | ID | Taille de Clé | Statut | Référence |
|---|---|---|---|---|
| AES-CBC | 12 | 128, 192, 256 bits | Supporté (par défaut : 256) | RFC 3602 |
| AES-GCM-16 | 20 | 128, 192, 256 bits | Supporté | RFC 5282 |
| AES-GCM-12 | 19 | 128, 192, 256 bits | Supporté | RFC 5282 |
| AES-GCM-8 | 18 | 128, 192, 256 bits | Supporté | RFC 5282 |
| 3DES | 3 | 192 bits | Supporté (héritage) | RFC 2451 |
Algorithmes d'Intégrité IKEv2
| Algorithme | ID | Taille de Clé | Taille ICV | Statut | Référence |
|---|---|---|---|---|---|
| HMAC-SHA2-256-128 | 12 | 256 bits | 128 bits | Supporté (par défaut) | RFC 4868 |
| HMAC-SHA2-384-192 | 13 | 384 bits | 192 bits | Supporté | RFC 4868 |
| HMAC-SHA2-512-256 | 14 | 512 bits | 256 bits | Supporté | RFC 4868 |
| HMAC-SHA1-96 | 2 | 160 bits | 96 bits | Supporté (héritage) | RFC 2404 |
| HMAC-MD5-96 | 1 | 128 bits | 96 bits | Supporté (héritage) | RFC 2403 |
Algorithmes PRF IKEv2
| Algorithme | ID | Taille de Sortie | Statut | Référence |
|---|---|---|---|---|
| PRF-HMAC-SHA2-256 | 5 | 256 bits | Supporté (par défaut) | RFC 4868 |
| PRF-HMAC-SHA2-384 | 6 | 384 bits | Supporté | RFC 4868 |
| PRF-HMAC-SHA2-512 | 7 | 512 bits | Supporté | RFC 4868 |
| PRF-HMAC-SHA1 | 2 | 160 bits | Supporté (héritage) | RFC 2104 |
| PRF-HMAC-MD5 | 1 | 128 bits | Supporté (héritage) | RFC 2104 |
Groupes Diffie-Hellman IKEv2
| Groupe | ID | Taille | Statut | Référence |
|---|---|---|---|---|
| MODP-2048 | 14 | 2048 bits | Supporté (par défaut) | RFC 3526 |
| MODP-1024 | 2 | 1024 bits | Supporté (héritage) | RFC 2409 |
| MODP-1536 | 5 | 1536 bits | Supporté | RFC 3526 |
| MODP-3072 | 15 | 3072 bits | Supporté | RFC 3526 |
| MODP-4096 | 16 | 4096 bits | Supporté | RFC 3526 |
| ECP-256 | 19 | 256 bits | Supporté | RFC 5903 |
| ECP-384 | 20 | 384 bits | Supporté | RFC 5903 |
| ECP-521 | 21 | 521 bits | Supporté | RFC 5903 |
| Curve25519 | 31 | 256 bits | Supporté | RFC 8031 |
| Curve448 | 32 | 448 bits | Supporté | RFC 8031 |
Algorithmes ESP (SA Enfant)
Le tunnel ESP utilise les mêmes algorithmes de chiffrement et d'intégrité négociés lors de la création de SA_ENFANT IKEv2.
Configuration ESP par défaut :
- Chiffrement : AES-CBC-256 (clé de 32 octets, IV de 16 octets)
- Intégrité : HMAC-SHA2-256-128 (clé de 32 octets, ICV de 16 octets)
Fonctions Cryptographiques EAP-AKA
| Fonction | Algorithme | Référence |
|---|---|---|
| Dérivation MK | SHA-1 | RFC 4187 Section 7 |
| Expansion de clé PRF+ | FIPS 186-2 PRF (SHA-1) | RFC 4187 Annexe D |
| AT_MAC | HMAC-SHA1-128 | RFC 4187 Section 10.15 |
| Milenage (f1-f5) | AES-128 | 3GPP TS 35.206 |
Fonctions Cryptographiques EAP-AKA'
| Fonction | Algorithme | Référence |
|---|---|---|
| Dérivation CK'/IK' | HMAC-SHA-256 | RFC 5448 Section 3.3 |
| Dérivation MK | SHA-256 | RFC 5448 Section 3.4 |
| AT_MAC | HMAC-SHA256-128 | RFC 5448 Section 3.1 |
Conformité 3GPP
OmniEPDG implémente tous les algorithmes cryptographiques obligatoires spécifiés dans 3GPP TS 33.402 Section 8 :
| Exigence | Algorithme | Statut |
|---|---|---|
| Chiffrement IKEv2 (obligatoire) | AES-CBC-128 | ✓ Supporté |
| Intégrité IKEv2 (obligatoire) | HMAC-SHA2-256-128 | ✓ Supporté (par défaut) |
| PRF IKEv2 (obligatoire) | PRF-HMAC-SHA-256 | ✓ Supporté (par défaut) |
| DH IKEv2 (obligatoire) | Groupe 14 (MODP-2048) | ✓ Supporté (par défaut) |
| Chiffrement ESP (obligatoire) | AES-CBC-128/256 | ✓ Supporté |
| Intégrité ESP (obligatoire) | HMAC-SHA2-256-128 | ✓ Supporté (par défaut) |
| EAP-AKA | RFC 4187 | ✓ Implémenté |
| EAP-AKA' | RFC 5448 | ✓ Implémenté |
Types d'Adresse PDP (Uniquement en Mode GTP)
OmniEPDG prend en charge les types d'adresse PDP suivants tels que définis dans 3GPP TS 29.274 Section 8.14. En mode VPN Simple, seules les adresses IPv4 sont allouées à partir du pool local.
| Type | Description | Format PAA GTPv2-C |
|---|---|---|
| IPv4 | Porteur uniquement IPv4 | Adresse IPv4 de 4 octets |
| IPv6 | Porteur uniquement IPv6 | Longueur de préfixe de 1 octet + adresse IPv6 de 16 octets |
| IPv4v6 | Porteur double pile | Longueur de préfixe de 1 octet + adresse IPv6 de 16 octets + adresse IPv4 de 4 octets |