
本文部分内容是本人撰写后经由AI润色的
NPS是一款设计精致、性能出众且功能齐全的内网穿透代理服务器解决方案。
它支持TCP、UDP、SOCKS5代理、HTTP代理等多种数据转发类型,大幅增强了对内网资源的访问能力。
使用NPS,用户可以轻松完成访问内部网站、安全调试本地支付接口、SSH远程连接、远程桌面控制、内网DNS解析服务以及建立内网SOCKS5代理等多种应用场景。
NPS提供了一个直观的Web管理面板,而且其客户端连接时无需任何配置文件,这在功能上远超过Frp。
服务端和客户端是单独的。服务端称为NPS,客户端软件称为NPC(NPS Client)。NPS项目的Release文件包括了NPS和NPC两部分。
NPS具有以下特点
- 协议支持全面,兼容几乎所有常用协议,例如tcp、udp、http(s)、socks5、p2p、http代理。
- 全平台兼容(linux、windows、macos、群辉等),支持一键安装为系统服务,亦可直接运行调试。
- 控制全面,同时支持服务端和客户端控制。
- https集成,支持将后端代理和web服务转成https,同时支持多证书。
- 操作简单,只需简单的配置即可在web ui上完成其余操作。
- 展示信息全面,流量、系统信息、即时带宽、客户端版本等
- 扩展功能强大,具有缓存、压缩、加密、流量限制、带宽限制、端口复用等功能
- 域名解析具备自定义header、404页面配置、host修改、站点保护、URL路由、泛解析等功能
- 服务端支持多用户和用户注册功能
由于原作者长时间不更新NPS,这里使用yisier修改的的分支版本,大体使用和原版无异。
NPS服务端安装
以AMD64架构下Debian 11系统为例进行展示,在Releases · yisier/nps (github.com)里找到对应系统架构的文件,注意服务端要选server字样的。

# 创建一个名为NPS的目录
mkdir NPS
# 进入NPS目录
cd NPS
# 下载nps服务器二进制文件的压缩包(发稿时最新版本是0.26.19,以实际情况为准)
wget https://github.com/yisier/nps/releases/download/v0.26.19/linux_amd64_server.tar.gz
# 列出当前目录下的文件和目录(此时应该只看到下载的压缩包)
ls
# 输出应该类似于:
# linux_amd64_server.tar.gz
# 解压压缩包
tar -xzf linux_amd64_server.tar.gz
# 再次列出当前目录下的文件和目录(此时应该看到解压后的内容)
ls
# 输出可能类似于(具体取决于压缩包中的内容):
# conf linux_amd64_server.tar.gz nps web
在当前目录下,直接运行
./nps
即可以默认配置直接启动NPS服务器,此时使用的是/NPS/conf/nps.conf的配置(即二进制文件目录下的conf文件)

Ctrl+C可以终止进程
用于正式环境时,请将nps注册为系统服务,使用如下命令
sudo ./nps install
此时NPS会在/etc/nps/conf下生成nps.conf配置文件,随后均以该配置文件为准
nano /etc/nps/conf/nps.conf

配置文件说明:
appname = nps
#Boot mode(dev|pro)
runmode = dev
##下面是http/https代理使用的默认端口
#HTTP(S) proxy port, no startup if empty
http_proxy_ip=0.0.0.0
http_proxy_port=80
https_proxy_port=443
https_just_proxy=true
#default https certificate setting
https_default_cert_file=conf/server.pem
https_default_key_file=conf/server.key
#用于和NPC客户端链接的配置
##bridge
bridge_type=tcp
bridge_port=8024 #NPC客户端链接的端口,NPC客户端会与NPS服务端的bridge_port保持链接,请确保该端口可被访问。
bridge_ip=0.0.0.0
# Public password, which clients can use to connect to t>
# After the connection, the server will be able to open >
public_vkey=123
#Traffic data persistence interval(minute)
#Ignorance means no persistence
flow_store_interval=1
# log level LevelEmergency->0 LevelAlert->1 LevelCritic>
log_level=6
log_path=nps.log
#Whether to restrict IP access, true or false or ignore
#ip_limit=true
#p2p
#p2p_ip=127.0.0.1
#p2p_port=6000
##下面是用于Web管理NPS面板的信息,如需使用域名访问控制面板,请把域名解析到NPS服务器的IP,然后把下面web_host改为你的域名。
##用户名和端口需要注意修改
#web
web_host=a.o.com
web_username=admin
web_password=123
web_port = 8081
web_ip=0.0.0.0
web_base_url=
web_open_ssl=false
web_cert_file=conf/server.pem
web_key_file=conf/server.key
# if web under proxy use sub path. like http://host/nps >
#web_base_url=/nps
#Web API unauthenticated IP address(the len of auth_cryp>
#Remove comments if needed
#auth_key=test
auth_key=123
#获取服务端authKey时的aes加密密钥,16位
auth_crypt_key =213
#allow_ports=9001-9009,10001,11000-12000
#Web management multi-user login
allow_user_login=false
allow_user_register=false
allow_user_change_username=false
#extension
#流量限制
allow_flow_limit=true
#带宽限制
allow_rate_limit=true
#客户端最大隧道数限制
allow_tunnel_num_limit=true
allow_local_proxy=false
#客户端最大连接数
allow_connection_num_limit=true
#每个隧道监听不同的服务端端口
allow_multi_ip=true
system_info_display=true
#获取用户真实ip
#获取用户真实ip
http_add_origin_header=true
#cache
http_cache=false
http_cache_length=100
#get origin ip
#http_add_origin_header=false
#pprof debug options
#pprof_ip=0.0.0.0
#pprof_port=9999
#client disconnect timeout
disconnect_timeout=60
#管理面板开启验证码校验
open_captcha=true
# 是否开启tls
tls_enable=true
tls_bridge_port=8025
NPS存在严重的未授权访问漏洞,未授权用户可伪造请求,具体参考以下:
参见:NPS未授权访问漏洞详解 – FreeBuf网络安全行业门户
NPS反制之绕过登陆验证 (huclilu.github.io)
解决方案:去除#auth_key=test前的注释,auth_key和auth_crypt_key改为随机值
保存并关闭nano,
sudo nps start
即可启动nps
此时可通过
sudo nps status
来查看NPS的运行情况,

图片中的错误信息指示8081和443端口被占用
sudo npc start
和
sudo npc stop
进行启动停止,无需人为干涉。
NPC(客户端)默认是不需要进行参数配置的,只需要程序本身和一行命令即可,使用起来极其方便。
当NPC与NPS建立链接后,即可在NPS面板上操作,无需理会NPC
此外,如需更改注册参数(如更换NPS服务器),需要
sudo npc uninstall
卸载后,再次执行install。
需要注意的是,也可以直接运行:./npc -server=1.1.1.1:8024 -vkey=verifykey -type=tcp 运行,在ssh中观察情况。
注意,这种情况下,ssh断开后立刻停止
在临时调试时,也可以使用nohup ./npc -server=1.1.1.1:8024 -vkey=verifykey -type=tcp >/var/npClient/nps.txt &
命令,让npc在后台运行。此时,使用
ps -ef
找到npc进程的id后,kill。即可停止运行。这种情况在测试时相对方便。