套餐与认证策略配置
YunyiRADIUS 的策略体系由三层组成:RADIUS 模板 (Profile) → 套餐计划 (Plan) → 接入策略 (Access Policy)。
RADIUS 模板 (Profile)
↓ 定义网络参数
套餐计划 (Plan)
↓ 定义计费规则
接入策略 (Access Policy)
↓ 定义产品模式
Portal 认证页面网络节点统一管理(关联模型)
系统采用网络节点(Node)作为唯一统一管理入口,取代了原先独立的「网络组」概念。一个网络节点集中编排以下关联要素:
| 要素 | 说明 |
|---|---|
| 产品模式 (mode) | public(公共访客)/ tenant(租户),在节点上设定 |
| 关联设备 | 该节点下的 NAS/BAS 设备(设备关联在节点内维护,保存时为全量替换) |
| 套餐组 (plan_groups) | 节点关联的套餐集合;公共模式下默认使用套餐组中第一个公共套餐作为访客套餐(原 guest_plan_id 字段已移除) |
| 用户组 (user_groups) | 节点下的用户分组;用户未分组时归入节点默认用户组(默认组不可删除) |
| 接入策略 (default_policy_id) | 节点级默认认证策略 |
公共模式与租户模式不再是两个割裂的体系,而是同一网络节点上的两种
mode配置。设备、套餐、用户、策略都通过节点统一编排,避免了原先「网络组」与「节点」概念并存导致的关联混乱。
接入策略的生效优先级(设备级 → 节点级 → 系统级)详见下文「三、接入策略」。
一、RADIUS 模板 (Profile)
RADIUS 模板是网络策略参数的集合,定义了用户接入时的网络限制,是所有套餐和用户的基础配置。
模板参数详解
| 参数 | 类型 | 说明 | 默认值 | 示例 |
|---|---|---|---|---|
| 模板名称 | string | 标识名称 | — | 基础10M模板 |
| 上行速率 (Kbps) | int | 用户上传带宽限制 | 10240 | 10240 (10Mbps) |
| 下行速率 (Kbps) | int | 用户下载带宽限制 | 20480 | 20480 (20Mbps) |
| 在线设备数 | int | 并发在线设备数,0=无限制 | 3 | 5 |
| 地址池 | string | IP 地址分配池名称 | — | pool-guest |
| DNS 服务器 | string | 下发给用户的 DNS | — | 114.114.114.114 |
| VLAN 绑定 | boolean | 是否强制 VLAN 绑定 | 否 | true |
| VLAN ID1 | int | 外层 VLAN | 0 | 100 |
| VLAN ID2 | int | 内层 VLAN (QinQ) | 0 | 200 |
| MAC 绑定 | boolean | 是否强制 MAC 绑定 | 否 | true |
| IPv6 前缀池 | string | IPv6 地址池 | — | pool-v6 |
| 域 (Domain) | string | 域名后缀 | — | hotel.com |
| 自定义属性 | string | 扩展 RADIUS 属性 | — | 见下文 |
自定义 RADIUS 属性
在「自定义属性」字段中可以添加额外的 RADIUS 响应属性,格式:
Vendor-Specific = "2011;WISPr-Bandwidth-Max-Up=10240000"
Vendor-Specific = "2011;WISPr-Bandwidth-Max-Down=20480000"
Cisco-AVPair = "ip:traffic-class=in gold"
Mikrotik-Rate-Limit = "10M/20M"每行一个属性,格式为 属性名 = 值 或 Vendor-Specific = "厂商代码;子属性名=值"。
模板的带宽参数如何传递到设备
Profile: UpRate=10240, DownRate=20480 (Kbps)
↓
认证阶段 enhancer 转换
↓
华为设备: Huawei-Input-Average-Rate = 10240 × 1024 = 10,485,760 bps
Huawei-Output-Average-Rate = 20480 × 1024 = 20,971,520 bps
H3C设备: H3C-Input-Average-Rate (同上)
锐捷设备: Ruijie-Input-Rate (同上)
标准设备: Filter-Id = "profile_10M" (通过 Filter-Id 引用)模板与厂商的关系
模板参数是厂商无关的,系统根据 NAS 设备的 vendor_code 自动转换为厂商私有 VSA:
| 模板参数 | 华为 VSA | H3C VSA | 锐捷 VSA | 标准 |
|---|---|---|---|---|
| 上行速率 | HW-Input-Average-Rate | H3C-Input-Average-Rate | Ruijie-Input-Rate | Filter-Id |
| 下行速率 | HW-Output-Average-Rate | H3C-Output-Average-Rate | Ruijie-Output-Rate | Filter-Id |
| VLAN | NAS-Port-Id | NAS-Port-Id | NAS-Port-Id | NAS-Port-Id |
| DNS | HW-DNS-Server | 标准属性 | 标准属性 | 标准属性 |
二、套餐计划 (Plan)
套餐计划是面向用户的产品化计费配置,将 RADIUS 模板包装为可销售的商品。
套餐类型
| 类型 | 计费方式 | 示例 | 适用场景 |
|---|---|---|---|
| 时长包 | 按有效期 | 7天/30天/365天 | 酒店、公寓 |
| 流量包 | 按流量 | 10GB/50GB/100GB | 校园网、公共WiFi |
| 周期包 | 按账单周期 | 月付/季付/年付 | 运营商宽带 |
| 免费体验 | 赠送 | 24小时试用 | 营销获客 |
套餐参数
| 参数 | 说明 | 示例 |
|---|---|---|
| 套餐名称 | 产品名称 | 畅享30天 |
| 套餐描述 | 营销文案 | 30天不限流量,尽情畅享高速网络 |
| 关联模板 | RADIUS Profile | 基础10M模板(选择关联) |
| 是否公共套餐 | 在 Portal 页面展示 | 是 |
| 是否允许自动续费 | 到期自动扣费 | 否 |
定价方案
一个套餐可以有多个定价,例如:
| 有效期 (天) | 价格 (元) | 原价 (元) | 流量上限 (GB) | 首月优惠 |
|---|---|---|---|---|
| 30 | 30 | 40 | 0 (不限) | — |
| 90 | 80 | 120 | 0 (不限) | — |
| 365 | 280 | 400 | 0 (不限) | 200 |
定价参数说明
| 参数 | 说明 |
|---|---|
| 有效期 (天) | 套餐购买后的有效天数 |
| 价格 (元) | 实际售价 |
| 原价 (元) | 划线价(营销展示用) |
| 流量上限 (GB) | 0 = 无限流量 |
| 首月优惠 | 首次购买优惠价 |
| 自动续费 | 到期是否自动从余额扣费 |
公共套餐 vs 私有套餐
| 特性 | 公共套餐 (is_public=true) | 私有套餐 (is_public=false) |
|---|---|---|
| Portal 可见 | ✅ 在用户门户展示 | ❌ 仅管理员分配 |
| 用户自助购买 | ✅ 在线支付 | ❌ |
| 管理员分配 | ✅ | ✅ |
| 适用模式 | public / tenant | tenant only |
套餐定价规则
用户余额 ≥ 套餐价格 → 购买成功 → 激活套餐 → 开始上网
用户余额 < 套餐价格 → 提示余额不足 → 引导充值三、接入策略 (Access Policy)
接入策略定义了认证方式和Portal 行为,是认证流程的"总开关"。

策略参数全解
| 参数 | 说明 | 可选值 | 默认 |
|---|---|---|---|
| 策略名称 | 标识 | string | — |
| 产品模式 | 认证模式 | tenant / public | public |
| 归属节点 | 策略绑定的网络节点(节点的 mode 决定 public/tenant) | 下拉选择 | 系统默认 |
| 访客套餐 | 公共模式默认套餐。新版由节点套餐组中第一个 public 套餐自动推断,通常无需单独设置 | 选择公共 Plan | — |
| 会话时长 (分钟) | 单次会话最大时长,0=不限 | int | 0 |
| 每日重认证 | 每天需重新短信验证 | boolean | false |
| Portal 模板 | 自定义认证页面 | 选择模板 | 全局默认 |
| 短信签名 | 策略级短信签名 | string | 全局配置 |
| 短信模板代码 | 策略级短信模板 | string | 全局配置 |
| 备注 | 说明文字 | string | — |
产品模式对比
| 特性 | tenant (租户模式) | public (公共模式) |
|---|---|---|
| 认证方式 | 用户名+密码 | 手机号+短信验证码 |
| 用户体系 | 注册账号 → 购买套餐 → 上网 | 输入手机号 → 验证码 → 上网 |
| 套餐购买 | Portal 页自助选购 | 管理员预配置访客套餐 |
| 在线支付 | ✅ 支持支付宝 | ❌ 免费或管理员后台充值 |
| 适用场景 | 酒店长住、公寓、校园 | 酒店WiFi、商场、餐厅 |
| Portal 流程 | 注册 → 选套餐 → 支付 → 上网 | 手机号 → 验证码 → 上网 |
策略生效范围(优先级从高到低)
1. 设备级 (NAS/BAS 的 policy_id)
↓ 覆盖
2. 节点级 (NetNode 的 default_policy_id)
↓ 覆盖
3. 系统级 (node_id = 0 的全局策略)优先级逻辑 (resolveEffectivePolicy):
go
if 设备有 policy_id → 使用该策略
else if 节点有 default_policy_id → 使用该策略
else → 使用系统默认策略 (node_id=0)策略配置示例
酒店公共 Wi-Fi
yaml
策略名称: "酒店公共WiFi"
产品模式: public
访客套餐: "免费4小时体验"
会话时长: 240 (4小时)
每日重认证: true (每天需重新验证)
Portal模板: "酒店品牌模板"
短信签名: "XX酒店"企业办公网络
yaml
策略名称: "企业办公认证"
产品模式: tenant
归属节点: node-office
会话时长: 0 (不限时)
每日重认证: false
Portal模板: "企业办公模板"
接入策略: 绑定 LDAP 二次认证校园网计费
yaml
策略名称: "校园网认证"
产品模式: tenant
访客套餐: — (无)
会话时长: 0
每日重认证: false
Portal模板: "校园网模板"
支持在线购买套餐 (自助选购30天/90天/365天)四、参数关联关系图
网络节点 (Node) ── mode: public | tenant ── 唯一统一管理入口
├─ devices[] ──────────→ NAS/BAS 设备(节点内全量关联)
├─ plan_groups[] ──────→ 套餐组
│ └─ 公共模式取第一个 public 套餐(取代原 guest_plan_id)
├─ user_groups[] ─────→ 用户组(无组 → 默认用户组)
└─ default_policy_id ─→ 接入策略 (AccessPolicy)
│
▼
RadiusPlan ←──profile_id── RadiusProfile
│ │
│ pricings[] │ up_rate / down_rate
▼ ▼
定价方案 (30天¥30) 带宽参数 (10M/20M)
│
▼
用户购买 → 余额扣减 → 激活套餐 → 上网五、配置检查清单
部署前逐项核对:
- [ ] RADIUS 模板已创建(带宽、设备数、VLAN)
- [ ] 套餐计划已创建(名称、定价、有效期)
- [ ] 接入策略已创建(模式、套餐绑定、Portal 模板)
- [ ] 策略已关联到正确的节点或 NAS 设备
- [ ] SMS 网关已配置(公共模式必须)
- [ ] Portal 模板已设置(品牌 Logo、背景、色调)
- [ ] 测试用户已创建并验证认证流程
- [ ] 支付宝配置已完成(如需在线支付)