J's Blog

J's Blog

Docker搭建NPS内网穿透服务

2023-08-26

NPS介绍

nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理p2p等,并带有功能强大的web管理端。

内网穿透原理:

通常情况下,一个局域网中的设备使用私有IP地址,例如192.168.x.x或10.x.x.x,无法直接从互联网上访问。这是因为路由器或防火墙等设备在局域网和广域网之间充当了一个网关,并拦截从外部发来的请求。(亦或大内网)

然而,内网穿透技术可以通过在局域网内的一台设备上运行一个客户端程序,与一个位于公共网络上的服务器建立连接。该客户端程序会向服务器发送一个连接请求,服务器在收到请求后与客户端建立连接。

一旦建立连接,客户端会将对内部服务的请求发送给服务器。服务器接收到请求后,将其转发给局域网内的目标设备,目标设备处理请求并将结果返回给服务器。服务器再将结果返回给客户端,最终完成客户端与内部服务的通信。

原项目官网(已停更): https://ehang-io.github.io/nps

原项目GitHub地址(已停更): https://github.com/cnlh/nps

二开GitHub地址: https://github.com/yisier/nps

镜像地址: https://hub.docker.com/r/yisier1/nps

服务端搭建

下载配置文件

官方配置文件地址: https://github.com/yisier/nps/tree/master/conf

下载完成后,上传并解压至服务器

修改配置文件

修改nps.conf文件, 修改项: web_hostweb_usernameweb_passwordweb_port

#应用程序
appname = nps
#运行模式
runmode = pro

#Web设置
web_host=服务器域名或IP
#web_base_url=
web_username=admin
web_password=admin
web_port=8081
web_ip=0.0.0.0
#web_open_ssl=true
#web_cert_file=conf/server.pem
#web_key_file=conf/server.key

#桥接设置和公匙
bridge_type=tcp
bridge_port=8024
bridge_ip=0.0.0.0
tls_enable=true
tls_bridge_port=8025
#public_vkey=公钥

#HTTPS配置
https_default_cert_file=conf/server.pem
https_default_key_file=conf/server.key

#设置HTTP代理服务器配置
#http_proxy_ip=0.0.0.0
#http_proxy_port=999
#https_proxy_port=9999

#P2P设置
#p2p_ip=104.194.87.181
#p2p_port=6000

#系统信息显示
system_info_display=true
#流量限制
allow_flow_limit=false
#速率限制
allow_rate_limit=false
#IP访问限制
ip_limit=false
#隧道数量限制
allow_tunnel_num_limit=false
#连接数量限制
allow_connection_num_limit=false
#获取原始IP
http_add_origin_header=true
#本地代理
allow_local_proxy=false
#多IP支持
allow_multi_ip=false
#HTTP缓存
http_cache=true
http_cache_length=100
#Web登录验证码
open_captcha=false
#Web多用户登录
allow_user_login=false
#Web多用户注册
allow_user_register=false
#Web多用户修改用户名
allow_user_change_username=false
#客户端断开连接超时时间
disconnect_timeout=60
#流量数据持久化间隔(分钟), 设置为0表示不持久化
flow_store_interval=0
#允许的端口范围
#allow_ports=9001-9009,10001,11000-12000

#身份验证密钥
#auth_key=b4ZsVqI5z7Yh
#身份验证加密密钥
#auth_crypt_key=YcgMt2FCgK9bAI9yZfQE6lzl

#日志级别:紧急->0 警戒->1 临界->2 错误->3 警告->4 注意->5 信息->6 调试->7
log_level=0
#日志路径
log_path=nps.log

#pprof调试选项
#pprof_ip=0.0.0.0
#pprof_port=9999

启动服务端

docker run -d \
--name nps \
--restart always \
--net=host \
-v [数据挂载目录]:/conf \
yisier1/nps

访问web管理后台

访问地址:[服务器ip或者域名]:你设置的端口号

输入配置的用户名和密码

添加客户端

67b5daecf1d08.png

客户端使用

Win

客户端下载地址: https://github.com/yisier/nps/releases

启动客户端

解压后管理员启动npc.exe, 可以注册系统服务或直接输入快捷启动命令

快捷启动命令在添加客户端后, 客户端左侧+号下

67b5e2af50a73.png

Linux

启动客户端

docker run -d \
--name npc \
--restart=always \
--net=host yisier1/npc \
-auto_reconnection \
-server=服务器IP或域名 \
-vkey=客户端Key

使用示例

场景:使用Win自带远程控制,控制家中电脑

将Win部署客户端

67b5e1ee3b6a1.png

新增TCP隧道

本地可以只填写端口号,如果需要访问内网内其他设备可以使用 内网IP:端口

我将VPS的3389端口转发至家中电脑3389

67b5e1ee3a5f3.png

验证转发

67b5e24717e28.png