IP 地址管理 (DHCP / DHCPv6 / IPv6 RA / PCO)
OmniTWAG 为每个 UE 分配一个 IP 地址及其相关的网络参数。该子系统涵盖 DHCPv4、DHCPv6、IPv6 路由器广告 (SLAAC) 以及 DNS 和 P-CSCF 地址的传递。该子系统不会随机生成地址。它提供的地址是系统其他部分已经选择的。源地址取决于每个 AP 模式。
- 在 隧道(家庭路由)模式 下,PGW 通过 S2a GTP 分配地址,OmniTWAG 将相同的地址传递给 UE。该设计遵循 3GPP TS 23.402 第 16.2 节。
- 在 NSWO(本地突破)模式 下,没有 PGW。OmniTWAG 从运营商定义的本地 IP 池 中自行分配地址。请参见 IP 池。
模式、地址源和池都来自与 RADIUS 源匹配的 AP 凭证。有关 AP 如何映射到 breakout_type、address_source 和 ip_pool_id 的信息,请参见 RADIUS 凭证。
有关操作模式和 GRE 数据路径的信息,请参见 用户平面 参考。有关承载 PAA 和 PCO 的 GTP-C 控制平面的信息,请参见 S2a GTP-C。有关驱动分配的每个 UE 状态机的信息,请参见 会话。
目录
- 概述:谁分配地址
- 地址源
- 隧道会话:PGW 分配的地址
- NSWO 会话:池和 DHCP
- DHCPv4
- DHCPv6
- IPv6 路由器广告 (SLAAC)
- DNS 和 PCO 传递
- 地址池和耗尽
- 配置
- 可观察性
- 故障排除
概述:谁分配地址
OmniTWAG 运行一个轻量级的 DHCPv4 服务器、一个无状态和有状态的 DHCPv6 服务器,以及一个 IPv6 路由器广告服务器。这些服务器在隧道情况下不会扫描范围以寻找可用地址。它们提供 PGW 已经分配的地址。在 NSWO 模式下,同一个 DHCPv4 服务器提供 OmniTWAG 从本地 IP 池中获取的地址。
地址流在 UE 认证时开始。在 Access-Accept 后,每个 UE 会话过程运行一个后接受建立步骤。该步骤读取 AP 凭证以决定模式,然后通过正确的路径分配地址。
地址源
AP 凭证通过两个字段设置地址源:
breakout_type::tunneled、:nswo或:local。address_source::pool或:dhcp。这仅在breakout_type为:nswo时适用。
| 模式 | 凭证 | 谁选择 UE 地址 | 如何到达 UE |
|---|---|---|---|
| 隧道(家庭路由) | breakout_type: :tunneled | PGW,在 GTP-C 创建会话响应 PAA 中。 | 预分配的 DHCPv4 租约、DHCPv6 或 IPv6 RA。 |
| NSWO,固定 | breakout_type: :nswo, address_source: :pool | OmniTWAG,从 ip_pool_id 池中,在建立时。 | 预分配的 DHCPv4 租约。 |
| NSWO,分配 | breakout_type: :nswo, address_source: :dhcp | OmniTWAG,从 ip_pool_id 池中,在 DHCP DISCOVER 时。 | 在 DISCOVER 时从 DHCPv4 池中分配。 |
| AP-本地 | breakout_type: :local | AP 后面的本地网络。 | OmniTWAG 不分配地址。 |
有关凭证字段以及 RADIUS 源如何映射到凭证的信息,请参见 RADIUS 凭证。有关池存储的信息,请参见 IP 池。
隧道会话:PGW 分配的地址
对于隧道会话,OmniTWAG 通过 GTP-C 创建会话请求与 PGW 建立 S2a 会话。PGW 以创建会话响应进行回复。该响应携带该子系统使用的两个内容:
- PDN 地址分配 (PAA)。这是 UE 的 IP 地址。
- 协议配置选项 (PCO)。这携带 DNS 服务器、P-CSCF 地址和链路 MTU。
OmniTWAG 从响应中读取 PAA 和 PCO。然后,OmniTWAG 为 UE MAC 地址预分配一个 DHCP 租约。当 UE 发送 DHCP 请求时,OmniTWAG 用这个预分配的地址进行回复。UE 永远不会收到 PGW 未分配的地址。有关创建会话交换的信息,请参见 S2a GTP-C。
PAA 类型设置 OmniTWAG 交付的地址。
| PAA 类型 | 交付给 UE 的地址 |
|---|---|
ipv4 | 来自 PAA 的 IPv4 地址。 |
ipv6 | 来自 PAA 的 IPv6 地址。 |
ipv4v6 | 来自 PAA 的 IPv4 地址。 |
如果创建会话响应没有 PAA,OmniTWAG 不会预分配租约。在这种情况下,UE 不会收到地址。
NSWO 会话:池和 DHCP
NSWO 会话没有 PGW,因此 OmniTWAG 拥有地址空间。地址来自凭证 ip_pool_id 指定的 IP 池。一个池包含一个 IPv4 CIDR、一个网关、一个 DNS 服务器列表和一个租约时间。请参见 IP 池。
凭证的 address_source 字段选择池地址如何到达 UE。
address_source: :pool (固定)
在后接受建立时,OmniTWAG 从池中分配一个地址,以订阅者身份为键。该分配是幂等的,因此相同的身份在重新建立期间保持相同的地址。OmniTWAG 为 UE MAC 预分配一个 DHCPv4 租约,使用该地址、池网关、池 DNS 服务器和从池 CIDR 派生的子网掩码。此时,它还在 GRE 数据路径中注册 UE。当 UE 发送 DISCOVER 时,服务器提供预分配的地址。
address_source: :dhcp (在 DISCOVER 时分配)
在建立时,OmniTWAG 尚未分配地址。它 绑定 UE MAC 到池。在该 MAC 的第一次 DHCP DISCOVER 时,DHCPv4 服务器从池范围中分配下一个可用地址,记录租约并提供它。这是新的动态分配路径。地址是在 DISCOVER 时选择的,而不是在建立时选择的。
在会话拆除时,OmniTWAG 释放池分配,并且对于 :dhcp,移除池绑定和动态租约。如果池缺失或耗尽,或者 AP 没有 ip_pool_id,OmniTWAG 不分配地址,UE 自行寻址。
DHCPv4
DHCPv4 服务器监听 UDP 端口 67。它将每个租约存储在一个内存中的 ETS 表中,以 UE MAC 地址为键。租约通过两条路径之一到达表中。
- 预分配。 当 PGW 分配地址(隧道)或 OmniTWAG 分配固定池地址(NSWO
address_source: :pool)时,会话过程插入租约。 - 在 DISCOVER 时分配。 对于 NSWO
address_source: :dhcp,会话过程将 UE MAC 绑定到池。服务器在内存中持有每个 MAC 的绑定。在没有租约的绑定 MAC 的第一次 DISCOVER 时,服务器从池中分配下一个可用地址,记录租约并提供它。
租约生命周期
对于预分配的租约,服务��提供请求 MAC 已经存在于表中的地址。对于绑定的 MAC,服务器在 DISCOVER 时通过从池中分配来创建租约。
OmniTWAG 处理这些 DHCP 消息类型。
| 消息 | 类型代码 | OmniTWAG 行为 |
|---|---|---|
| DISCOVER | 1 | 如果 MAC 有租约,OmniTWAG 发送 OFFER。如果没有租约但 MAC 绑定到池,OmniTWAG 分配下一个可用池地址,记录租约并发送 OFFER。如果没有租约且没有绑定,OmniTWAG 记录警告并不发送任何内容。 |
| REQUEST | 3 | 如果租约存在且请求的 IP (选项 50) 与租约匹配,或者请求没有请求的 IP,OmniTWAG 发送 ACK。如果请求的 IP 不匹配,OmniTWAG 发送 NAK。如果没有租约,OmniTWAG 发送 NAK。 |
| RELEASE | 7 | OmniTWAG 将租约标记为 released���OmniTWAG 保留租约记录。PDN 连接保持开启,遵循 TS 23.402 §16.1.5.2 NOTE 2。 |
| DECLINE | 4 | OmniTWAG 记录警告。OmniTWAG 保留租约记录。 |
| INFORM | 8 | OmniTWAG 发送仅包含配置的 ACK。ACK 携带网关、子网掩码和 DNS,但不包含地址 (yiaddr 为 0.0.0.0)。 |
对于 INFORM,OmniTWAG 使用配置中的 default_gateway 和 default_subnet_mask。OmniTWAG 在 INFORM 回复中使用 8.8.8.8 作为 DNS 服务器。
租约内容
每个租约包含 UE IP、子网掩码、网关、DNS 服务器和租约时间。对于隧道会话,会话过程从 PGW 响应中设置 UE IP 和 DNS 服务器,从 DHCP 配置中设置子网掩码、网关和租约时间。对于 NSWO 会话,这些值来自 IP 池:来自池范围的 IP、来自池 CIDR 前缀的子网掩码,以及来自池记录的网关、DNS 服务器和租约时间。请参见 IP 池 和 配置。
租约记录还具有 allocated_at 时间和 expires_at 时间。expires_at 时间为 allocated_at 加上租约时间。OmniTWAG 使用这些值报告租约状态。后台清理程序每 60 秒运行一次,删除任何 expires_at 已过期的租约。租约时间为零的租约没有 expires_at,且永远不会过期。当会话拆除时,���约也会被移除。
回复中的 DHCP 选项
OmniTWAG 使用以下 DHCP 选项构建每个 OFFER 和 ACK。
| 选项 | 代码 | 内容 |
|---|---|---|
| 消息类型 | 53 | OFFER 或 ACK。 |
| 服务器标识符 | 54 | DHCP server_ip。 |
| 子网掩码 | 1 | 租约子网掩码。 |
| 路由器 | 3 | 租约网关。 |
| 域名服务器 | 6 | 租约 DNS 服务器。如果列表为空,则省略。 |
| IP 地址租约时间 | 51 | 租约时间(以秒为单位)。如果租约时间为零,则省略。 |
| 广播地址 | 28 | 从 IP 和子网掩码计算得出。仅在 UE 在其参数请求列表(选项 55)中列出此选项时发送。 |
通过 GRE 的 DHCP 传输
使用 GRE 隧道的接入点在 GRE 封装的以太网帧中转发 UE DHCP 请求。GRE 服务器提取 DHCP 有效负载并将其传递给 DHCPv4 服务器。OmniTWAG 用源 AP 地址标记数据包。当 OmniTWAG 构建回复时,它将 DHCP 有效负载封装在 UDP/IP/以太网帧中,并通过 GRE 隧道将帧发送回同一 AP。源为 10.0.0.1:67,目标为客户端端口 68 的广播地址。
直接到达 UDP 套接字的 DHCP 请求(而不是通过 GRE)在 UDP 套接字上进行回复。如果源端口不是标准客户端端口 68,OmniTWAG 会回复源地址和端口。此路径支持测试工具和��继。否则,OmniTWAG 遵循 RFC 2131:如果广播标志被设置或 ciaddr 为零,则使用广播地址;如果该地址被设置,则使用 ciaddr。
DHCPv6
DHCPv6 服务器在 IPv6 上监听 UDP 端口 547。它支持无状态模式和有状态模式。
- 无状态模式 通过信息请求 (类型 11) 回复信息回复 (类型 12)。回复携带 DNS 服务器。这遵循 RFC 3736 和 RFC 3646。当 UE 从其 RA 处理设置其他配置 (O) 标志时,它使用此模式。
- 有状态模式 通过请求 (类型 1) 回复广告 (类型 2),并通过请求 (类型 3) 回复 (类型 7)。此模式在 IA_NA 选项中提供预分配的 IPv6 地址。这遵循 RFC 3315。
服务器为每个客户端 DUID 预分配一个有状态地址。GTP 控制平面插入分配。服务器在内存表中保存这些分配,以客户端 DUID 为键。
DHCPv6 消息处理
| 消息 | 类型 | OmniTWAG 行为 |
|---|---|---|
| 信息请求 | 11 | OmniTWAG 发送信息回复,包含服务器 DUID、回显的客户端 ID 和 DNS 服务器。 |
| 请求 | 1 | OmniTWAG 发送广告。如果客户�� DUID 有分配,广告携带 IA_NA 地址。如果没有,广告携带 NoAddrsAvail 状态(代码 2)。 |
| 请求 | 3 | OmniTWAG 发送回复。回复确认客户端 DUID 的 IA_NA 地址。 |
| 其他类型 | - | OmniTWAG 忽略该消息。 |
每个回复回显客户端事务 ID,遵循 RFC 3315 §15。每个包含分配地址的回复根据租约时间设置 DHCPv6 定时器。T1 为租约时间的一半。T2 为租约时间的四分之五。
服务器 DUID
OmniTWAG 构建类型为 DUID-EN(企业编号)的服务器 DUID。它使用 3GPP 企业编号 10415。标识符源自节点名称,因此对于给定节点是稳定的。
回复中的 DHCPv6 选项
| 选项 | 代码 | 内容 |
|---|---|---|
| 客户端标识符 | 1 | 从请求中回显的客户端 ID(如果存在)。 |
| 服务器标识符 | 2 | 服务器 DUID。 |
| 非临时地址的身份关联 (IA_NA) | 3 | 分配的 IPv6 地址,或 NoAddrsAvail 状态。仅限有状态模式。 |
| DNS 递归名称服务器 | 23 | 配置的 DNS 服务器。如果列表为空,则省略。 |
| 域搜索列表 | 24 | 配置的搜索列表。仅在设置了 dhcpv6_domain_list 时发送。 |
IPv6 路由器广告 (SLAAC)
IPv6 RA 服务器通过无状态地址自配置 (SLAAC) 向 UE 传递 PGW 分配的 IPv6 前缀。它根据 RFC 4861 实现 ICMPv6 路由器广告。
GTP 控制平面为每个接口添加一个前缀。服务器将前缀保存在内存中,按接口名称分组。服务器在两种情况下发送路由器广告:
- 在周期性定时器上。默认间隔为
30秒。 - 按需,当控制平面请求在接口上进行 RA 时。
服务器还解析路由器请求 (ICMPv6 类型 133) 消息。
路由器广告内容
每个路由器广告携带这些字段和选项。
| 字段或选项 | 值 |
|---|---|
| 当前跳数限制 | 来自 hop_limit。默认 64。 |
| 路由器生命周期 | 来自 router_lifetime。默认 1800 秒。 |
| M 和 O 标志 | 均为 0。RA 不会信号管理地址配置或其他配置。 |
| 源链路层地址(选项 1) | 源 MAC(如果是 6 字节值)。 |
| MTU(选项 5) | 仅在提供 MTU 时包含。 |
| 前缀信息(选项 3) | 每个前缀一个。L(链路)和 A(自主)标志均被设置。 |
| 递归 DNS 服务器,RDNSS(选项 25) | 来自前缀的 DNS 服务器,遵循 RFC 8106。如果没有 DNS 服务器,则省略。 |
每个前缀信息选项携带前缀、前缀长度��有效生命周期(默认 86400 秒)和首选生命周期(默认 14400 秒)。由于 A 标志被设置,UE 从前缀形成自己的 IPv6 地址。RDNSS 生命周期是所有前缀中最大的有效生命周期。
DNS 和 PCO 传递
OmniTWAG 通过多种方式传递 DNS 和 P-CSCF 信息。源是 PGW PCO(如果可能),否则为配置。
PGW 的 PCO
PCO 解析器从创建会话响应中读取协议配置选项,遵循 3GPP TS 24.008。解析器返回以下字段。
| 字段 | PCO 协议 ID | 含义 |
|---|---|---|
dns_ipv4 | 0x000D | IPv4 DNS 服务器地址。 |
dns_ipv6 | 0x0003 | IPv6 DNS 服务器地址。 |
pcscf_ipv4 | 0x000C | IPv4 P-CSCF 地址。 |
pcscf_ipv6 | 0x0001 | IPv6 P-CSCF 地址。 |
mtu | 0x0010 | IPv4 链路 MTU。 |
ip_alloc_nas | 0x000A | 一个标志。如果 PGW 通过 NAS 信令信号 IP 分配,则为 true。 |
解析器还将每个解析的选项保存在 raw 列表中。如果 PCO 二进制在某个地方损坏,解析器将返回它已读取的字段。它不会使整个解析失败。
OmniTWAG 还可以为创建会话请求构建 PCO 请求。该请求列出 OmniTWAG 希望 PGW 返回的选项,例如 IPv4 DNS 服务器和链路 MTU。
DNS 传递��� UE
DNS 服务器通过 UE 使用的传输到达 UE。
| 传输 | DNS 源 | 备注 |
|---|---|---|
| DHCPv4 (选项 6) | 来自 PCO 的 IPv4 DNS 服务器。 | 如果 PCO 没有 IPv4 DNS 服务器,OmniTWAG 使用 8.8.8.8。 |
| DHCPv6 (选项 23) | DHCPv6 DNS 服务器列表。 | 从 PGW PCO 或 dhcpv6_dns_servers 设置。如果未设置,则默认为 Google 公共 DNS IPv6。 |
| IPv6 RA (RDNSS,选项 25) | 附加到广告前缀的 IPv6 DNS 服务器。 | 随前缀一起传递。 |
DHCPv4 租约从 PCO dns_ipv4 列表中获取 IPv4 DNS 服务器。如果该列表为空,OmniTWAG 将回退到 8.8.8.8 作为租约。
关于 P-CSCF 的说明。 PCO 解析器从 PGW 读取 P-CSCF 地址。当前的 DHCP、DHCPv6 和 RA 传递路径不添加 P-CSCF DHCP 选项或 RA 选项。P-CSCF 值被解析并可用,但它们不会通过审计代码中的此子系统传递给 UE。
地址池和耗尽
耗尽行为取决于模式。
- 隧道(家庭路由)。 没有本地地址池。PGW 拥有地址空间。OmniTWAG 精确传递 PGW 为每个会话分配的地址。没有本地范围可供耗尽。如果 PGW 不返回 PAA,UE 将不接收地址,OmniTWAG 记录该情况。
- NSWO。 OmniTWAG 从本地 IP 池中分配,因此池可能耗尽。池是最多为
/30的 IPv4 CIDR��分配器跳过网络和广播地址,并分配第一个可用主机。当每个主机都在使用时,分配器返回pool_exhausted。对于address_source: :pool,UE 然后自我寻址。对于address_source: :dhcp,DISCOVER 不会得到回复,OmniTWAG 记录耗尽。分配在内存中,并在会话重新建立时重建,类似于 DHCP 租约。有关池定义和容量的信息,请参见 IP 池。
Twag.Cidr 帮助程序为平台执行子网数学。它解析 IPv4 和 IPv6 CIDR 字符串,并测试地址是否在子网内。RADIUS 子系统使用此帮助程序进行源 IP 授权。IP 池存储使用它来推导池子网掩码、可用主机范围和默认网关。
配置
IP 管理服务器从 :omnitwag 应用程序配置中读取其配置。主要块为 dhcp 和 ipv6_ra。DHCPv6 读取一小组顶级键。
config :omnitwag,
# DHCPv4 服务器
dhcp: %{
enabled: true,
interface: "wlan0",
server_ip: "10.0.0.1",
default_lease_time: 3600,
default_subnet_mask: "255.255.255.0",
default_gateway: "10.0.0.1"
},
# IPv6 路由器广告
ipv6_ra: %{
enabled: true,
interface: "wlan0",
ra_interval: 30,
hop_limit: 64,
router_lifetime: 1800
},
# DHCPv6(可选顶级键)
dhcpv6_dns_servers: ["2001:4860:4860::8888", "2001:4860:4860::8844"],
dhcpv6_domain_list: ["example.com"]
DHCPv4 参数 (dhcp)
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 否 | true | 启用 DHCPv4 服务器。设置为 false 以禁用它,例如在测试环境中。 |
interface | 字符串 | 否 | wlan0 | DHCP 服务的网络接口。对于 GRE 隧道模式使用 gre。 |
server_ip | 字符串 | 否 | 10.0.0.1 | DHCP 服务器标识符。OmniTWAG 在 DHCP 选项 54 中发送此值,并作为 GRE 隧道回复的源。 |
default_lease_time | 整数 | 否 | 3600 | 租约时间(以秒为单位)。OmniTWAG 将此值应用于每个预分配的租约。 |
default_subnet_mask | 字符串 | 否 | 255.255.255.0 | 租约的子网掩码,以及 RFC 2131 广播计算的子网掩码。 |
default_gateway | 字符串 | 否 | 10.0.0.1 | 租约的默认网关(DHCP 选项 3)。 |
IPv6 RA 参数 (ipv6_ra)
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 否 | true | 启用 IPv6 RA 服务器。设置为 false 以禁用它。 |
interface | 字符串 | 否 | wlan0 | 路由器广告的网络接口。 |
ra_interval | 整数 | 否 | 30 | 定期路由器广告之间的间隔(以秒为单位)。 |
hop_limit | 整数 | 否 | 64 | 路由器广告中的当前跳数限制字段。 |
router_lifetime | 整数 | 否 | 1800 | 路由器广告中的路由器生命周期(以秒为单位)。 |
DHCPv6 参数(顶级)
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
dhcpv6_dns_servers | 字符串列表 | 否 | Google 公共 DNS IPv6 (2001:4860:4860::8888, 2001:4860:4860::8844) | DHCPv6 回复的 IPv6 DNS 服务器。PGW PCO 也可以在运行时设置此列表。 |
dhcpv6_domain_list | 字符串列表 | 否 | (未设置) | DHCPv6 回复的 DNS 搜索列表(选项 24)。如果未设置,OmniTWAG 将省略该选项。 |
可观察性
Web 界面
控制面板在 /dhcp 处有一个 DHCP 池 页面。该页面列出了每个 DHCPv4 租约,包括 UE MAC 地址、IP 地址、租约开始时间、租约到期时间和状态。状态为 Active 或 Expired。该页面显示每个活动租约的实时倒计时。选择租约行以查看完整的租约详细信息:子网掩码、网关、DNS 服务器、租约持续时间和时间戳。该页面每秒刷新一次。如果 DHCPv4 服务器未运行,该页面将显示 Server Not Running。
REST API
REST API 在 DHCP 标签下提供 DHCPv4 租约数据。
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /dhcp (索引) | 列出所有 DHCPv4 租约及其摘要计数。 |
| GET | /dhcp/{id} (显示) | 通过 MAC 地址获取一个租约。id 是以冒号分隔的 MAC。 |
索引响应具有 enabled 标志、leases 列表、总 count、active 计数和 expired 计数。如果 DHCPv4 服务器未运行,索引返回 enabled: false 和一个空列表。显示端点返回 404 如果没有租约与 MAC 匹配,以及 503 如果服务器未运行。
每个租约对象具有以下字段。
| 字段 | 描述 |
|---|---|
mac | UE MAC 地址,以冒号分隔。 |
ip | 分配的 IPv4 地址。 |
subnet_mask | 租约子网掩码。 |
gateway | 租约网关。 |
dns_servers | DNS 服务器列表。 |
lease_time | 租约持续时间(以秒为单位)。 |
allocated_at | 租约开始时间,自 Unix 纪元以来的秒数。 |
expires_at | 租约到期时间,自 Unix 纪元以来的秒数。 |
status | active 或 expired。 |
time_remaining | 距到期的秒数,或 0 如果已过期。 |
监测事件
IP 管理服务器会发出监测事件。操作员可以将这些事件附加到指标导出器。有关 Prometheus 端点的信息,请参见 指标参考。
| 事件 | 源 | 含义 |
|---|---|---|
[:dhcp, :lease, :allocate] | DHCPv4 | 为一个 MAC 预分配了一个租约。 |
[:dhcp, :lease, :deallocate] | DHCPv4 | 在拆除时移除了一个租约。 |
[:dhcp, :lease, :reap] | DHCPv4 | 一个过期的租约被后台清理程序移除。 |
[:dhcp, :discover] | DHCPv4 | 一个 DISCOVER 被现有租约的 OFFER 回复。 |
[:dhcp, :discover, :pool_allocated] | DHCPv4 | 从池绑定的 MAC 的 DISCOVER 被分配了一个新的池地址(NSWO :dhcp)。 |
[:dhcp, :discover, :no_allocation] | DHCPv4 | 一个没有租约且没有池绑定的 MAC 收到的 DISCOVER。 |
[:dhcp, :ack] | DHCPv4 | 一个 REQUEST 被回复为 ACK。 |
[:dhcp, :nak] | DHCPv4 | 一个 REQUEST 被回复为 NAK。 |
[:dhcp, :release] | DHCPv4 | 一个客户端释放了其租约。 |
[:dhcp, :decline] | DHCPv4 | 一个客户端拒绝了其租约。 |
[:dhcp, :inform] | DHCPv4 | 一个 INFORM 被回复。 |
[:dhcp, :packet, :malformed] | DHCPv4 | 收到一个格式错误的 DHCP 数据包。 |
[:dhcpv6, :info_request, :received] | DHCPv6 | 收到一个信息请求。 |
[:dhcpv6, :solicit, :received] | DHCPv6 | 收到一个请求。 |
[:dhcpv6, :request, :received] | DHCPv6 | 收到一个请求。 |
[:dhcpv6, :info_reply, :sent] | DHCPv6 | 发送了一个信息回复。 |
[:dhcpv6, :advertise, :sent] | DHCPv6 | 发送了一个广告。 |
[:dhcpv6, :reply, :sent] | DHCPv6 | 发送了一个回复。 |
[:ipv6_ra, :prefix, :add] | IPv6 RA | 一个前缀被添加到一个接口。 |
[:ipv6_ra, :prefix, :remove] | IPv6 RA | 一个前缀从一个接口中移除。 |
[:ipv6_ra, :advertisement, :sent] | IPv6 RA | 发送了一个路由器广告。 |
故障排除
UE 未获得 IP 地址
症状: UE 认证成功,但未获得 IPv4 地址。DHCP 池页面未显示 UE MAC 的租约。触发了 [:dhcp, :discover, :no_allocation] 事件。
可能的原因(隧道):
- GTP 创建会话响应没有 PAA,因此 OmniTWAG 未预分配租约。
- GTP-C 会话未建立,因此未创建租约。
可能的原因(NSWO):
- AP 凭证没有
ip_pool_id,因此 OmniTWAG 不分配地址。 - 池已耗尽,因此无法分配可用地址。
- 对于
address_source: :dhcp,DISCOVER 在 MAC 绑定到池之前到达,或者绑定未运行,因为会话尚未有 MAC。
常见原因:
- DHCPv4 服务器未运行。
解决方案:
- 检查 OmniTWAG 日志以获取建立路径(隧道与 NSWO)和 UE IP。
- 对于隧道会话,确认 PGW 为 APN 返回 PAA。
- 对于 NSWO 会话,确认 AP 凭证命名有效的
ip_pool_id,并且池有可用容量。请参见 IP 池 和 RADIUS 凭证。 - 确认 DHCP 池页面显示 DHCPv4 服务器正在运行。
UE 获得地址但没有 DNS
症状: UE 有一个 IPv4 地址,但无法解析名称。
可能的原因:
- PGW PCO 未返回 IPv4 DNS 服务器。在这种情况下,OmniTWAG 使用
8.8.8.8。 - UE 无法访问 PGW 提供的 DNS 服务器。
解决方案:
- 在 DHCP 池页面或通过 REST API 阅读租约 DNS 服务器。
- 确认 PGW PCO 返回预期的 DNS 服务器。
- 确认 DNS 服务器可以从 UE 数据路径访问。
UE 收到 NAK
症状: UE 发送 REQUEST 并收到 NAK。触发了 [:dhcp, :nak] 事件。
可能的原因:
- UE 请求的 IP(选项 50)与其预分配的租约不匹配。
- 租约已被移除,例如在会话拆除后。
解决方案:
- 确认 UE MAC 有租约。
- 确认 UE 请求的 IP 与 PGW 或池分配的 IP 相同。
- 如果会话已拆除,让 UE 在重新认证后重新启动 DHCP 交换。