OmniPGW 操作指南
OmniPGW - 数据包网关控制平面 (PGW-C)
由 Omnitouch 网络服务提供
目录
概述
OmniPGW 是一个高性能的数据包网关控制平面 (PGW-C) 实现,适用于 3GPP LTE 演进包核心 (EPC) 网络,由 Omnitouch 网络服务开发。它管理数据会话的控制平面功能,包括:
- 会话管理 - 创建、修改和终止 UE (用户设备) 数据会话
- IP 地址分配 - 从配置的池中为移动设备分配 IP 地址
- 策略与计费控制 - 与 PCRF 接口进行策略执行和计费
- 用户平面协调 - 控制 PGW-U (用户平面) 进行数据包转发
PGW-C 的功能
- 接受来自 SGW-C 的会话请求 通过 S5/S8 接口 (GTP-C)
- 从配置的子网池中分配 UE IP 地址
- 通过 Gx 接口 (Diameter) 向 PCRF 请求策略决策
- 通过 Sxb 接口 (PFCP) 在 PGW-U 中编程转发规则
- 通过承载上下文和 QoS 规则管理 QoS 执行
- 跟踪计费信息 供计费系统使用
架构
组件概述
过程架构
PGW-C 基于 Elixir/OTP 构建,并使用监督的过程架构:
- 应用监督者 - 顶层监督者,管理所有组件
- 协议代理 - 处理进出协议消息
- 会话进程 - 每个活动 PDN 连接一个 GenServer
- 注册表 - 跟踪分配的资源 (IP、TEID、SEID 等)
- PFCP 节点管理器 - 维护与 PGW-U 对等体的 PFCP 关联
每个组件都受到监督,并将在故障时自动重启,以确保系统的可靠性。
网络接口
PGW-C 实现了三个主要的 3GPP 接口:
S5/S8 接口 (GTP-C v2)
目的: SGW-C 和 PGW-C 之间的控制平面信令
协议: 基于 UDP 的 GTP-C 版本 2
关键消息:
- 创建会话请求/响应
- 删除会话请求/响应
- 创建承载请求/响应
- 删除承载请求/响应
配置: 请参见 S5/S8 配置
Sxb 接口 (PFCP)
目的: PGW-C 和 PGW-U 之间的控制平面信令
协议: 基于 UDP 的 PFCP (数据包转发控制协议)
关键消息:
- 关联设置请求/响应
- 会话建立请求/响应
- 会话修改请求/响应
- 会话删除请求/响应
- 心跳请求/响应
配置: 请参见 PFCP/Sxb 接口文档
Gx 接口 (Diameter)
目的: 策略与计费规则功能 (PCRF) 接口
协议: Diameter (IETF RFC 6733)
关键消息:
- 信用控制初始请求/应答 (CCR-I/CCA-I)
- 信用控制终止请求/应答 (CCR-T/CCA-T)
配置: 请参见 Diameter Gx 接口文档
关键概念
PDN 会话
PDN (数据包数据网络) 会话表示 UE 与外部网络 (如互联网) 的数据连接。每个会话具有:
- UE IP 地址 - 从配置的子网池中分配
- APN (接入点名称) - 标识外部网络
- 承载上下文 - 包含 QoS 参数和隧道信息
- 计费 ID - 用于计费的唯一标识符
- TEID (隧道端点 ID) - S5/S8 接口隧道标识符
- SEID (会话端点 ID) - Sxb 接口会话标识符
承载上下文
承载表示具有特定 QoS 特性的流量流:
- 默认承载 - 每个 PDN 会话创建
- 专用承载 - 针对特定 QoS 需求的额外承载
- EBI (EPS 承载 ID) - 每个承载的唯一标识符
- QoS 参数 - QCI、ARP、比特率 (MBR、GBR)
PFCP 规则
PGW-C 向 PGW-U 编程数据包处理规则:
- PDR (数据包检测规则) - 匹配数据包 (上行/下行)
- FAR (转发动作规则) - 指定转发行为
- QER (QoS 执行规则) - 执行比特率限制
- BAR (缓冲动作规则) - 控制数据包缓冲
有关详细信息,请参见 PFCP 接口文档。
IP 地址分配
UE IP 地址从配置的子网池中分配:
- 基于 APN 的选择 - 不同的 APN 可以使用不同的子网
- 动态分配 - 从可用范围中随机选择 IP
- 静态分配 - 支持 UE 请求的 IP 地址
- 冲突检测 - 确保唯一的 IP 分配
有关配置,请参见 UE IP 池分配,以及 IPv6 / 双栈 以获取 IPv6 和 IPv4v6 PDN 操作。
入门
先决条件
- Elixir ~1.16
- Erlang/OTP 26+
- 与 SGW-C、PGW-U 和 PCRF 的网络连接
- 理解 LTE EPC 架构
启动 OmniPGW
- 在
config/runtime.exs中配置运行时设置 - 编译应用程序:
mix deps.get
mix compile - 启动应用程序:
mix run --no-halt
验证操作
检查日志以确认成功启动:
[info] 启动 OmniPGW...
[info] 在 127.0.0.42:42069 启动指标导出器
[info] 在 127.0.0.10 启动 S5/S8 代理
[info] 在 127.0.0.20 启动 Sxb 代理
[info] 启动 Gx 代理
[info] 启动 PFCP 节点管理器
[info] OmniPGW 成功启动
访问指标在 http://127.0.0.42:42069/metrics (配置地址)。
配置
所有运行时配置都在 config/runtime.exs 中定义。配置结构分为几个部分:
配置概述
快速配置参考
| 部分 | 目的 | 文档 |
|---|---|---|
| metrics | Prometheus 指标导出器 | 监控指南 |
| diameter | Gx 接口到 PCRF | Diameter Gx 配置 |
| s5s8 | GTP-C 接口到 SGW-C | S5/S8 配置 |
| sxb | PFCP 接口到 PGW-U | PFCP 配置 |
| ue | UE IP 地址池 | IP 池配置 |
| pco | 协议配置选项 | PCO 配置 |
| CDR | 离线计费与使用报告 | CDR 格式 |
请参阅 完整配置指南 以获取详细信息。
实时操作监控 (OAM API)
OmniPGW 提供一个 OAM REST API 用于实时监控和操作,提供系统状态的即时可见性。根据需要查询这些读取端点 (或在轮询间隔/从脚本中) 以获取实时操作视图 - 无需命令行访问主机或原始指标查询。
访问 OAM API
API 通过 HTTPS/TLS 提供。所有路由都在 /api 前缀下提供。
https://<omnipgw-ip>:8443/
交互式 API 文档 (Swagger UI) 可在以下地址访问:
https://<omnipgw-ip>:8443/api/docs
示例健康检查 (使用 -k 进行自签名实验室证书):
curl -k https://localhost:8443/api/status
{"result":"ok"}
可用端点:
| 目的 | 端点 | 替代 (旧页面) |
|---|---|---|
| 深入了解特定订阅者 (IMSI/MSISDN/IP) | POST /api/ue_search | UE 搜索 |
| 列出/搜索活动 PDN 会话 | GET /api/sessions[?search=<imsi|msisdn|ip>] | PGW 会话 |
| 按 IMSI 获取一个会话 | GET /api/sessions/<imsi> | PGW 会话 (详细) |
| 会话历史/审计事件 | GET /api/session_history[?type=&search=&page=&page_size=] | 会话历史 |
| 网络拓扑概述 | GET /api/topology | 网络拓扑 |
| UE IP 地址池利用率 | GET /api/ip_pools, GET /api/ip_pools/<name> | IP 池 |
| UPF / PFCP 对等体状态 | GET /api/upf, GET /api/upf/<ip> | PFCP 会话 / UPF 状态 |
| UPF 选择规则、健康、PCO 配置 | GET /api/upf_selection | UPF 选择 |
| Diameter (Gx/Gy) 对等体连接性 | GET /api/diameter[?status=connected|disconnected], GET /api/diameter/<origin-host> | Diameter 对等体 |
| 每个会话的在线计费 (Gy) 状态 | GET /api/charging[?search=<imsi>], GET /api/charging/<imsi> | Gy 状态 |
| P-CSCF DNS 发现状态 | GET /api/pcscf_monitor | P-CSCF 监控 |
| 健康检查 | GET /api/status | - |
要获取实时仪表板样式视图,请在间隔内轮询集合端点,例如:
watch -n 2 'curl -sk https://localhost:8443/api/sessions'
watch -n 1 'curl -sk https://localhost:8443/api/diameter?status=disconnected'
注意:以前的 日志 页面 (实时日志流) 和 Gy 模拟器 页面没有 OAM API 等效项。从主机/您的日志聚合器流式传输日志,并使用
GET /api/charging检查实时 Gy/在线计费状态。
主要功能
按需和轮询数据:
- 每个端点返回 OmniPGW 进程的当前实时状态
- 使用
watch/cron/脚本按间隔轮询以获取自动刷新的视图 - 状态字段 (例如对等体
connected/associated) 在 JSON 中明确返��
搜索与过滤:
- 通过 IMSI、IP、MSISDN 或 APN 通过
GET /api/sessions?search=...搜索会话 - 通过
?status=connected|disconnected过滤 Diameter 对等体 - 通过
?search=<imsi>过滤计费状态
完整详细记录:
- 每个实体端点 (
/api/sessions/<imsi>、/api/upf/<ip>、/api/diameter/<origin-host>、/api/charging/<imsi>) 返回完整状态作为 JSON - 检查完整会话、对等体配置和能力
访问控制:
- 通过 HTTPS/TLS 在 8443 端口提供
- 仅绑定到管理 IP,并前置您的访问控制
- 旨在用于 NOC/运营团队和自动化使用
操作工作流
会话故障排除 (深入了解):
1. 用户报告连接问题
2. POST /api/ue_search,JSON 主体包含 IMSI、MSISDN 或 IP
3. 查看响应中的综合会话详细信息:
a) 活动会话 - 验证会话存在且参数正确
b) 当前位置信息 - 检查 TAC、单元 ID、服务网络
c) 承载信息 - 验证默认和专用承载
- QCI、MBR/GBR、计费规则名称
- APN-AMBR 限制
d) 计费信息 - Gy 会话 ID、配额状态 (也可使用 GET /api/charging/<imsi>)
e) 策略信息 - Gx 会话、已安装的 PCC 规则
f) 最近事件 - GET /api/session_history?search=<imsi>
4. 如果未找到会话 → GET /api/diameter?status=disconnected 检查 PCRF 连接性
快速会话查找:
1. 用户报告问题
2. GET /api/sessions?search=<imsi|msisdn> (或 GET /api/sessions/<imsi>)
3. 验证会话存在且基本详细信息:
- 分配的 UE IP 地址
- QoS 参数
- 已建立的隧道端点
4. 要进行详细分析 → POST /api/ue_search
系统健康检查:
1. GET /api/upf → 验证所有 PGW-U 对等体 "已关联"
2. GET /api/diameter?status=connected → 验证所有 PCRF 对等体 "已连接"
3. GET /api/sessions → 检查活动会话数量与容量
4. GET /api/status → 整体健康检查 ({"result":"ok"})
容量监控:
- 计算
GET /api/sessions返回的条目 - 与许可/预期容量进行比较
- 确定峰值使用时间
- 监控 APN 之间的分布;使用
GET /api/ip_pools获取每个池的利用率
API 与指标
使用 OAM API 进行:
- 深入分析订阅者故障排除 (
POST /api/ue_search) - 单个会话详细信息和状态检查 (
GET /api/sessions/<imsi>) - 实时对等体状态 (
GET /api/upf、GET /api/diameter) - 跨所有接口的快速健康检查 (
GET /api/status) - 按 IMSI/MSISDN/IP 故障排除特定用户
- 承载 QoS 分析 (MBR、GBR、QCI)
- 策略和计费规则检查 (
GET /api/charging) - 会话历史和��计记录 (
GET /api/session_history) - IP 池容量监控 (
GET /api/ip_pools) - 验证配置和规则 (
GET /api/upf_selection)
使用 Prometheus 指标进行:
- 历史趋势
- 报警和通知
- 容量规划图
- 性能分析
- 长期监控
最佳实践: 同时使用两者 - OAM API 用于即时操作,Prometheus 用于趋势和警报。
监控与指标
除了 OAM API,OmniPGW 还提供与 Prometheus 兼容的指标进行监控:
可用指标
-
会话指标
teid_registry_count- 活动 S5/S8 会话seid_registry_count- 活动 PFCP 会话session_id_registry_count- 活动 Gx 会话address_registry_count- 分配的 UE IP 地址charging_id_registry_count- 活动计费 ID
-
消息指标
s5s8_inbound_messages_total- 接收的 GTP-C 消息sxb_inbound_messages_total- 接收的 PFCP 消息gx_inbound_messages_total- 接收的 Diameter 消息- 消息处理持续时间分布
-
错误指标
s5s8_inbound_errors_total- S5/S8 协议错误sxb_inbound_errors_total- PFCP 协议错误gx_inbound_errors_total- Diameter 错误
-
会话生命周期指标
pgw_session_create_total{result,cause,pdn_type,rat_type}- PDN 会话 创建尝试,按结果 (success/failure)、返回�� GTP 原因、PDN 类型 (ipv4/ipv6/ipv4v6) 和 RAT 类型进行细分pgw_session_delete_total{pdn_type}- 按 PDN 类型删除 PDN 会话pgw_session_modify_total- 处理的修改承载请求
-
UE IP 池指标
ue_pool_addresses_allocated{pool,ip_version}- 每个池 (APN 模式) 和 IP 版本分配的 UE 地址ue_pool_addresses_total{pool,ip_version}- 总池容量ue_pool_addresses_utilization_ratio{pool,ip_version}- 分配的比例 (0.0-1.0);用于池耗尽警报。注意共享地址范围的池每个都计算共享分配ue_ip_allocation_failures_total{ip_version,reason}- 分配失败 (pool_exhausted,already_registered)
-
每个对等体 UPF / PFCP 指标
upf_peer_associated{peer_ip}- 每个对等体的 PFCP 关联状态 1/0upf_peer_healthy{peer_ip}- 每个对等体的健康状态 1/0upf_peer_missed_heartbeats{peer_ip}- 每个对等体连续错过的心跳upf_heartbeat_rtt- PFCP 心跳往返时间分布,按peer_ip
-
承载与 QoS 指标
pgw_bearer_create_total{type,qci}- 按类型创建的承载 (default/dedicated) 和 QCIpgw_bearer_delete_total{type}- 按类型删除的承载
-
Diameter 对等体指标
diameter_peers_connected{application}- 按应用程序连接的 Diameter 对等体 (gx/gy/all)
访问指标
指标通过 HTTP 在配置的端点上公开:
curl http://127.0.0.42:42069/metrics
请参阅 监控与指标指南 以获取仪表板设置和警报。
详细文档
本节提供 OmniPGW 文档的全面概述。文档按主题和用例组织。
文档结构
OmniPGW 文档
├── OPERATIONS.md (本指南)
│
└── docs/
├── 配置与设置
│ ├── configuration.md 完整的 runtime.exs 参考
│ ├── ue-ip-allocation.md IP 池配置
│ └── pco-configuration.md DNS、P-CSCF、MTU 设置
│
├── 网络接口
│ ├── pfcp-interface.md Sxb/PFCP (PGW-U 通信)
│ ├── diameter-gx.md Gx (PCRF 通信)
│ ├── diameter-gy.md Gy/Ro (OCS 通信)
│ └── s5s8-interface.md S5/S8 (SGW-C 通信)
│
└── 操作
├── session-management.md PDN 会话生命周期
└── monitoring.md Prometheus 指标与警报
按主题分类的文档
🚀 入门
| 文档 | 描述 | 目的 |
|---|---|---|
| OPERATIONS.md | 主��操作指南 (本文件) | 概述和快速入门 |
⚙️ 配置
| 文档 | 描述 | 行数 |
|---|---|---|
| configuration.md | 完整的 runtime.exs 配置参考 | 1,600+ |
| ue-ip-allocation.md | UE IP 池管理与分配 | 943 |
| ipv6-dual-stack.md | 跨 PGW-C 和 UPF 的 IPv6 / IPv4v6 PDN 操作 | - |
| pco-configuration.md | 协议配置选项 (DNS、P-CSCF、MTU) | 344 |
🔌 网络接口
| 文档 | 描述 | 行数 |
|---|---|---|
| pfcp-interface.md | PFCP/Sxb 接口到 PGW-U | 1,355 |
| diameter-gx.md | Diameter Gx 接口到 PCRF (策略控制) | 941 |
| diameter-gy.md | Diameter Gy/Ro 接口到 OCS (在线计费) | 1,100+ |
| s5s8-interface.md | GTP-C S5/S8 接口到 SGW-C | 456 |
📊 操作与监控
| 文档 | 描述 | 行数 |
|---|---|---|
| session-management.md | PDN 会话生命周期与操作 | 435 |
| monitoring.md | Prometheus 指标、Grafana 仪表板、警报 | 807 |
| data-cdr-format.md | CDR 文件格式、URR 配置、离线计费 | 847 |
| qos-bearers.md | QoS 与承载管理、策略控制 | 448 |
| troubleshooting.md | 故障排除程序和常见问题 | 687 |
🔧 高级功能
| 文档 | 描述 | 行数 |
|---|---|---|
| pcscf-monitoring.md | P-CSCF 发现与健康监控 | 894 |
文档特点
📈 Mermaid 图表
所有文档都包含 Mermaid 图表 以便于理解:
- 架构图
- 序列图 (消息流)
- 状态机
- 网络拓扑
💡 实用示例
每个文档都包含:
- 真实的配置示例
- 可复制粘贴的配置
- 常见用例
🔍 故障排除
每个接口文档都包含:
- 常见问题和解决方案
- 调试命令
- 诊断指标
🔗 交叉引用
文档之间广泛交叉链接,便于导航。
阅读路径
对于网络操作员
- OPERATIONS.md - 概述 (本文件)
- configuration.md - 设置
- monitoring.md - 监控
- session-management.md - 日常操作
对于网络工程师
- OPERATIONS.md - 架构概述 (本文件)
- pfcp-interface.md - 用户平面控���
- diameter-gx.md - 策略控制
- diameter-gy.md - 在线计费
- s5s8-interface.md - 会话管理
- ue-ip-allocation.md - IP 管理
对于配置与部署
- configuration.md - 完整参考
- ue-ip-allocation.md - IP 池
- pco-configuration.md - 网络参数
- monitoring.md - 设置监控
文档统计
- 文档总数: 14
- 总行数: ~10,900+
- 总大小: ~265 KB
- Mermaid 图表: 75+
- 代码示例: 150+
涉及的关键概念
架构
- ✅ 控制/用户平面分离
- ✅ OTP/Elixir 架构
- ✅ 过程监督
- ✅ 基于 GenServer 的会话
协议
- ✅ PFCP (数据包转发控制协议)
- ✅ GTP-C v2 (GPRS 隧道协议)
- ✅ Diameter (RFC 6733)
3GPP 接口
- ✅ Sxb (PGW-C ↔ PGW-U)
- ✅ Gx (PGW-C ↔ PCRF)
- ✅ Gy/Ro (PGW-C ↔ OCS)
- ✅ S5/S8 (SGW-C ↔ PGW-C)
操作
- ✅ 会话管理
- ✅ IP 分配策略
- ✅ QoS 执行
- ✅ 计费集成
- ✅ 监控与警报
其他资源
3GPP 规范
| 规范 | 标题 |
|---|---|
| TS 29.274 | GTP-C v2 (S5/S8 接口) |
| TS 29.244 | PFCP (Sxb 接口) |
| TS 29.212 | Diameter Gx 接口 (策略控制) |
| TS 32.299 | Diameter 计费应用 (Gy/Ro) |
| TS 32.251 | 分组交换域计费 |
| TS 23.401 | EPC 架构 |
相关文档
- 配置文件: config/runtime.exs