Aller au contenu principal

Documentation sur l'allocation de pool IP UE

Gestion des adresses IP pour les appareils mobiles


Table des matières

  1. Aperçu
  2. Concepts d'allocation IP
  3. Configuration
  4. Processus d'allocation
  5. Sujets avancés
  6. Surveillance
  7. 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 IPSupportDescription
IPv4✅ CompletAdresses IPv4 standard
IPv6✅ CompletAdresses et préfixes IPv6
IPv4v6✅ CompletDual-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 PDNDescriptionAdresses allouées
IPv4Connexion uniquement IPv4Adresse IPv4 unique
IPv6Connexion uniquement IPv6Préfixe IPv6 (par exemple, /64)
IPv4v6Connexion dual-stackAdresse 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 :

FonctionDescription
EnregistrementMap UE IP → PID du processus de session
RechercheTrouver la session par UE IP
DésenregistrementLibérer l'IP lorsque la session se termine
Détection de collisionPré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 default si 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 motifClé RegexCorrespondances
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 APNClé correspondantePool utilisé
ims^ims100.64.10.0/24
ims.apn^ims100.64.10.0/24
ims.something.else^ims100.64.10.0/24
m2m.test^m2m\.100.64.20.0/24
m2mdefault42.42.42.0/24
enterprise.corpenterprise.corp10.100.0.0/16
foo.corp^.*\.corp$10.100.0.0/16
unknown.apndefault42.42.42.0/24

Notation de sous-réseau

Notation CIDR : <network>/<prefix_length>

CIDRIPs utilisablesPlage d'exemple
/24254100.64.1.1 - 100.64.1.254
/23510100.64.0.1 - 100.64.1.254
/221022100.64.0.1 - 100.64.3.254
/204094100.64.0.1 - 100.64.15.254
/1665534100.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 :

  1. Recherche de sous-réseau : Le système récupère les sous-réseaux configurés pour l'APN demandé
  2. Sélection aléatoire : Un sous-r��seau est sélectionné aléatoirement dans la liste disponible
  3. Génération d'IP : Une IP aléatoire est générée dans la plage du sous-réseau
  4. Vérification d'unicité : Le système vérifie que l'IP n'a pas été allouée
  5. Logique de réessai : Si une collision est détectée, réessayer jusqu'à 100 fois avec une nouvelle IP aléatoire
  6. 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 :

  1. D'abord, essayez de trouver un pool spécifique à l'APN dans la configuration
  2. Si non trouvé, utilisez le pool default
  3. 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 :

  1. Le PGW-C tente 100 allocations aléatoires
  2. Toutes les tentatives trouvent l'IP déjà allouée
  3. Retourne : {:error, :ue_ip_address_allocation_failed}
  4. L'établissement de session échoue
  5. 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 :

  1. Extraire l'IP demandée : Analyser l'IE d'allocation d'adresse PDN à partir de la demande
  2. Valider l'IP : Vérifier si l'IP demandée est dans le pool configuré pour cet APN
  3. Vérifier la disponibilité : Vérifier que l'IP n'est pas déjà allouée à une autre session
  4. 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

Interface de gestion des pools IP

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 :

  1. Pool épuisé

    # Vérifier l'allocation actuelle
    curl http://<pgw_c_ip>:42069/metrics | grep address_registry_count
  2. 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
    ]
    }
    }
  3. 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.exs pour 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 :

  1. Aucun pool IPv6 configuré

    # Sous-réseaux IPv6 manquants
    subnet_map: %{
    "internet" => [
    "100.64.1.0/24" # Seulement IPv4
    ]
    }
  2. 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_count approchant du maximum

Mesures proactives :

  1. 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)
    ]
  2. Utiliser des sous-réseaux plus grands :

    # Remplacer /24 par /22
    "internet" => [
    "100.64.0.0/22" # 1022 IPs utilisables
    ]
  3. 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

Planification réseau

Opérations


Retour au guide des opérations