Documentation sur l'allocation de pool IP UE
Gestion des adresses IP pour les appareils mobiles
Table des matières
- Aperçu
- Concepts d'allocation IP
- Configuration
- Processus d'allocation
- Sujets avancés
- Surveillance
- Dépannage
Aperçu
Le PGW-C alloue des adresses IP aux appareils UE (User Equipment) lorsqu'ils établissent des connexions PDN (Packet Data Network). C'est une fonction critique qui permet aux appareils mobiles de communiquer avec des réseaux externes.
Pourquoi l'allocation IP est importante
Chaque UE reçoit une adresse IP unique du PGW-C qui :
- Identifie l'appareil sur le réseau
- Achemine le trafic vers/depuis l'appareil
- Permet la facturation et l'application des politiques
- Persiste pendant la durée de la connexion PDN
Versions IP prises en charge
| Version IP | Support | Description |
|---|---|---|
| IPv4 | ✅ Complet | Adresses IPv4 standard |
| IPv6 | ✅ Complet | Adresses et préfixes IPv6 |
| IPv4v6 | ✅ Complet | Dual-stack (IPv4 et IPv6) |
Concepts d'allocation IP
Type de PDN
Lorsqu'un UE demande une connexion PDN, il spécifie un Type de PDN :
| Type de PDN | Description | Adresses allouées |
|---|---|---|
| IPv4 | Connexion uniquement IPv4 | Adresse IPv4 unique |
| IPv6 | Connexion uniquement IPv6 | Préfixe IPv6 (par exemple, /64) |
| IPv4v6 | Connexion dual-stack | Adresse IPv4 et préfixe IPv6 |
Méthodes d'allocation
Le PGW-C prend en charge deux méthodes d'allocation IP :
1. Allocation dynamique (la plus courante) :
- Le PGW-C sélectionne une IP dans le pool configuré
- Sélection aléatoire pour éviter la prévisibilité
- La détection des collisions garantit l'unicité
2. Allocation statique :
- L'UE demande une IP spécifique dans le message GTP-C
- Le PGW-C valide la disponibilité
- Utile pour les appareils d'entreprise avec des IP fixes
Sélection de sous-réseau basée sur l'APN
Différents APN (Access Point Names) peuvent utiliser différents pools IP :
Avantages :
- Séparation du trafic - Différents APN acheminent vers différents réseaux
- Différenciation des politiques - Appliquer différentes politiques par APN
- Planification de la capacité - Dimensionner les pools en fonction de l'utilisation prévue
- Facturation - Suivre l'utilisation par type de service
Registre d'adresses
Le Registre d'adresses suit les IP allouées :
| Fonction | Description |
|---|---|
| Enregistrement | Map UE IP → PID du processus de session |
| Recherche | Trouver la session par UE IP |
| Désenregistrement | Libérer l'IP lorsque la session se termine |
| Détection de collision | Prévenir les allocations en double |
Configuration
Configuration de base
Modifier config/runtime.exs :
config :pgw_c,
ue: %{
subnet_map: %{
# L'APN "internet" utilise deux sous-réseaux
"internet" => [
"100.64.1.0/24", # 254 IPs utilisables
"100.64.2.0/24" # 254 IPs utilisables
],
# L'APN "ims" utilise un sous-réseau
"ims" => [
"100.64.10.0/24"
],
# Pool par défaut pour les APN inconnus
default: [
"42.42.42.0/24"
]
}
}
Correspondance de motifs Regex pour les APN
Pour les scénarios où plusieurs APN partagent le même pool de sous-réseaux, vous pouvez utiliser des motifs regex au lieu de noms d'APN exacts. Cela est utile pour la correspondance d'APN avec des jokers.
Règles de motif :
- Les clés commençant par
^sont traitées comme des motifs regex - Les clés sans
^sont correspondantes exactement (rétrocompatibles) - Les motifs sont évalués dans l'ordre - le premier match l'emporte
- Retombe sur
defaultsi aucun motif ne correspond
config :pgw_c,
ue: %{
subnet_map: %{
# Regex : APNs commençant par "ims" (par exemple, "ims", "ims.apn", "ims.something.else")
"^ims" => [
"100.64.10.0/24"
],
# Regex : APNs commençant par "m2m." (par exemple, "m2m.test", "m2m.prod")
"^m2m\." => [
"100.64.20.0/24"
],
# Correspondance exacte uniquement - "enterprise.corp" exactement
"enterprise.corp" => [
"10.100.0.0/16"
],
# Pool par défaut pour les APN non correspondants
default: [
"42.42.42.0/24"
]
}
}
Remarques importantes :
- Les motifs regex utilisent la syntaxe regex standard Elixir/Erlang
- Les barres obliques doivent être échappées dans les chaînes Elixir (utilisez
\pour\) - Le
^au début est requis pour indiquer un motif regex - Les correspondances exactes et les motifs regex peuvent être mélangés dans la même configuration
- L'ordre est important pour les motifs regex - placez les motifs plus spécifiques en premier
Exemples de motifs courants :
| Type de motif | Clé Regex | Correspondances |
|---|---|---|
| Commence par | "^ims" | ims, ims.apn, ims.anything |
| Finit par | "^.*\.corp$" | foo.corp, bar.corp |
| Contient | "^.*test.*" | test, foo.test.bar, testing |
| Exact (avec des points) | "^internet\.apn$" | internet.apn uniquement |
Exemple de correspondance de suffixe :
Pour correspondre aux APN se terminant par un suffixe spécifique (comme .corp), utilisez ^.*\.suffix$ :
subnet_map: %{
# Correspondre aux APN se terminant par ".corp"
"^.*\.corp$" => ["10.100.0.0/16"],
# Correspondre aux APN se terminant par ".iot"
"^.*\.iot$" => ["10.200.0.0/16"],
default: ["42.42.42.0/24"]
}
Exemple de correspondance de motifs :
| Demande APN | Clé correspondante | Pool utilisé |
|---|---|---|
ims | ^ims | 100.64.10.0/24 |
ims.apn | ^ims | 100.64.10.0/24 |
ims.something.else | ^ims | 100.64.10.0/24 |
m2m.test | ^m2m\. | 100.64.20.0/24 |
m2m | default | 42.42.42.0/24 |
enterprise.corp | enterprise.corp | 10.100.0.0/16 |
foo.corp | ^.*\.corp$ | 10.100.0.0/16 |
unknown.apn | default | 42.42.42.0/24 |
Notation de sous-réseau
Notation CIDR : <network>/<prefix_length>
| CIDR | IPs utilisables | Plage d'exemple |
|---|---|---|
| /24 | 254 | 100.64.1.1 - 100.64.1.254 |
| /23 | 510 | 100.64.0.1 - 100.64.1.254 |
| /22 | 1022 | 100.64.0.1 - 100.64.3.254 |
| /20 | 4094 | 100.64.0.1 - 100.64.15.254 |
| /16 | 65534 | 100.64.0.1 - 100.64.255.254 |
Remarques :
- L'adresse réseau (par exemple, 100.64.1.0) n'est pas allouée
- L'adresse de diffusion (par exemple, 100.64.1.255) n'est pas allouée
- Le PGW-C alloue de
<network> + 1à<broadcast> - 1
Plusieurs sous-réseaux par APN
Équilibrage de charge entre sous-réseaux :
config :pgw_c,
ue: %{
subnet_map: %{
"internet" => [
"100.64.1.0/24",
"100.64.2.0/24",
"100.64.3.0/24",
"100.64.4.0/24"
]
}
}
Méthode de sélection :
- Le PGW-C sélectionne aléatoirement un sous-réseau dans la liste
- Fournit un équilibrage de charge de base
- Chaque session sélectionne indépendamment un sous-réseau
Avantages :
- Répartir la charge sur plusieurs sous-réseaux
- Expansion de capacité plus facile (ajouter de nouveaux sous-réseaux)
- Flexibilité pour les politiques de routage
Exemple du monde réel
config :pgw_c,
ue: %{
subnet_map: %{
# Accès général à Internet
"internet" => [
"100.64.0.0/20" # 4094 IPs pour usage général
],
# IMS (Voix sur LTE)
"ims" => [
"100.64.16.0/22" # 1022 IPs pour IMS
],
# APN d'entreprise
"enterprise.corp" => [
"10.100.0.0/16" # 65534 IPs pour l'entreprise
],
# Appareils IoT (bande passante faible)
"iot.m2m" => [
"100.64.20.0/22" # 1022 IPs pour IoT
],
# Fallback par défaut
default: [
"42.42.42.0/24" # 254 IPs pour les APN inconnus
]
}
}
Configuration IPv6
config :pgw_c,
ue: %{
subnet_map: %{
"internet" => [
# Pools IPv4
"100.64.1.0/24"
],
"internet.ipv6" => [
# Pools IPv6 (délégation de préfixe)
"2001:db8:1::/48"
],
default: [
"42.42.42.0/24"
]
}
}
Délégation de préfixe IPv6 :
- L'UE reçoit généralement un préfixe /64
- Permet à l'UE d'assigner plusieurs IP (par exemple, pour le partage de connexion)
- Exemple : L'UE reçoit
2001:db8:1:a::/64
Configuration dual-stack (IPv4v6)
config :pgw_c,
ue: %{
subnet_map: %{
"internet" => [
"100.64.1.0/24", # Pool IPv4
"2001:db8:1::/48" # Pool IPv6 (sera utilisé pour l'allocation IPv6)
]
}
}
Allocation dual-stack :
- L'UE demande un Type de PDN : IPv4v6
- Le PGW-C alloue à la fois une adresse IPv4 et un préfixe IPv6
- Les deux adresses sont actives simultanément
Processus d'allocation
L'allocation IP se produit lors de la création de session lorsque le PGW-C reçoit une demande de création de session via l'interface S5/S8. Voir Interface S5/S8 pour les détails du message GTP-C et Gestion de session pour le cycle de vie de la session.
Étape par étape : Allocation dynamique IPv4
Comment ça fonctionne
Processus d'allocation dynamique :
- Recherche de sous-réseau : Le système récupère les sous-réseaux configurés pour l'APN demandé
- Sélection aléatoire : Un sous-r��seau est sélectionné aléatoirement dans la liste disponible
- Génération d'IP : Une IP aléatoire est générée dans la plage du sous-réseau
- Vérification d'unicité : Le système vérifie que l'IP n'a pas été allouée
- Logique de réessai : Si une collision est détectée, réessayer jusqu'à 100 fois avec une nouvelle IP aléatoire
- Enregistrement : Une fois une IP unique trouvée, elle est enregistrée à la session
Points de conception clés :
- Max 100 tentatives : Empêche les boucles infinies lorsque le pool est presque épuisé
- Sélection aléatoire : Évite les modèles d'attribution d'IP prévisibles pour la sécurité
- Opérations atomiques : Le registre basé sur les processus garantit aucune allocation en double
- Retour au pool par défaut : Si l'APN n'est pas trouvé dans la configuration, utilise le pool par défaut
Gestion des collisions
Scénario : Deux sessions essaient d'allouer la même IP simultanément
Comment la prévention des collisions fonctionne :
- Le registre traite les demandes une à la fois (sérialisé)
- Aucune condition de concurrence possible
- La première demande à enregistrer une IP réussit
- Les demandes ultérieures pour la même IP sont rejetées
- Les sessions rejetées réessaient automatiquement avec une nouvelle IP aléatoire
Retour au sous-réseau par défaut
Scénario : L'UE demande un APN inconnu
Configuration d'exemple :
# Config
subnet_map: %{
"internet" => ["100.64.1.0/24"],
default: ["42.42.42.0/24"]
}
Comportement :
- L'UE demande l'APN : "unknown.apn"
- Le système recherche "unknown.apn" dans subnet_map
- Non trouvé, donc retombe sur le pool par défaut
- Alloue une IP de 42.42.42.0/24
Logique de retour :
- D'abord, essayez de trouver un pool spécifique à l'APN dans la configuration
- Si non trouvé, utilisez le pool
default - Si aucun défaut configuré, l'allocation échoue
Désallocation à la terminaison de session
Nettoyage automatique :
- Lorsque le processus de session se termine, le registre nettoie
- L'IP est immédiatement disponible pour de nouvelles allocations
- Aucune intervention manuelle requise
Sujets avancés
Épuisement du pool
Scénario : Toutes les IP du pool sont allouées
Pool: 100.64.1.0/24 (254 IPs utilisables)
Allouées: 254 IPs
Nouvelle demande arrive → Épuisement
Que se passe-t-il :
- Le PGW-C tente 100 allocations aléatoires
- Toutes les tentatives trouvent l'IP déjà allouée
- Retourne :
{:error, :ue_ip_address_allocation_failed} - L'établissement de session échoue
- Le SGW-C reçoit une réponse d'erreur
Prévention :
# Surveiller l'utilisation du pool
address_registry_count / total_pool_size > 0.8 # Alerte à 80%
# Élargir le pool avant épuisement
"internet" => [
"100.64.1.0/24",
"100.64.2.0/24", # Ajouter un sous-réseau supplémentaire
"100.64.3.0/24"
]
Allocation IP statique
Cas d'utilisation : Appareil d'entreprise a besoin d'une IP fixe
Format de message GTP-C :
Create Session Request
├── IMSI: 310260123456789
├── APN: enterprise.corp
├── PDN Address Allocation (IE)
│ └── PDN Type: IPv4
│ └── IPv4 Address: 10.100.0.50 ← UE demande une IP spécifique
Traitement OmniPGW :
- Extraire l'IP demandée : Analyser l'IE d'allocation d'adresse PDN à partir de la demande
- Valider l'IP : Vérifier si l'IP demandée est dans le pool configuré pour cet APN
- Vérifier la disponibilité : Vérifier que l'IP n'est pas déjà allouée à une autre session
- Allouer ou rejeter :
- Si disponible : Allouer l'IP demandée à cette session
- Si indisponible : Rejeter la session avec un code de cause approprié
Résultats possibles :
- Succès : L'UE reçoit exactement l'adresse IP qu'elle a demandée
- Échec (IP utilisée) : Session rejetée - IP déjà allouée
- Échec (IP non dans le pool) : Session rejetée - IP non dans la plage configurée
Délégation de préfixe IPv6
L'UE demande IPv6 :
Create Session Request
├── PDN Type: IPv6
Le PGW-C alloue un préfixe /64 :
Préfixe alloué : 2001:db8:1:a::/64
L'UE peut utiliser :
- 2001:db8:1:a::1
- 2001:db8:1:a::2
- ... (18 quintillions d'adresses)
Avantages :
- L'UE peut assigner plusieurs IP (par exemple, partage de connexion)
- Prend en charge SLAAC (Stateless Address Autoconfiguration)
- Élimine la nécessité de NAT
Allocation dual-stack
L'UE demande IPv4v6 :
Create Session Request
├── PDN Type: IPv4v6
Le PGW-C alloue les deux :
IPv4: 100.64.1.42
IPv6: 2001:db8:1:a::/64
Gestion du trafic :
- Le trafic IPv4 utilise l'adresse IPv4
- Le trafic IPv6 utilise le préfixe IPv6
- Les deux actifs simultanément
- Tunnels GTP séparés (ou tunnel dual-stack)
Adresses IP privées vs publiques
Pools IP privées (RFC 1918) :
# Non routables sur Internet public
subnet_map: %{
"internet" => [
"10.0.0.0/8",
"172.16.0.0/12",
"192.168.0.0/16"
]
}
Nécessite NAT au PGW-U pour accéder à Internet
Pools IP publiques :
# IP publiques routables (exemple seulement)
subnet_map: %{
"internet" => [
"203.0.113.0/24" # Bloc IP public
]
}
Aucun NAT requis - routage direct vers Internet
Recommandation :
- Utilisez des IP privées (RFC 6598) :
100.64.0.0/10(NAT de niveau opérateur) - Réservez des IP publiques uniquement pour des services spéciaux
Surveillance
Interface Web - Gestion des pools IP
OmniPGW fournit une interface web en temps réel pour surveiller l'allocation et l'utilisation des pools IP.
Accès : http://<omnipgw-ip>:<web-port>/ip_pools

Fonctionnalités :
1. Vue d'ensemble du pool
- Total des IPs dans tous les pools
- Adresses actuellement allouées
- IPs disponibles restantes
- Pourcentage d'utilisation en temps réel
2. État du pool par APN Chaque pool configuré affiche :
- Nom du pool - Identifiant APN (par exemple, "default", "ims.something.else", "Internet")
- Étiquette APN - Badge du nom APN configuré
- Plage IP - Notation CIDR montrant la plage de sous-réseau
- Utilisation - Indicateur visuel montrant le pourcentage utilisé
- Statistiques d'allocation :
- Total : Nombre d'IPs dans le pool
- Allouées : IPs actuellement assignées
- Disponibles : IPs restantes pour allocation
3. Mises à jour en temps réel
- Actualisation automatique toutes les 2 secondes
- Aucune recharge de page requise
- Suivi en direct de l'utilisation
Cas d'utilisation :
- Vérification rapide de la capacité avant la maintenance
- Identifier les pools approchant de l'épuisement
- Vérifier la configuration du pool
- Surveiller les modèles d'allocation par APN
Métriques clés
Nombre d'adresses dans le registre :
# IPs actuellement allouées
address_registry_count
# Utilisation du pool (nécessite un calcul)
address_registry_count / <total_pool_size> * 100
Exemple :
Pool: 100.64.1.0/24 (254 IPs)
Allouées: 150 IPs
Utilisation: 150 / 254 = 59%
Alertes
# Alerte sur une utilisation élevée du pool
- alert: UEIPPoolUtilizationHigh
expr: address_registry_count > 200 # Pour le pool /24
for: 10m
annotations:
summary: "Utilisation du pool IP UE au-dessus de 80%"
description: "Actuel : {{ $value }} / 254 IPs allouées"
# Alerte sur l'épuisement du pool
- alert: UEIPPoolExhausted
expr: address_registry_count >= 254 # Pour le pool /24
for: 1m
annotations:
summary: "Pool IP UE épuisé - aucune IP disponible"
# Alerte sur les échecs d'allocation
- alert: UEIPAllocationFailures
expr: rate(ue_ip_allocation_failures_total[5m]) > 0
for: 5m
annotations:
summary: "Échecs d'allocation IP UE en cours"
Tableau de bord Grafana
Panneau 1 : Utilisation du pool IP
# Jauge montrant le pourcentage
(address_registry_count / 254) * 100
Panneau 2 : IPs allouées au fil du temps
# Série temporelle
address_registry_count
Panneau 3 : Taux d'allocation
# Taux de nouvelles allocations
rate(address_registry_count[5m])
Panneau 4 : Risque d'épuisement du pool
# Jours jusqu'à épuisement (basé sur le taux actuel)
(254 - address_registry_count) / rate(address_registry_count[1h])
Dépannage
Problème 1 : Établissement de session échoue (Aucune IP disponible)
Symptômes :
- Réponse de création de session : Cause "Demande rejetée"
- Journal : "Échec de l'allocation d'adresse IP UE"
Causes possibles :
-
Pool épuisé
# Vérifier l'allocation actuelle
curl http://<pgw_c_ip>:42069/metrics | grep address_registry_count -
Erreur de configuration
# Vérifier la configuration du sous-réseau
config :pgw_c,
ue: %{
subnet_map: %{
"internet" => [
"100.64.1.0/24" # Assurez-vous que CIDR est valide
]
}
} -
Mauvaise configuration de l'APN
# Si l'APN n'est pas trouvé, retombe sur le défaut
# Assurez-vous que le pool par défaut existe
subnet_map: %{
default: ["42.42.42.0/24"]
}
Résolution :
- Élargir le pool : Ajouter plus de sous-réseaux
- Nettoyer les sessions obsolètes : Redémarrer le PGW-C pour libérer les IPs perdues
- Vérifier la config : Vérifier
runtime.exspour des fautes de frappe
Problème 2 : Collision d'adresse IP
Symptômes :
- Deux UEs reçoivent la même IP (très rare)
- Problèmes de routage
Cause :
- Bug dans le registre d'adresses (ne devrait pas se produire)
Débogage :
# Vérifier les IPs en double dans les journaux
grep "already_registered" /var/log/pgw_c.log
Résolution :
- Devrait se corriger automatiquement (la deuxième session réessaie)
- Si persistant, signaler un bug
Problème 3 : Mauvais pool IP utilisé
Symptômes :
- L'UE reçoit une IP d'un sous-réseau inattendu
- L'APN "internet" obtient une IP du pool "ims"
Cause :
- Configuration incorrecte de subnet_map
Vérifier :
# Vérifier la correspondance exacte de la chaîne APN
subnet_map: %{
"internet" => [...], # Sensible à la casse
"Internet" => [...] # APN différent !
}
Résolution :
- Assurez-vous que les noms d'APN correspondent exactement (sensible à la casse)
- Utilisez le pool par défaut pour attraper tout
Problème 4 : Échec de l'allocation IPv6
Symptômes :
- L'UE demande IPv6, reçoit une erreur
Causes possibles :
-
Aucun pool IPv6 configuré
# Sous-réseaux IPv6 manquants
subnet_map: %{
"internet" => [
"100.64.1.0/24" # Seulement IPv4
]
} -
Préfixe IPv6 invalide
# Préfixe trop petit (devrait être /48 ou plus grand)
"internet" => [
"2001:db8::/128" # Mauvais - pas de place pour allocation
]
Résolution :
# Ajouter un pool IPv6
subnet_map: %{
"internet" => [
"100.64.1.0/24",
"2001:db8:1::/48" # Pool IPv6
]
}
Problème 5 : Utilisation élevée du pool
Symptômes :
- Approchant de l'épuisement du pool
address_registry_countapprochant du maximum
Mesures proactives :
-
Ajouter des sous-réseaux :
"internet" => [
"100.64.1.0/24", # Existant
"100.64.2.0/24", # Nouveau sous-réseau (ajoute 254 IPs)
"100.64.3.0/24" # Nouveau sous-réseau (ajoute 254 IPs)
] -
Utiliser des sous-réseaux plus grands :
# Remplacer /24 par /22
"internet" => [
"100.64.0.0/22" # 1022 IPs utilisables
] -
Nettoyage des sessions :
- Surveiller les sessions obsolètes
- Assurer un traitement correct des demandes de suppression de session
Meilleures pratiques
Planification de capacité
Calculer la taille de pool requise :
Utilisateurs concurrents attendus : 10,000
Concurrence de pointe : 30% (3,000 sessions simultanées)
Tampon de croissance : 50%
IPs requises : 3,000 * 1.5 = 4,500 IPs
Sous-réseau : /20 (4,094 IPs utilisables) - Trop petit
Sous-réseau : /19 (8,190 IPs utilisables) - Suffisant
Sélection de sous-réseau
Recommandé :
- Utiliser
100.64.0.0/10(RFC 6598 - NAT de niveau opérateur) - Fournit 4 millions d'IPs
- Réservé pour le NAT des fournisseurs de services
À éviter :
- IPs publiques (coûteuses, limitées)
- Plages privées courantes qui entrent en conflit avec les VPN d'entreprise
Mise en page de configuration
config :pgw_c,
ue: %{
subnet_map: %{
# APN Internet principal - grand pool
"internet" => [
"100.64.0.0/18" # 16,382 IPs
],
# IMS - pool dédié plus petit
"ims" => [
"100.64.64.0/22" # 1,022 IPs
],
# Entreprise - pool moyen
"enterprise.corp" => [
"100.64.68.0/22" # 1,022 IPs
],
# IoT - grand pool pour de nombreux appareils
"iot.m2m" => [
"100.64.72.0/20" # 4,094 IPs
],
# Par défaut - petit fallback
default: [
"100.64.127.0/24" # 254 IPs
]
}
}
Documentation connexe
Configuration
- Guide de configuration - Configuration du pool IP UE, mappage des sous-réseaux APN
- Configuration PCO - DNS, P-CSCF, MTU livrés avec l'adresse IP
- Gestion de session - Cycle de vie de la session, allocation IP lors de la configuration PDN
- Interface PFCP - Attribution d'adresse UE via PFCP au UPF
Planification réseau
- Interface S5/S8 - Livraison d'adresses IP via GTP-C
- Interface Diameter Gx - Contrôle des politiques pour l'allocation IP
Opérations
- Guide de surveillance - Métriques d'utilisation du pool IP, suivi des allocations
- Format CDR de données - Adresses IP UE dans les CDR pour la corrélation de facturation