1. NPS概述:
-
NPS(内网穿透代理服务器)是一款由
TalentYoung
开发的轻量级、高性能的内网穿透代理服务器。它的设计目标是简单易用、功能强大,可以帮助用户在公网上访问内网服务。 -
NPS支持TCP、UDP、HTTP等多种协议,并提供了灵活的配置选项。用户可以根据自己的需求,配置端口映射、域名绑定、访问控制等功能。同时,NPS还支持多用户、多客户端的管理,可以满足不同场景下的需求。
1.1. NPS具有以下特点:
- 简单易用:NPS提供了简洁的配置文件和命令行工具,使得部署和配置变得简单快捷。
- 高性能:NPS采用了高性能的网络传输技术,保证了数据传输的稳定和快速。
- 安全可靠:NPS支持SSL/TLS加密传输,保障数据的安全性。同时,NPS还提供了访问控制功能,可以限制访问权限,增加系统的安全性。
- 开源免费:NPS是开源软件,遵循MIT许可证,用户可以免费使用、修改和分发。
1.2. NPS的工作原理可以通过以下示例来说明:
-
假设您有一台内网服务器,它运行在内网的IP地址为192.168.1.100,监听着某个端口号(例如80端口)提供Web服务。但是由于内网的限制,外部网络无法直接访问该服务器。
-
为了实现内网穿透,您可以在公网上部署一台NPS服务器,并在内网中部署NPS客户端。NPS客户端会与NPS服务器建立连接。
-
配置NPS服务器:您在NPS服务器上配置一个映射规则,将公网的某个端口(例如8888端口)映射到内网服务器的IP地址和端口(192.168.1.100:80)。
-
NPS客户端连接:NPS客户端会与NPS服务器建立连接,并向NPS服务器注册自己的信息。
-
公网访问:当外部用户通过公网访问NPS服务器的8888端口时,NPS服务器会接收到请求。
-
数据转发:NPS服务器收到请求后,会将请求转发给与之建立连接的NPS客户端。
-
内网转发:NPS客户端收到请求后,会将请求转发给内网服务器的192.168.1.100:80端口。
-
内网响应:内网服务器处理请求并生成响应,将响应发送给NPS客户端。
-
公网响应:NPS客户端将内网服务器的响应转发给NPS服务器。
-
用户接收:NPS服务器将内网服务器的响应发送给外部用户,用户就可以在公网上访问到内网服务器提供的Web服务。
2. NPS服务搭建
- 官网:https://github.com/ehang-io/nps
- 官方文档:https://ehang-io.github.io/nps/#/feature
- 程序下载地址:https://github.com/ehang-io/nps/releases
2.1. 服务端安装配置:
- 服务端的程序可以安装在云服务器上或者你公司或者家里拉的网线是有固定IP地址(固定的公网IP地址)
- 我这边展示的是公司有固定IP地址,所以不用在云服务器上操作。
#下载服务端程序
wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
#创建nps工作目录
mkdir /usr/local/soft/nps
#解压
tar -xf linux_amd64_server.tar.gz -C /usr/local/soft/nps/
#安装
cd /usr/local/soft/nps/
./nps install
#启动
cp -rp nps /usr/local/bin/
nps start
2.2. 访问web界面
- 使用IP+8080端口,即可看到nps管理界面,用户名和密码默认是admin/123,请及时修改
2.3. 修改配置文件
- 如果需要修改登录用户名、密码、网页登录端口等信息,可以修改/etc/nps/conf/nps.conf即可
名称 | 含义 |
---|---|
web_port | web管理端口 |
web_password | web界面管理密码 |
web_username | web界面管理账号 |
web_base_url | web管理主路径,用于将web管理置于代理子路径后面 |
bridge_port | 服务端客户端通信端口 |
https_proxy_port | 域名代理https代理监听端口 |
http_proxy_port | 域名代理http代理监听端口 |
auth_key | web api密钥 |
bridge_type | 客户端与服务端连接方式kcp或tcp |
public_vkey | 客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式 |
ip_limit | 是否限制ip访问,true或false或忽略 |
flow_store_interval | 服务端流量数据持久化间隔,单位分钟,忽略表示不持久化 |
log_level | 日志输出级别 |
auth_crypt_key | 获取服务端authKey时的aes加密密钥,16位 |
p2p_ip | 服务端Ip,使用p2p模式必填 |
p2p_port | p2p模式开启的udp端口 |
pprof_ip | debug pprof 服务端ip |
pprof_port | debug pprof 端口 |
disconnect_timeout | 客户端连接超时,单位 5s,默认值 60,即 300s = 5mins |
3. 客户端连接
-
客户端-----》新增
-
填写备注,下面的压缩和加密选择“是”
-
新增客户端后,生成ID:2
-
点击左边的加号,会出现下面的一条客户端命令,这条命令是在客户端执行
4. 客户端安装配置:
#下载客户端程序
wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz
#创建客户端工作目录
mkdir /usr/local/nps-client
#解压
tar -xf linux_amd64_client.tar.gz -C /usr/local/nps-client/
#启动
cd /usr/local/nps-client/./npc -server=192.168.10.10:8024 -vkey=zl01gmco9xsuaei9 -type=tcp
- 出现下图说明启动成功
- 也可以后台运行nps客户端服务
nohup ./npc -server=192.168.10.10:8024 -vkey=zl01gmco9xsuaei9 -type=tcp &
4.1. 可以看到网页上客户端的状态显示在线
5. 创建tcp隧道
- 例:假如我这边想让192.168.100.20的80端口映射为10080,外网可以访问,下面的操作就可以实现
5.1. 需要在你公司的固定IP地址的路由器上设置端口映射
- 每个品牌的路由器操作不一样
5.2. 创建tcp隧道,实现端口映射