跳到主要内容

OmniPGW 操作指南

OmniPGW - 数据包网关控制平面 (PGW-C)

由 Omnitouch 网络服务提供


目录​

  1. 概述
  2. 架构
  3. 网络接口
  4. 关键概念
  5. 快速入门
  6. 配置
  7. 实时操作监控 (OAM API)
  8. 监控与指标
  9. 详细文档
  10. 附加资源

概述​

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​

  1. 在 config/runtime.exs 中配置运行时设置
  2. 编译应用程序:
    mix deps.get
    mix compile
  3. 启动应用程序:
    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 中定义。此文件在应用程序启动时进行评估。以下是完整示例;每个部分在下面的参考表中描述,并在 配置参考 中详细说明。

# config/runtime.exs
import Config

# 日志配置
config :logger, level: :info

config :pgw_c,
# 指标 (Prometheus)
metrics: %{
enabled: true,
ip_address: "10.0.0.20", # 管理网络
port: 9090,
registry_poll_period_ms: 5_000
},

# Diameter/Gx (PCRF 接口)
diameter: %{
listen_ip: "0.0.0.0",
host: "omnipgw.epc.mnc001.mcc001.3gppnetwork.org",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
peer_list: [
%{
host: "pcrf-primary.epc.mnc001.mcc001.3gppnetwork.org",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
ip: "10.0.1.30",
initiate_connection: true
},
%{
host: "pcrf-backup.epc.mnc001.mcc001.3gppnetwork.org",
realm: "epc.mnc001.mcc001.3gppnetwork.org",
ip: "10.0.2.30",
initiate_connection: true
}
]
},

# S5/S8 (SGW-C 接口)
s5s8: %{
local_ipv4_address: "10.0.0.20"
},

# Sxb/PFCP (PGW-U 接口)
sxb: %{
local_ip_address: "10.0.0.20"
},

# UPF 选择
upf_selection: %{
rules: [
%{
name: "默认互联网",
priority: 1,
match_field: :apn,
match_regex: ~r/^internet/,
upf_pool: [
%{remote_ip_address: "10.0.0.21", remote_port: 8805, weight: 100},
%{remote_ip_address: "10.0.0.22", remote_port: 8805, weight: 0} # 备用
]
}
],
fallback_pool: [
%{remote_ip_address: "10.0.0.21", remote_port: 8805, weight: 100}
]
},

# UE IP 池
ue: %{
subnet_map: %{
"internet" => [
"100.64.0.0/18" # 16,382 个 IP
],
"ims" => [
"100.64.64.0/22" # 1,022 个 IP
],
"enterprise.corp" => [
"10.100.0.0/16" # 65,534 个 IP
],
default: [
"100.64.127.0/24" # 254 个 IP
]
}
},

# 协议配置选项
pco: %{
primary_dns_server_address: "8.8.8.8",
secondary_dns_server_address: "8.8.4.4",
p_cscf_ipv4_address_list: ["10.0.0.50", "10.0.0.51"],
ipv4_link_mtu_size: 1400
}

配置分为几个部分:

配置概述​

快速配置参考​

部分目的文档
metricsPrometheus 指标导出器监控指南
diameterGx 接口到 PCRFDiameter Gx 配置
s5s8GTP-C 接口到 SGW-CS5/S8 配置
sxbPFCP 接口到 PGW-UPFCP 配置
ueUE IP 地址池IP 池配置
pco协议配置选项PCO 配置
CDR离线计费和使用报告CDR 格式
charging在线/离线计费模式,紧急覆盖计费覆盖

有关详细信息,请参阅 完整配置指南。


实时操作监控 (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_searchUE 搜索
列出/搜索活动 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_selectionUPF 选择
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 状态
紧急覆盖:禁用在线计费节点范围PUT /api/charging/override, GET /api/charging/override, DELETE /api/charging/override-
P-CSCF DNS 发现状态GET /api/pcscf_monitorP-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/a 脚本进行轮询以获取自动刷新的视图
  • 状态字段(例如对等体 connected/associated)在 JSON 中明确返回

搜索与过滤:

  • 通过 GET /api/sessions?search=... 按 IMSI、IP、MSISDN 或 APN 搜索会话
  • 通过 ?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/0
    • upf_peer_healthy{peer_ip} - 每个对等体的健康状态 1/0
    • upf_peer_missed_heartbeats{peer_ip} - 每个对等体连续错过的心跳
    • upf_heartbeat_rtt - 按 peer_ip 的 PFCP 心跳往返时间分布
  • 承载和 QoS 指标

    • pgw_bearer_create_total{type,qci} - 按类型(default/dedicated)和 QCI 创建的承载
    • pgw_bearer_delete_total{type} - 按类型删除的承载
  • Diameter 对等体指标

    • diameter_peers_connected{application} - 按应用(gx/gy/all)连接的 Diameter 对等体

访问指标​

指标通过 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 会话生命周期
├── charging-override.md 破玻璃在线计费覆盖
└── monitoring.md Prometheus 指标与警报

按主题的文档​

🚀 入门​

文档描述目的
OPERATIONS.md主要操作指南(本文件)概述和快速入门

⚙️ 配置​

文档描述行数
configuration.md完整的 runtime.exs 配置参考1,600+
ue-ip-allocation.mdUE IP 池管理和分配943
ipv6-dual-stack.mdPGW-C 和 UPF 之间的 IPv6 / IPv4v6 PDN 操作-
pco-configuration.md协议��置选项(DNS、P-CSCF、MTU)344

🔌 网络接口​

文档描述行数
pfcp-interface.mdPFCP/Sxb 接口到 PGW-U1,355
diameter-gx.mdDiameter Gx 接口到 PCRF(策略控制)941
diameter-gy.mdDiameter Gy/Ro 接口到 OCS(在线计费)1,100+
charging-override.md破玻璃覆盖以在 OCS 事件期间禁用在线计费-
s5s8-interface.mdGTP-C S5/S8 接口到 SGW-C456

📊 操作与监控​

文档描述行数
session-management.mdPDN 会话生命周期和操作435
monitoring.mdPrometheus 指标、Grafana 仪表板、警报807
data-cdr-format.mdCDR 文件格式、URR 配置、离线计费847
qos-bearers.mdQoS 和承载管理、策略控制448
troubleshooting.md故障排除程序和常见问题687

🔧 高级功能​

文档描述行数
pcscf-monitoring.mdP-CSCF 发现和健康监控894

文档特点​

📈 Mermaid 图表​

所有文档都包含 Mermaid 图表 以便于理解:

  • 架构图
  • 时序图(消息流)
  • 状态机
  • 网络拓扑

💡 实用示例​

每个文档包括:

  • 真实的配置示例
  • 可直接复制粘贴的配置
  • 常见用例

🔍 故障排除​

每个接口文档包括:

  • 常见问题和解决方案
  • 调试命令
  • 诊断指标

🔗 交叉引用​

文档之间进行了广泛的交叉链接,以便于导航。

阅读路径​

对于网络运营商​

  1. OPERATIONS.md - 概述(本文件)
  2. configuration.md - 设置
  3. monitoring.md - 监控
  4. session-management.md - 日常操作

对于网络工程师​

  1. OPERATIONS.md - 架构概述(本文件)
  2. pfcp-interface.md - 用户平面控制
  3. diameter-gx.md - 策略控制
  4. diameter-gy.md - 在线计费
  5. s5s8-interface.md - 会话管理
  6. ue-ip-allocation.md - IP 管理

对于配置与部署​

  1. configuration.md - 完整参考
  2. ue-ip-allocation.md - IP 池
  3. pco-configuration.md - 网络参数
  4. 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.274GTP-C v2(S5/S8 接口)
TS 29.244PFCP(Sxb 接口)
TS 29.212Diameter Gx 接口(策略控制)
TS 32.299Diameter 计费应用(Gy/Ro)
TS 32.251分组交换域计费
TS 23.401EPC 架构

相关文档​