no message

This commit is contained in:
刘河 2019-04-08 20:44:02 +08:00
parent 1e8180014d
commit 16c97a3c36
1 changed files with 80 additions and 54 deletions

134
README.md
View File

@ -49,11 +49,14 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
* [关闭http|https代理](#关闭代理)
* [将nps安装到系统](#将nps安装到系统)
* [流量数据持久化](#流量数据持久化)
* [系统信息显示](#系统信息显示)
* [自定义客户端连接密钥](#自定义客户端连接密钥)
* [关闭公钥访问](#关闭公钥访问)
* [关闭web管理](#关闭web管理)
* [服务端多用户登陆](#服务端多用户登陆)
* [用户注册功能](#用户注册功能)
* [监听指定ip](#监听指定ip)
* [代理到服务端本地](#代理到服务端本地)
* [客户端](#客户端)
* [客户端启动](#客户端启动)
* [无配置文件模式](#无配置文件模式)
@ -69,13 +72,14 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
* [p2p服务](#p2p代理)
* [文件访问代理](#文件访问模式)
* [断线重连](#断线重连)
* [nat类型检测](#nat类型检测)
* [状态检查](#状态检查)
* [重载配置文件](#重载配置文件)
* [通过代理连接nps](#通过代理连接nps)
* [日志输出级别](#日志输出级别)
* [群晖支持](#群晖支持)
* [相关功能](#相关功能)
* [缓存支持](#缓存支持)
* [数据压缩支持](#数据压缩支持)
* [站点密码保护](#站点保护)
* [加密传输](#加密传输)
@ -94,11 +98,12 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
* [URL路由](#URL路由)
* [限制ip访问](#限制ip访问)
* [客户端最大连接数限制](#客户端最大连接数)
* [客户端最大隧道数限制](#客户端最大隧道数限制)
* [端口复用](#端口复用)
* [多路复用](#多路复用)
* [环境变量渲染](#环境变量渲染)
* [健康检查](#健康检查)
* [日志输出](#日志输出)
* [相关说明](#相关说明)
* [流量统计](#流量统计)
* [当前客户端带宽](#当前客户端带宽)
@ -118,7 +123,7 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
### releases安装
> [releases](https://github.com/cnlh/nps/releases)
下载对应的系统版本即可,服务端和客户端是单独的go语言开发无需任何第三方依赖
下载对应的系统版本即可,服务端和客户端是单独的
### 源码安装
- 安装源码
@ -131,7 +136,7 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
## 使用示例
### 统一准备工作(必做)
- 开启服务端假设公网服务器ip为1.1.1.1,配置文件中`bridgePort`为8284配置文件中`web_port`为8080
- 开启服务端假设公网服务器ip为1.1.1.1,配置文件中`bridge_port`为8284配置文件中`web_port`为8080
- 访问1.1.1.1:8080
- 在客户端管理中创建一个客户端,记录下验证密钥
- 内网客户端运行windows使用cmd运行加.exe
@ -190,7 +195,7 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
**使用步骤**
- 在刚才创建的客户端隧道管理中添加一条socks5代理填写监听的端口8003保存。
- 在外网环境的本机配置socks5代理ip为公网服务器ip1.1.1.1),端口为填写的监听端口(8003),即可畅享内网了
- 在外网环境的本机配置socks5代理(例如使用proxifier进行全局代理)ip为公网服务器ip1.1.1.1),端口为填写的监听端口(8003),即可畅享内网了
### http正向代理
@ -198,6 +203,7 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
**假设场景:**
想将公网服务器1.1.1.1的8004端口作为http代理访问内网网站
**使用步骤**
- 在刚才创建的客户端隧道管理中添加一条http代理填写监听的端口8004保存。
@ -211,49 +217,41 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
无需新增多的端口实现访问内网服务器10.1.50.2的22端口
**使用步骤**
- 在刚才创建的客户端中添加一条私密代理并设置唯一密钥和内网目标10.1.50.2:22
- 在需要连接ssh的机器上以配置文件模式启动客户端,内容如下
- 在刚才创建的客户端中添加一条私密代理,并设置唯一密钥secrettest和内网目标10.1.50.2:22
- 在需要连接ssh的机器上以执行命令
```ini
[common]
server=1.1.1.1:8284
tp=tcp
vkey=123
[secret_ssh]
password=1111
port=1000
```
**注意:** secret前缀必须存在password为web管理上添加的唯一密钥
./npc -server=1.1.1.1:8284 -vkey=vkey -type=tcp -password=secrettest -local_type=secret
```
如需指定本地端口可加参数`-local_port=xx`默认为2000
**注意:** password为web管理上添加的唯一密钥具体命令可查看web管理上的命令提示
假设10.1.50.2用户名为root现在执行`ssh -p 2000 root@1.1.1.1`即可访问ssh
假设用户名为root现在执行`ssh -p 1000 root@127.0.0.1`即可访问ssh
### p2p服务
**适用范围:** 大流量传输场景流量不经过公网服务器但是由于p2p穿透和nat类型关系较大成功率一般可穿透所有非对称型nat。
**适用范围:** 大流量传输场景流量不经过公网服务器但是由于p2p穿透和nat类型关系较大不保证100%成功支持大部分nat类型。[nat类型检测](#nat类型检测)
**假设场景:**
内网1机器ip为10.1.50.2 内网2机器ip为10.2.50.2
内网1机器ip为10.1.50.2 内网2机器2 ip为10.2.50.2
想通过访问机器1的2001端口---->访问到内网2机器的22端口
想通过访问内网1机器1的2000端口---->访问到内网2机器3 10.2.50.3的22端口
**使用步骤**
- 在`nps.conf`中设置`p2p_ip`和`p2p_port`
- 在`nps.conf`中设置`p2p_ip`nps服务器ip和`p2p_port`nps服务器udp端口
- 在刚才刚才创建的客户端中添加一条p2p代理并设置唯一密钥p2pssh
- 在需要连接的机器上(即机器1)以配置文件模式启动客户端,内容如下
- 在机器1执行命令
```ini
[common]
server=1.1.1.1:8284
tp=tcp
vkey=123
[p2p_ssh]
password=p2pssh
port=2001
```
**注意:** p2p前缀必须存在password为web管理上添加的唯一密钥
./npc -server=1.1.1.1:8284 -vkey=123 -password=p2pssh -target=10.2.50.3:22
```
如需指定本地端口可加参数`-local_port=xx`默认为2000
假设机器2用户名为root现在在机器1上执行`ssh -p 2001 root@127.0.0.1`即可访问机器2的ssh
**注意:** password为web管理上添加的唯一密钥具体命令可查看web管理上的命令提示
假设机器3用户名为root现在在机器1上执行`ssh -p 2000 root@127.0.0.1`即可访问机器2的ssh
@ -279,7 +277,7 @@ port=2001
```shell
./nps start
```
如果无需daemon运行去掉start即可
**如果无需daemon运行或者打开后无法正常访问web管理去掉start查看日志运行即可**
#### web管理
@ -392,6 +390,8 @@ nps.exe test|start|stop|restart|status
服务端支持将流量数据持久化,默认情况下是关闭的,如果有需求可以设置`nps.conf`中的`flow_store_interval`参数,单位为分钟
**注意:** nps不会持久化通过公钥连接的客户端
### 系统信息显示
nps服务端支持在web上显示和统计服务器的相关信息但默认一些统计图表是关闭的如需开启请在`nps.conf`中设置`system_info_display=true`
### 自定义客户端连接密钥
web上可以自定义客户端连接的密钥但是必须具有唯一性
@ -404,13 +404,21 @@ web上可以自定义客户端连接的密钥但是必须具有唯一性
### 服务端多用户登陆
如果将`nps.conf`中的`allow_user_login`设置为true,服务端web将支持多用户登陆登陆用户名为user默认密码为每个客户端的验证密钥登陆后可以进入客户端编辑修改web登陆的用户名和密码默认该功能是关闭的。
### 用户注册功能
nps服务端支持用户注册功能可将`nps.conf`中的`allow_user_register`设置为true开启后登陆页将会有有注册功能
### 监听指定ip
nps支持每个隧道监听不同的服务端端口可在web中控制或者npc配置文件中(可忽略默认为0.0.0.0)
nps支持每个隧道监听不同的服务端端口,在`nps.conf`中设置`allow_multi_ip=true`后可在web中控制或者npc配置文件中(可忽略默认为0.0.0.0)
```ini
server_ip=xxx
```
### 代理到服务端本地
在使用nps监听80或者443端口时默认是将所有的请求都会转发到内网上但有时候我们的nps服务器的上一些服务也需要使用这两个端口nps提供类似于`nginx` `proxy_pass` 的功能支持将代理到服务器本地该功能支持域名解析tcp、udp隧道默认关闭。
**即:** 假设在nps的vps服务器上有一个服务使用5000端口这时候nps占用了80端口和443我们想能使用一个域名通过http(s)访问到5000的服务。
**使用方式:** 在`nps.conf`中设置`allow_local_proxy=true`然后在web上设置想转发的隧道或者域名然后选择转发到本地选项即可成功。
## 客户端
### 客户端启动
@ -598,7 +606,11 @@ strip_pre|前缀
[common]
auto_reconnection=true
```
#### nat类型检测
```
./npc nat
```
如果p2p双方都是Symmetic Nat肯定不能成功其他组合都有较大成功率。
#### 状态检查
```
./npc status -config=npc配置文件路径
@ -627,25 +639,15 @@ proxy_url=socks5://111:222@127.0.0.1:8024
或http://username:password@ip:port
#### 日志输出级别
```
-log_level=0~7
```
```
LevelEmergency->0 LevelAlert->1
LevelCritical->2 LevelError->3
LevelWarning->4 LevelNotice->5
LevelInformational->6 LevelDebug->7
```
默认为全输出,级别为0到7
#### 群晖支持
可在releases中下载spk群晖套件例如`npc_x64-6.1_0.19.0-1.spk`
## 相关功能
### 缓存支持
对于web站点来说一些静态文件往往消耗更大的流量且在内网穿透中静态文件还需到客户端获取一次这将导致更大的流量消耗。nps在域名解析代理中支持对静态文件进行缓存。
即假设一个站点有a.cssnps将只需从npc客户端读取一次该文件然后把该文件的内容放在内存中下一次将不再对npc客户端进行请求而直接返回内存中的对应内容。该功能默认是关闭的如需开启请在`nps.conf`中设置`http_cache=true`,并设置`http_cache_length`缓存文件的个数消耗内存不宜过大0表示不限制个数
### 数据压缩支持
由于是内网穿透内网客户端与服务端之间的隧道存在大量的数据交换为节省流量加快传输速度由此本程序支持SNNAPY形式的压缩。
@ -685,11 +687,11 @@ LevelInformational->6 LevelDebug->7
### 流量限制
支持客户端级流量限制,当该客户端入口流量与出口流量达到设定的总量后会拒绝服务
域名代理会返回404页面其他代理会拒绝连接
域名代理会返回404页面其他代理会拒绝连接,使用该功能需要在`nps.conf`中设置`allow_flow_limit`,默认是关闭的。
### 带宽限制
支持客户端级带宽限制,带宽计算方式为入口和出口总和,权重均衡
支持客户端级带宽限制,带宽计算方式为入口和出口总和,权重均衡,使用该功能需要在`nps.conf`中设置`allow_rate_limit`,默认是关闭的。
### 负载均衡
本代理支持域名解析模式和tcp代理的负载均衡在web域名添加或者编辑中内网目标分行填写多个目标即可实现轮训级别的负载均衡
@ -776,8 +778,10 @@ time为有效小时数例如time=2在当前时间后的两小时内
**注意:** 本机公网ip并不是一成不变的请自行注意有效期的设置同时同一网络下多人也可能是在公用同一个公网ip。
### 客户端最大连接数
为防止恶意大量长连接影响服务端程序的稳定性可以在web或客户端配置文件中为每个客户端设置最大连接数。该功能针对`socks5`、`http正向代理`、`域名代理`、`tcp代理`、`udp代理`、`私密代理`生效。
为防止恶意大量长连接影响服务端程序的稳定性可以在web或客户端配置文件中为每个客户端设置最大连接数。该功能针对`socks5`、`http正向代理`、`域名代理`、`tcp代理`、`udp代理`、`私密代理`生效,使用该功能需要在`nps.conf`中设置`allow_connection_num_limit=true`,默认是关闭的
### 客户端最大隧道数限制
nps支持对客户端的隧道数量进行限制该功能默认是关闭的如需开启请在`nps.conf`中设置`allow_tunnel_num_limit=true`。
### 端口复用
在一些严格的网络环境中对端口的个数等限制较大nps支持强大端口复用功能。将`bridge_port`、 `http_proxy_port``https_proxy_port` 、`web_port`都设置为同一端口,也能正常使用。
@ -850,6 +854,28 @@ health_check_target | 健康检查目标,多个以逗号(,)分隔
health_check_type | 健康检查类型
health_http_url | 健康检查url仅http模式适用
### 日志输出
#### 日志输出级别
**对于npc**
```
-log_level=0~7 -log_path=npc.log
```
```
LevelEmergency->0 LevelAlert->1
LevelCritical->2 LevelError->3
LevelWarning->4 LevelNotice->5
LevelInformational->6 LevelDebug->7
```
默认为全输出,级别为0到7
**对于nps**
在`nps.conf`中设置相关配置即可
## 相关说明
@ -872,7 +898,7 @@ health_http_url | 健康检查url仅http模式适用
可统计每个客户端当前的带宽,可能和实际有一定差异,仅供参考。
### 客户端与服务端版本对比
为了程序正常运行,客户端与服务端的版本必须一致,否则将导致客户端无法成功连接致服务端。
为了程序正常运行,客户端与服务端的核心版本必须一致,否则将导致客户端无法成功连接致服务端。
## webAPI