IPv6 / 双栈 (IPv4v6) PDN 支持
在 OmniPGW(控制平面)和 OmniUPF(用户平面)之间操作支持 IPv6 的 PDN 连接的端到端指南。此页面涵盖了 PDN 类型的协商和信令、两个节点所需的配置以及如何通过动态路由实现 UE 的 IPv6 可达性。
有关详细的 UE 地址池模型(APN 匹配、分配、冲突处理),请参见 UE IP Pool Allocation。有关 PFCP 和 Gx 接口的一般信息,请参见 PFCP/Sxb 和 Diameter Gx。
目录
概述
PDN 连接可以是 IPv4、IPv6 或 IPv4v6(双栈)。PDN 类型由 UE/SGW 在 GTPv2 创建会话请求中请求,并由 PGW-C 在响应中确认。要实现端到端的 IPv6 PDN,需要在三个���口和两个节点之间进行协调行为:
| 节点 / 接口 | IPv6 的责任 |
|---|---|
| OmniPGW — S5/S8 | 协商 PDN 类型;分配 UE 地址;返回 PDN 地址分配 (PAA) |
| OmniPGW — Gx | 将 UE 地址传达给 PCRF:Framed-IP-Address(IPv4)用于 IPv4/IPv4v6 PDN,Framed-IPv6-Prefix 用于仅 IPv6 PDN |
| OmniPGW — Sxb | 通过 PFCP 向 UPF 信号 UE IPv6 地址和 PDN 类型 |
| OmniUPF — 数据平面 | 编程 IPv6 下行查找;转发/封装 IPv6 用户流量 |
| OmniUPF — FRR | 通过 OSPFv3 向边缘路由器通告每个 UE IPv6 /128 主机路由 |
参考文献:3GPP TS 29.274 (GTPv2-C), 3GPP TS 29.212 (Gx), 3GPP TS 29.244 (PFCP)。
PDN 类型
| 值 | PDN 类型 | UE 接收 | PAA 内容 (TS 29.274 §8.14) |
|---|---|---|---|
| 1 | IPv4 | IPv4 地址 | 4 字节 IPv4 地址 |
| 2 | IPv6 | IPv6 前缀 (/64) | 前缀长度字节 + 16 字节地址 |
| 3 | IPv4v6 | IPv4 地址 + IPv6 前缀 | 前缀长度字节 + 16 字节 IPv6 + 4 字节 IPv4 |
PGW-C 从 PDN Type IE 派生有效的 PDN 类型,如果 PDN Type IE 缺失,则回退到 PAA IE 的类型。相同的协商类型驱动返回给 SGW 的 PAA、发送给 UPF 的 PFCP PDN Type IE,以及分配的地址族/多个地址族。
IPv4v6 无 IPv6 池。 如果请求 IPv4v6 PDN,但匹配的 APN 没有配置 IPv6 范围,PGW-C 不会崩溃;它会将 PDN 降级为仅 IPv4 或拒绝,具体取决于 APN 是否为紧急 (SOS) APN。请参见 APN 没有 IPv6 池时的 IPv4v6 请求。
端到端流程
重传的创建会话请求(相同的序列号)以幂等方式处理,并产生相同的响应。
PGW-C 配置
UE IPv6 地址池
UE 地址从 runtime.exs 中 ue.subnet_map 键下的每个 APN 池中提取。为任何应提供 IPv6 或双栈的 APN 添加一个 IPv6 CIDR。池会自动按地址族解析。
config :pgw_c,
ue: %{
subnet_map: %{
# APN 名称 => CIDR 字符串列表(IPv4 和/或 IPv6)
default: [
"100.64.16.0/24",
"2001:db8:6f85:70::/64"
]
}
}
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
ue.subnet_map | Map | 是 | - | 将 APN 名称(或 :default)映射到 CIDR 字符串列表。:default 是当没有 APN 特定条目匹配时的后备。 |
| (列表条目) | 字符串(CIDR) | 是 | - | IPv4(例如 100.64.16.0/24)或 IPv6(例如 2001:db8:6f85:70::/64)前缀。地址族从字符串中检测。IPv6 UE 地址从配置的前缀中提取,并向 UE 信号一个 /64。 |
有关 APN 正则表达式匹配、每个 APN 的多个子网、静态地址和分配算法,请参见 UE IP Pool Allocation。
同时具有 IPv4 和 IPv6 CIDR 的 APN 支持 IPv4、IPv6 和 IPv4v6 PDN;PGW-C 从协商的 PDN 类型所需的任何族/多个族中进行分配(对于 IPv4v6,从每个族中分配一个地址)。
Gx (Framed-IPv6-Prefix)
Gx 不需要额外的配置。PGW-C 根据地址族从 UE 地址设置 Gx 帧地址 AVP:
- 仅 IPv6 PDN — 使用
Framed-IPv6-PrefixAVP 传达 UE IPv6 前缀 (RFC 3162 §2.3),而不是Framed-IP-Address(仅承载 IPv4)。 - IPv4 和 IPv4v6 PDN — UE IPv4 地址在
Framed-IP-Address中传达。对于 IPv4v6,IPv6 前缀 不 在 Gx 中承载(CCR 的帧地址 AVP 来源于 IPv4 地址);IPv6 前缀仍通过 PFCP 信号传递给 UPF,并在 PAA 中传递给 UE。
对于仅 IPv6 的用户,PCRF 必须被配置并能够处理 Framed-IPv6-Prefix;否则,信用控制请求将被丢弃,会话失败 — 请参见 故障排除。
用户平面 (OmniUPF)
为了让 IPv6 PDN 承载流量,OmniUPF 必须启用 IPv6,从 PGW-C 发送的 PFCP 会话中编程 IPv6 下行查找,并通过 OSPFv3 向边缘路由器通告每个 UE IPv6 /128 主机路由,以便下行流量能够吸引到 UPF。
这些是配置在 OmniUPF 上的用户平面关注点,而不是 PGW-C。有关内核设置、UPF UE 池和 OSPFv3 路由通告的信息,请��见 OmniUPF IPv6 / 双栈指南。从 PGW-C 的角度来看,唯一的要求是所选的 UPF 支持 IPv6 — PGW-C 通过 PFCP 信号 UE IPv6 地址和 PDN 类型(请参见 PFCP/Sxb)。
参考表
PDN 地址分配 (PAA) — TS 29.274 §8.14
| PDN 类型 | 地址字段布局 |
|---|---|
| IPv4 | 4 字节:IPv4 地址 |
| IPv6 | 1 字节前缀长度 + 16 字节 IPv6 前缀/地址 |
| IPv4v6 | 1 字节前缀长度 + 16 字节 IPv6 + 4 字节 IPv4 |
Gx 帧地址 AVP
| AVP | 代码 | 家族 | 格式 | 参考 |
|---|---|---|---|---|
Framed-IP-Address | 8 | IPv4 | 4 字节地址 | RFC 4005 |
Framed-IPv6-Prefix | 97 | IPv6 | 保留字节 + 前缀长度 + 前缀 | RFC 3162 §2.3 |
PFCP PDN 类型 IE — TS 29.244
| 值 | 意义 |
|---|---|
| 1 | IPv4 |
| 2 | IPv6 |
| 3 | IPv4v6 |
故障排除
Gx CCR 超时用于 IPv6 会话
症状:某个用户的 IPv4 会话成功,但 IPv6/IPv4v6 会话返回原因 remote_peer_not_responding;Gx 信用控制请求超时。
可能的原因:
- PCRF 无法处理
Framed-IPv6-PrefixAVP,并静默丢弃请求。 - 该用户在 PCRF/HSS 上未���置为 IPv6。
解决方案:
- 确认该用户在 PCRF/HSS 上已配置并启用。
- 验证 PCRF 接受 Gx CCR-I 的
Framed-IPv6-Prefix。 - 与同一用户的 IPv4 会话进行比较,以隔离 IPv6 特定行为。
IPv6 会话被接受但下行流量未到达 UE
症状:创建会话响应携带 IPv6 PAA,上行正常,但来自网络到 UE 的流量被丢弃。
这是一个用户平面(OmniUPF)问题 — PGW-C 已经分配了地址并通过 PFCP 信号传递。通常的原因是 UE /128 主机路由未到达边缘路由器(UPF 上未运行 OSPFv3/未相邻,或收敛延迟)。请参见 OmniUPF IPv6 / 双栈指南以获取路由通告配置和故障排除信息。
未分配 IPv6 地址
症状:IPv6 PDN 请求被拒绝,或者未返回 IPv6 PAA。
可能的原因:
- 匹配的 APN(或
:default)在ue.subnet_map中没有 IPv6 CIDR。 - 配置的 IPv6 池已耗尽。
解决方案:
- 在 APN 的
ue.subnet_map条目中添加 IPv6 CIDR(请参见 PGW-C 配置)。 - 确认池中有空闲地址。
APN 没有 IPv6 池时的 IPv4v6 请求
症状:某个 UE 针对仅在 ue.subnet_map 中配置了 IPv4 CIDR 的 APN 请求 IPv4v6 PDN(没有 IPv6 范围)。根据 APN 的不同,会话要么以 仅 IPv4 的方式建立,要么被 拒绝。
行为:IPv6 分配器 (AddressRegistry.register_new_ipv6/1) 在匹配的 APN 具有空 IPv6 列表时返回 {:error, :no_ipv6_pool},而不是崩溃会话进程。会话过程然后根据 APN 类型选择(根据 TS 29.274 / TS 23.401 单地址承载 / PDN 类型降级处理):
| APN 类型 | 结果 | UE / PCRF / UPF 看到的内容 |
|---|---|---|
| 紧急 (SOS) APN | 降级为仅 IPv4 — 分配 IPv4 地址,清除 IPv6 地址,将协商的 PDN 类型设置为 IPv4。 | PAA、PFCP PDN 类型和 PFCP UE IP 为仅 IPv4;Gx 携带 Framed-IP-Address。P-CSCF 仍在 PCO 中返回,以便紧急 IMS 注册可以继续。记录 warning。 |
| 常规 APN | 拒绝 — 会话不会静默降级;{:error, :no_ipv6_pool} 被显现,以便错误配置(或真正不支持的请求)可见。记录 error。 | 创建会话失败,原因非成功。 |
紧急 APN 通过其名称识别:APN 包含 "sos"(例如 sos、sos.mnc410.mcc310.gprs)。针对没有 IPv6 池的 APN 的仅 IPv6 请求同样被拒绝。
实际上,MME 通常会在请求到达 PGW-C 之前将常规用户的 IPv4v6 请求降级为其订阅的 IPv4,因此拒绝路径是针对真正到达而没有 IPv6 池的 IPv4v6 请求的后备。SOS 降级路径确保紧急(例如 911/112)呼叫在仅 IPv4 部署上连接。
解决方案:
- 对于应该提供双栈的常规 APN,在 APN 的
ue.subnet_map条目中添加 IPv6 CIDR(请参见 PGW-C 配置)。 - 对于仅 IPv4 部署的紧急 (SOS) APN,无需采取任何措施 — 仅 IPv4 降级是故意的。仅在您打算将 SOS PDN 设置为双栈时,才添加 IPv6 CIDR。