NPSNPS
首页
  • 安装与部署
  • 快速开始
  • 运行命令速查
  • 隧道模式
  • 使用示例
  • 使用说明
  • 配置文件
  • 增强功能
  • Docker 部署
  • 参数与安全速查
  • 使用说明
  • 增强功能
  • 配置与启动
  • 配置文件参考
  • SDK
  • 功能概览
  • 域名代理与路由
  • 平台域名与证书诊断
  • 访问控制与配额
  • 运行说明
  • 配置示例
  • API 鉴权
  • API 清单
  • 用户体系
  • FAQ
  • 升级迁移
  • 本项目更新日志
  • 上游更新日志
GitHub
首页
  • 安装与部署
  • 快速开始
  • 运行命令速查
  • 隧道模式
  • 使用示例
  • 使用说明
  • 配置文件
  • 增强功能
  • Docker 部署
  • 参数与安全速查
  • 使用说明
  • 增强功能
  • 配置与启动
  • 配置文件参考
  • SDK
  • 功能概览
  • 域名代理与路由
  • 平台域名与证书诊断
  • 访问控制与配额
  • 运行说明
  • 配置示例
  • API 鉴权
  • API 清单
  • 用户体系
  • FAQ
  • 升级迁移
  • 本项目更新日志
  • 上游更新日志
GitHub
  • 文档首页
  • 快速上手

    • 安装与部署
    • 快速开始
    • 运行命令速查
    • 完整部署参考
    • 隧道模式
    • 使用示例
  • 服务端

    • 服务端使用
    • 配置文件参考
    • 服务端增强功能
    • 服务端介绍
    • 部署安全与参数速查
    • Docker 部署
    • 宝塔面板部署
  • 客户端

    • 客户端使用
    • 客户端增强功能
    • NPC SDK
    • 客户端配置与启动
    • 配置文件参考
    • NPC GUI 客户端
  • 扩展功能

    • 功能概览
    • 域名代理与路由
    • 平台域名与证书诊断
    • 访问控制与配额
    • 运行说明
    • Web API 鉴权
    • Web API 清单
    • 使用示例
  • 项目与社区

    • 用户体系
    • 系统架构
    • 升级迁移
    • 构建发布
    • 本项目更新日志
    • 上游更新日志
    • FAQ
    • 贡献
    • 交流
    • 捐助
    • 致谢

用户体系

v1.1.1 起,NPS 使用独立的 User 模型管理普通用户。一个用户可以关联多个客户端,登录后可以看到并管理自己名下的所有客户端、普通隧道和域名规则。管理员可以为每个用户设置客户端上限;普通用户可在上限内自行创建客户端,也可以使用管理员预先分配的客户端。

角色

角色来源权限
管理员conf/nps.conf 中的 web_username / web_password全部权限
普通用户Web 面板「用户管理」创建,保存到 conf/users.json在客户端配额内创建/管理自己的客户端和资源

管理员可以访问用户管理和全局设置;普通用户不能访问用户管理和全局设置。用户管理列表会显示每个用户当前关联的客户端数和隧道数,其中隧道数包含普通隧道与 Host 域名规则,与用户级配额使用同一统计口径。

数据关系

User
  └── Client
        ├── Tunnel
        └── Host
  • User:登录账号、密码、状态、备注、到期时间、最大客户端数、用户级隧道上限。
  • Client:客户端连接实体,保存 VerifyKey、限速、流量限制、连接数、客户端级隧道上限、所属用户。
  • Tunnel:TCP、UDP、SOCKS5、HTTP 代理、Secret、P2P、文件访问等普通隧道。
  • Host:HTTP/HTTPS 域名代理规则。

管理员推荐流程

  1. 进入「用户管理」创建普通用户。
  2. 设置用户状态、备注、到期时间、最大客户端数和最大隧道数。客户端数填 0 表示不限。
  3. 进入「客户端」新增客户端,选择所属用户;已有客户端也可在编辑页重新选择所属用户。服务端会校验用户确实存在和客户端配额,避免保存一个不可见的归属 ID。
  4. 普通用户登录后即可看到已分配的客户端,并可在剩余客户端配额内点击「新增」自行创建客户端。

管理员仍可统一创建和分配客户端;两种方式使用同一套归属、配额和到期校验。

这种方式适合客户、团队、门店、设备组等场景。管理员可以统一分配已有客户端,也可以把创建权交给普通用户;普通用户始终只管理自己名下资源。

登录兼容

系统优先使用 User 表登录。为了兼容旧版本,仍保留旧客户端登录方式。客户端新增/编辑页中的“旧版客户端登录兼容”是一个可选的高级设置,不是“所属用户”的替代品:

  • 如果客户端设置了 WebUserName 和 WebPassword,旧账号仍可登录。
  • 如果客户端未设置用户名密码,也保留 user + VerifyKey 的兼容登录方式。
  • 编辑客户端时密码不会回显;密码输入框留空表示保持原值,管理员可以显式清除旧版凭据。

新部署建议使用「用户管理」创建普通用户,不再把 Web 登录账号写在客户端上。

权限边界

普通用户登录后:

  • 只能看到自己名下的客户端。
  • 只能查看、创建、修改、删除自己客户端下的普通隧道。
  • 只能查看、创建、修改、删除自己客户端下的 Host 域名规则。
  • 可以新增自己的客户端,但不能修改客户端 ID、验证密钥、所属用户、客户端级配额、独立到期时间或旧版 Web 登录凭据。
  • 新客户端可填写备注、Basic 认证用户名/密码、压缩、加密、IP 白名单/黑名单和 IP 授权密码;这些字段只影响新客户端本身。
  • 不能访问用户管理。
  • 不能访问全局设置。

配额规则

客户端级配额

客户端 MaxTunnelNum 限制单个客户端下的资源数量。

计数范围:

  • 普通隧道(TCP、UDP、SOCKS5、HTTP 代理、Secret、P2P、文件访问)
  • Host 域名规则

用户级配额

用户 MaxTunnelNum 限制该用户所有客户端下的资源数量。

例如用户 A 有 3 个客户端,用户级最大隧道数为 10,则这 3 个客户端下的普通隧道和 Host 规则总数不能超过 10。

0 表示不限制。

客户端创建配额

用户 MaxClientNum 限制该用户名下客户端数量。管理员可以在「用户管理」新增或编辑用户时设置,0 表示不限制。管理员分配的客户端和普通用户自行创建的客户端使用同一个计数;已停用、已到期的客户端仍占用名额,只有删除或重新分配后才会释放。

客户端新增和重新分配由服务端原子校验,因此并发请求不会突破上限。普通用户不能通过 API 或 NPC 配置文件伪造所属用户、配额或验证密钥。

到期和停用

用户和客户端都支持到期时间。

  • 用户到期时间是名下资源的硬上限。客户端独立到期时间只能早于或等于用户到期时间;管理员缩短用户到期时间前,需要先处理晚于新日期的客户端。
  • 客户端到期时间留空表示跟随所属用户;用户也未设置到期时间时,客户端视为永不过期。用户没有到期时间时,管理员可为客户端设置独立的较早日期。
  • 客户端的实际有效期取客户端独立日期和用户日期中较早者,列表会同时显示配置日期和实际有效期。
  • 客户端到期后,系统会自动停用该客户端,断开连接,并清理该客户端下的隧道和 Host 运行资源。
  • 用户到期后,系统会自动停用该用户,断开并清理其名下所有客户端资源;用户恢复后仍需检查客户端自身状态。
  • 到期检查在服务启动时立即执行一次,之后每分钟执行一次。

到期时间支持常见格式,最终会保存为:

2006-01-02 15:04:05

迁移说明

从旧版本升级后,系统会自动扫描 clients.json:

  • 旧客户端如果有 WebUserName / WebPassword,会自动创建对应 User。
  • 同名同密码会合并为同一个用户。
  • 同名不同密码会生成 用户名_客户端ID,避免账号冲突。
  • 迁移后客户端会写入 UserId。

如果客户端已有失效的旧 UserId,但旧用户名和密码与现有用户完全匹配,启动迁移会自动修复绑定。若 users.json 已存在且账号已被删除,则不会凭旧客户端字段重新创建账号;管理员可在客户端编辑页手动选择新的所属用户。

迁移不删除旧字段,因此旧登录方式仍可兼容。详细步骤见升级迁移。

在 GitHub 上编辑此页
最后更新: 2026/9/3 17:30
Next
系统架构