基于GoFrame和GoRADIUS的认证计费网络管理系统设计
系统架构概述
我将为您设计一个完整的RADIUS认证计费系统,包含区域管理、套餐管理、用户购买和自动到期处理功能。系统将使用以下技术栈:
Web框架: GoFrame
RADIUS库: github.com/layeh/radius
缓存: Redis (用于高并发场景)
数据库: MySQL (或PostgreSQL)
会话管理: JWT或Session
数据库设计
核心数据表结构
-- 区域表
CREATE TABLE regions (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL, -- 区域名称
description TEXT,
nas_secret VARCHAR(255) NOT NULL, -- RADIUS通信密钥
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- NAS设备表
CREATE TABLE nas_devices (
id INT PRIMARY KEY AUTO_INCREMENT,
region_id INT NOT NULL,
nas_name VARCHAR(100) NOT NULL,
nas_ip VARCHAR(45) NOT NULL, -- NAS设备IP
nas_type ENUM('pptp', 'l2tp', 'other') DEFAULT 'other',
secret VARCHAR(255) NOT NULL, -- RADIUS通信密钥
config TEXT, -- 其他配置信息(JSON格式)
is_active BOOLEAN DEFAULT TRUE,
FOREIGN KEY (region_id) REFERENCES regions(id) ON DELETE CASCADE
);
-- 套餐表
CREATE TABLE plans (
id INT PRIMARY KEY AUTO_INCREMENT,
region_id INT NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
bandwidth_limit INT NOT NULL, -- 带宽限制(Kbps)
validity_days INT NOT NULL, -- 有效期(天)
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (region_id) REFERENCES regions(id) ON DELETE CASCADE
);
-- 用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL, -- 加密存储
email VARCHAR(255) NOT NULL UNIQUE,
phone VARCHAR(20),
region_id INT NOT NULL,
balance DECIMAL(10,2) DEFAULT 0.00,
status ENUM('active', 'suspended', 'expired') DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (region_id) REFERENCES regions(id)
);
-- 用户套餐订购表
CREATE TABLE user_plans (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
plan_id INT NOT NULL,
start_time TIMESTAMP NOT NULL,
end_time TIMESTAMP NOT NULL,
bandwidth_limit INT NOT NULL, -- 实际应用的带宽限制
status ENUM('active', 'expired', 'cancelled') DEFAULT 'active',
purchased_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (plan_id) REFERENCES plans(id)
);
-- 用户在线会话表
CREATE TABLE user_sessions (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
session_id VARCHAR(255) NOT NULL, -- RADIUS会话ID
nas_ip VARCHAR(45) NOT NULL,
framed_ip VARCHAR(45), -- 分配的IP
start_time TIMESTAMP NOT NULL,
update_time TIMESTAMP NOT NULL,
upload_bytes BIGINT DEFAULT 0,
download_bytes BIGINT DEFAULT 0,
is_online BOOLEAN DEFAULT TRUE,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 订单表
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
plan_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status ENUM('pending', 'paid', 'failed') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
paid_at TIMESTAMP NULL,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (plan_id) REFERENCES plans(id)
);
系统模块设计
- Web管理后台模块
使用GoFrame实现以下功能:
区域管理:增删改查区域信息
NAS设备管理:配置各个区域的NAS设备
套餐管理:创建、编辑和删除套餐
用户管理:查看和管理用户信息
订单管理:处理用户购买订单
统计分析:收入、用户增长等数据统计
- 用户前台模块
用户注册/登录
套餐浏览与购买
个人中心:查看当前套餐、余额、在线状态等
充值功能
- RADIUS认证模块
基于github.com/layeh/radius实现:
认证处理(Access-Request)
计费开始(Accounting-Start)
计费更新(Accounting-Update)
计费结束(Accounting-Stop)
- 定时任务模块
套餐到期检查
用户会话状态同步
自动踢下线处理
核心实现细节
RADIUS服务器实现
参考:https://chat.deepseek.com/a/chat/s/1f5c45c0-079a-4d53-9c21-418fcecaf432
作者:wuge 创建时间:2025-08-26 11:26
最后编辑:wuge 更新时间:2025-08-27 15:44
最后编辑:wuge 更新时间:2025-08-27 15:44