File mode|pubVkey optimization

This commit is contained in:
刘河
2019-03-02 17:43:21 +08:00
parent f526c56784
commit 1c1aa5ec5b
29 changed files with 477 additions and 195 deletions

128
README.md
View File

@@ -49,6 +49,7 @@ go语言编写无第三方依赖各个平台都已经编译在release中
* [流量数据持久化](#流量数据持久化)
* [自定义客户端连接密钥](#自定义客户端连接密钥)
* [关闭公钥访问](#关闭公钥访问)
* [关闭web管理](#关闭web管理)
* [客户端](#客户端)
* [客户端启动](#客户端启动)
* [无配置文件模式](#无配置文件模式)
@@ -60,7 +61,9 @@ go语言编写无第三方依赖各个平台都已经编译在release中
* [udp隧道](#udp隧道模式)
* [http正向代理](#http代理模式)
* [socks5代理](#socks5代理模式)
* [私密代理](#私密代理)
* [私密代理](#私密代理模式)
* [p2p服务](#p2p代理)
* [文件访问代理](#文件访问模式)
* [断线重连](#断线重连)
* [状态检查](#状态检查)
* [重载配置文件](#重载配置文件)
@@ -161,17 +164,21 @@ go语言编写无第三方依赖各个平台都已经编译在release中
---|---
httpport | web管理端口
password | web界面管理密码
bridePort | 服务端客户端通信端口
username | web界面管理账号
bridgePort | 服务端客户端通信端口
pemPath | ssl certFile绝对路径
keyPath | ssl keyFile绝对路径
httpsProxyPort | 域名代理https代理监听端口
httpProxyPort | 域名代理http代理监听端口
authip|web api免验证IP地址
authKey|web api密钥
bridgeType|客户端与服务端连接方式kcp或tcp
publicVkey|客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式
ipLimit|是否限制ip访问true或false或忽略
flowStoreInterval|服务端流量数据持久化间隔,单位分钟,忽略表示不持久化
logLevel|日志输出级别
cryptKey | 获取服务端authKey时的aes加密密钥16位
serverIp| 服务端Ip使用p2p模式必填
p2pPort|p2p模式开启的udp端口
### 详细说明
@@ -213,7 +220,7 @@ logLevel|日志输出级别
./npc -server=1.1.1.1:8284 -vkey=客户端的密钥
```
- 在该客户端隧道管理中添加一条tcp隧道填写监听的端口8001、内网目标ip和目标端口10.1.50.101:22选择压缩方式保存。
- 访问公网服务器ip127.0.0.1,填写的监听端口(8001)相当于访问内网ip(10.1.50.101):目标端口(22),例如:`ssh -p 8001 root@127.0.0.1`
- 访问公网服务器ip127.0.0.1,填写的监听端口(8001)相当于访问内网ip(10.1.50.101):目标端口(22),例如:`ssh -p 8001 root@1.1.1.1`
#### udp隧道
@@ -271,7 +278,7 @@ logLevel|日志输出级别
**适用范围:** 无需占用多余的端口、安全性要求较高可以防止其他人连接的TCP服务例如ssh。
**假设场景:**
无需新增多的端将映射内网服务器10.1.50.2的22端口
无需新增多的端将映射内网服务器10.1.50.2的22端口公网服务器ip为1.1.1.1,网桥端口为8284
**使用步骤**
- 在客户端管理中创建一个客户端,记录下验证密钥
@@ -284,7 +291,7 @@ logLevel|日志输出级别
```ini
[common]
server=127.0.0.1:8284
server=1.1.1.1:8284
tp=tcp
vkey=123
[secret_ssh]
@@ -295,6 +302,37 @@ port=1000
假设用户名为root现在执行`ssh -p 1000 root@127.0.0.1`即可访问ssh
#### p2p服务
**适用范围:** 大流量传输场景流量不经过公网服务器但是由于p2p穿透和nat类型关系较大成功率不高。
**假设场景:**
内网1机器ip为10.1.50.2 内网2机器ip为10.2.50.2 口公网服务器ip为1.1.1.1,网桥端口为8284
想通过访问机器1的2001端口---->访问到内网2机器的22端口
**使用步骤**
- 在客户端管理中创建一个客户端,记录下验证密钥
- 内网机器2客户端运行
```
./npc -server=1.1.1.1:8284 -vkey=客户端的密钥
```
- 添加一条p2p代理并设置唯一密钥p2pssh
- 在需要连接的机器上(即机器1)以配置文件模式启动客户端,内容如下
```ini
[common]
server=1.1.1.1:8284
tp=tcp
vkey=123
[p2p_ssh]
password=p2pssh
port=2001
```
**注意:** p2p前缀必须存在password为web管理上添加的唯一密钥
假设机器2用户名为root现在执行`ssh -p 2001 root@127.0.0.1`即可访问机器2的ssh
### 使用https
@@ -368,6 +406,9 @@ web上可以自定义客户端连接的密钥但是必须具有唯一性
### 关闭公钥访问
可以将`nps.conf`中的`publicVkey`设置为空或者删除
### 关闭web管理
可以将`nps.conf`中的`httpport`设置为空或者删除
## 客户端
### 客户端启动
@@ -432,7 +473,7 @@ header_xxx|请求header修改或添加header_proxy表示添加header proxy:np
```ini
[tcp]
mode=tcp
mode=tcpServer
target=127.0.0.1:8080
port=9001
```
@@ -446,7 +487,7 @@ target|内网目标
```ini
[udp]
mode=udp
mode=udpServer
target=127.0.0.1:8080
port=9002
```
@@ -459,7 +500,7 @@ target|内网目标
```ini
[http]
mode=httpProxy
mode=httpProxyServer
port=9003
```
项 | 含义
@@ -470,7 +511,7 @@ port | 在服务端的代理端口
```ini
[socks5]
mode=socks5
mode=socks5Server
port=9004
```
项 | 含义
@@ -487,10 +528,44 @@ target=10.1.50.2:22
```
项 | 含义
---|---
mode | secret
mode | secretServer
password | 唯一密钥
target|内网目标
##### p2p代理模式
```ini
[p2p_ssh]
mode=p2p
password=ssh2
target=10.1.50.2:22
```
项 | 含义
---|---
mode | p2p
password | 唯一密钥
target|内网目标
##### 文件访问模式
利用nps提供一个公网可访问的本地文件服务
```ini
[file]
mode=file
port=9100
local_path=/tmp/
strip_pre=/web/
````
项 | 含义
---|---
mode | file
port | 服务端开启的端口
local_path|本地文件目录
strip_pre|前缀
对于`strip_pre`,访问公网`ip:9100/web/`相当于访问`/tmp/`目录
#### 断线重连
```ini
[common]
@@ -600,7 +675,7 @@ allowPorts=9001-9009,10001,11000-12000
```ini
[tcp]
mode=tcp
mode=tcpServer
port=9001-9009,10001,11000-12000
target=8001-8009,10002,13000-14000
```
@@ -609,7 +684,7 @@ target=8001-8009,10002,13000-14000
### 端口范围映射到其他机器
```ini
[tcp]
mode=tcp
mode=tcpServer
port=9001-9009,10001,11000-12000
target=8001-8009,10002,13000-14000
targetAddr=10.1.50.2
@@ -707,6 +782,33 @@ time为有效小时数例如time=2在当前时间后的两小时内
## webAPI
### webAPI验证说明
- 采用auth_key的验证方式
- 在提交的每个请求后面附带两个参数,`auth_key``timestamp`
```
auth_key的生成方式为md5(配置文件中的auth_key+当前时间戳)
```
```
timestamp为当前时间戳
```
**注意:** 为保证安全时间戳的有效范围为20秒内所以每次提交请求必须重新生成。
### 获取服务端authKey
如果想获取authKey服务端提供获取authKey的接口
```
POST /auth/getauthkey
```
将返回加密后的authKey采用aes cbc加密请使用与服务端配置文件中cryptKey相同的密钥进行解密
### 详细文档
- 此文档近期可能更新较慢,建议自行抓包
为方便第三方扩展在web模式下可利用webAPI进行相关操作详情见
[webAPI文档](https://github.com/cnlh/nps/wiki/webAPI%E6%96%87%E6%A1%A3)