基于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)
);

系统模块设计

  1. Web管理后台模块
    使用GoFrame实现以下功能:

区域管理:增删改查区域信息

NAS设备管理:配置各个区域的NAS设备

套餐管理:创建、编辑和删除套餐

用户管理:查看和管理用户信息

订单管理:处理用户购买订单

统计分析:收入、用户增长等数据统计

  1. 用户前台模块
    用户注册/登录

套餐浏览与购买

个人中心:查看当前套餐、余额、在线状态等

充值功能

  1. RADIUS认证模块
    基于github.com/layeh/radius实现:

认证处理(Access-Request)

计费开始(Accounting-Start)

计费更新(Accounting-Update)

计费结束(Accounting-Stop)

  1. 定时任务模块
    套餐到期检查

用户会话状态同步

自动踢下线处理

核心实现细节
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