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

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

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

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

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

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

增强功能

使用 https

nps 会根据域名是否上传了证书自动选择处理方式:

是否在 web 上传证书行为真实 IP
是nps 直接接管 SSL 终结,再转发到内网✅ 可拿到
否nps 透传 TLS(端口转发),由内网服务器自行解密❌ 拿不到

image

自动 HTTPS

在 web 域名编辑页勾选「自动 HTTPS」后,nps 会把对应域名的 http 请求 301 重定向到 https。 重定向会按 https_proxy_port 配置的端口跳转(例如 https_proxy_port=8443 时会跳到 https://<host>:8443/...),方便非标准端口部署。

HTTPS 证书来源

web 域名编辑页的「证书」/「私钥」字段同时支持:

  • 直接粘贴证书 / 私钥内容
  • 填写服务器上的文件路径(例如 /etc/letsencrypt/live/proxy.com/fullchain.pem)

nps 会自动识别是文件路径还是内容。文件路径方式便于配合 acme.sh / certbot 自动续期,无需每次手工拷贝。

TLS 桥接加密

为保护客户端到服务端的 Bridge 流量,可启用 TLS:

# nps.conf
tls_enable=true
tls_bridge_port=8025      # v0.26.18 引入,与 bridge_port 并存

客户端任选一种方式接入:

npc.exe -server=1.1.1.1:8024 -vkey=xxx                       # 明文桥接(bridge_port)
npc.exe -server=1.1.1.1:8025 -vkey=xxx -tls_enable=true      # TLS 桥接(tls_bridge_port)

客户端默认会校验证书。使用自签名证书时,请配置 -tls_fingerprint、-tls_ca_file 或 -tls_server_name;-tls_insecure_skip_verify=true 仅用于兼容旧部署,生产环境不要开启。

全局参数

未来会在此页面继续扩展更多功能,欢迎提需求。

web 后台 → 全局参数 页面(对应 conf/global.json):

字段含义
全局 IP 黑名单一行一个精确 IP(支持 IPv4 或 IPv6),不支持 CIDR 或范围匹配。命中后所有 TCP/HTTP/HTTPS/UDP 入口请求都会被直接关闭。用于防止扫描和暴力破解
服务地址用于在 web 上生成 [客户端快捷启动命令]、隧道访问 URL 时拼接的服务端地址。留空则使用浏览器当前访问地址
平台泛域名管理多个 *.example.com、对应的证书和私钥路径。平台域名会保存到同一个 conf/global.json,被 Host 使用后不能删除或改名;证书路径可更新并同步到关联 Host。

平台泛域名的 DNS 泛解析、普通用户创建子域名、证书状态和规则诊断见平台泛域名、证书热更新与规则诊断。

代理到服务端本地

默认情况下,TCP、UDP 和域名规则的目标由所属 NPC 去连接。若要把请求转发到 运行 NPS 的服务器本机,先在 nps.conf 开启:

allow_local_proxy=true

重启 NPS 后,在 Web 面板新增或编辑隧道、域名规则时勾选「转发到本地」。两个条件都必须满足:

  1. 全局开关为 true,否则面板不会保存本地转发标记。
  2. 对应规则明确勾选「转发到本地」。

勾选后,目标地址由 NPS 进程连接。例如 NPS 机器上有服务监听 127.0.0.1:8081,可创建 Host 规则并将目标设为该地址;访问者请求 NPS 的 HTTP(S) 入口后,会由 NPS 直接转发给本机服务,不经过 NPC。

Docker 与端口边界

  • Linux 上 NPS 使用 network_mode: host 时,NPS 容器中的 127.0.0.1 就是宿主机回环地址。
  • NPS 使用默认 bridge 网络时,容器内的 127.0.0.1 只指向容器自身。应改用宿主机可达地址,或将目标服务与 NPS 放入同一 Docker 网络。
  • 域名解析只负责把域名指向 NPS 公网 IP,不会替你开放端口。若 HTTP 入口设为 30111,访问地址必须写成 http://example.com:30111/,并在云安全组、宿主机防火墙和容器网络中放行该端口。
  • 在 NPS 主机本地先验证监听:curl -H 'Host: example.com' http://127.0.0.1:30111/;成功后再从外网验证。

本地转发让规则创建者可以访问 NPS 主机可达的内部服务。只应授予可信管理员,且应将管理面板限制在管理网络。

客户端黑名单

在客户端编辑页可填写多个 IP,命中后该客户端下所有隧道都会拒绝服务,用于针对单个客户端阻断。

客户端白名单 + IP 授权

在客户端编辑页:

  1. 直接添加 IP 到白名单
  2. 或填写「IP 授权密码」。当外网 IP 不在白名单时,会被重定向到 IP 授权页面,输入正确密码即可把该 IP 自动加入白名单。

img

Proxy Protocol

在 web 上 TCP 隧道编辑页开启「Proxy Protocol」开关,nps 会以 PROXY v1/v2 协议向后端转发原始来源 IP。后端服务(nginx、HAProxy 等)只需正常解析 PROXY 协议即可拿到真实客户端 IP。

img

WEB登录验证码

nps.conf 中:

open_captcha=true

开启后 web 登录页会要求图形验证码。结合「web 管理保护」(连续 10 次失败封禁 1 分钟,见 说明),可以有效缓解暴力破解。

关闭代理

如需关闭 http 代理,将 http_proxy_port 留空;如需关闭 https 代理,将 https_proxy_port 留空。

流量数据持久化

服务端默认每 1 分钟持久化一次流量数据。将 flow_store_interval 设为空或 0 可关闭定时持久化;单位为分钟。

注意: nps 不会持久化通过公钥连接的客户端。

系统信息显示

nps 服务端支持在 web 上显示和统计服务器相关信息,system_info_display 默认开启;如需关闭可在 nps.conf 中设置 system_info_display=false。

关闭 web 管理

将 nps.conf 中的 web_port 设置为空或删除。

服务端多用户登录

allow_user_login 默认开启。当前优先使用「用户管理」中创建的普通用户账号登录,账号与密码保存在 users.json;登录后可管理归属给该用户的多个客户端,并可在 MaxClientNum(0 表示不限制)内自行创建客户端。历史客户端仍兼容两种登录方式:配置过 WebUserName/WebPassword 时使用该凭据;两项均为空时可使用用户名 user 与该客户端 VerifyKey 登录。新部署请使用独立用户体系,详见用户体系。

用户注册功能

将 allow_user_register=true 后登录页会出现注册入口。

监听指定 IP

nps 支持每个隧道监听不同的服务端 IP,nps.conf 中设置 allow_multi_ip=true 后,可在 web 中控制,或 npc 配置文件中指定:

server_ip=xxx

客户端到期时间

在创建 / 修改客户端时可填写「到期时间」(可留空表示跟随所属用户;用户也未设置时表示永不过期)。客户端到期时间不能晚于所属用户到期时间;到期后该客户端会被自动暂停,所有隧道停止服务,直到管理员手工延长或清空到期时间并重新启用客户端。用户到期会同时暂停该用户的所有客户端和隧道。 支持格式:2006-01-02 15:04:05 / 2006-01-02 15:04 / 2006-01-02T15:04:05 / 2006-01-02T15:04 / 2006-01-02。

首次启动随机凭据

为避免默认密码被恶意扫描,首次启动时用户名默认为 admin,web_password、auth_key、auth_crypt_key 会随机生成,并直接打印到终端:

[INFO] Web login username: admin, password: <xxxxxxxx>
[INFO] auth_key: <xxxxxxxx>
[INFO] auth_crypt_key: <xxxxxxxxxxxxxxxx>

请在第一次启动时妥善记录。后续可在 nps.conf 中手工修改。

与 nginx 配合

有时需要在云服务器上跑 nginx 做静态缓存或多服务复用 80/443。把 http_proxy_port 设为非 80 端口(例如 8010),由 nginx 反代:

server {
    listen 80;
    server_name *.proxy.com;
    location / {
        proxy_set_header Host  $http_host;
        proxy_pass http://127.0.0.1:8010;
    }
}

如需 https 也由 nginx 终结,将 https_proxy_port 留空关闭,由 nginx 监听 443:

server {
    listen 443;
    server_name *.proxy.com;
    ssl on;
    ssl_certificate  certificate.crt;
    ssl_certificate_key private.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_set_header Host  $http_host;
        proxy_pass http://127.0.0.1:8020;
    }
}

web 管理使用 https

在 nps.conf 中设置 web_open_ssl=true,并配置 web_cert_file 与 web_key_file。

web 使用 Caddy 代理

实现子路径访问 nps,假设想通过 http://caddy_ip:caddy_port/nps 访问后台:

caddy_ip:caddy_port/nps {
  ##server_ip 为 nps 服务器IP
  ##web_port 为 nps 后台端口
  proxy / http://server_ip:web_port/nps {
	transparent
  }
}

nps.conf 中设置:

web_base_url=/nps
在 GitHub 上编辑此页
最后更新: 2026/9/3 17:30
Prev
配置文件参考
Next
服务端介绍