NPS内网穿透使用小计

352次阅读
没有评论
NPS 内网穿透使用小计
本文部分内容是本人撰写后经由 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 内网穿透使用小计
# 创建一个名为 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 文件)

NPS 内网穿透使用小计

Ctrl+ C 可以终止进程

用于正式环境时,请将 nps 注册为系统服务,使用如下命令

sudo ./nps install

此时 NPS 会在 /etc/nps/conf 下生成 nps.conf 配置文件,随后均以该配置文件为准


nano /etc/nps/conf/nps.conf
NPS 内网穿透使用小计

配置文件说明:

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 的运行情况,

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。即可停止运行。这种情况在测试时相对方便。

正文完
 
评论(没有评论)