Skip to content

Commit

Permalink
cahnge md
Browse files Browse the repository at this point in the history
  • Loading branch information
cnlh committed Dec 13, 2019
1 parent cf9644e commit c759cef
Show file tree
Hide file tree
Showing 16 changed files with 193 additions and 159 deletions.
19 changes: 12 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,26 @@ nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务
下载对应的系统版本即可,服务端和客户端是单独的


### 服务端启动
- 进入服务端启动
1. 进入服务端启动
```shell
./nps
```
如有错误修改配置文件相应端口,无错误可继续进行下去
- 进入WEB管理
- 访问服务端ip:web服务端口(默认为8024
- 在web中创建客户端
2. 访问服务端ip:web服务端口(默认为8024)
3. 使用用户名和密码登陆(默认admin/123,正式使用一定要更改
4. 在web中创建客户端

### 客户端连接
- 点击web管理中客户端前的+号,复制启动命令
- 执行启动命令,linux直接执行即可,windows将./npc换成npc.exe用cmd执行
1. 点击web管理中客户端前的+号,复制启动命令
2. 执行启动命令,linux直接执行即可,windows将./npc换成npc.exe用cmd执行

### 配置
- 客户端连接后,在web中配置对应穿透服务即可
- 更多高级用法见[完整文档](https://cnlh.github.io/nps/)

## 贡献
- 如果遇到bug可以直接提交至dev分支
- 使用遇到问题可以通过issues反馈
- 项目处于开发阶段,还有很多待完善的地方,如果可以贡献代码,请提交 PR 至 dev 分支
- 如果有新的功能特性反馈,可以通过issues或者qq群反馈
2 changes: 1 addition & 1 deletion docs/_coverpage.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@


[GitHub](https://github.com/cnlh/nps/)
[开始使用](#docsify)
[开始使用](#nps)
3 changes: 2 additions & 1 deletion docs/_sidebar.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
* 入门
* [安装](install.md)
* [启动](run.md)
* [使用示例](example.md)
* 服务端
* [介绍](introduction.md)
* [启动](start.md)
* [使用](nps_use.md)
* [配置文件](server_config.md)
* [增强功能](nps_extend.md)

Expand Down
10 changes: 5 additions & 5 deletions docs/api.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

# webAPI验证说明
# web api
## webAPI验证说明
- 采用auth_key的验证方式
- 在提交的每个请求后面附带两个参数,`auth_key``timestamp`

Expand All @@ -17,14 +17,14 @@ curl --request POST \
```
**注意:** 为保证安全,时间戳的有效范围为20秒内,所以每次提交请求必须重新生成。

# 获取服务端时间
## 获取服务端时间
由于服务端与api请求的客户端时间差异不能太大,所以提供了一个可以获取服务端时间的接口

```
POST /auth/gettime
```

# 获取服务端authKey
## 获取服务端authKey

如果想获取authKey,服务端提供获取authKey的接口

Expand All @@ -39,7 +39,7 @@ POST /auth/getauthkey
- 补码方式pkcs5padding
- 解密串编码方式 十六进制

# 详细文档
## 详细文档
- **此文档近期可能更新较慢,建议自行抓包**

为方便第三方扩展,在web模式下可利用webAPI进行相关操作,详情见
Expand Down
2 changes: 1 addition & 1 deletion docs/contribute.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# 贡献
**欢迎参与到制作docker、图标、文档翻译等工作**

- 如果遇到bug可以直接提交至dev分支
- 使用遇到问题可以通过issues反馈
- 项目处于开发阶段,还有很多待完善的地方,如果可以贡献代码,请提交 PR 至 dev 分支
Expand Down
15 changes: 8 additions & 7 deletions docs/description.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
# 获取用户真实ip
# 说明
## 获取用户真实ip

在域名代理模式中,可以通过request请求 header 中的 X-Forwarded-For 和 X-Real-IP 来获取用户真实 IP。

**本代理前会在每一个http(s)请求中添加了这两个 header。**

# 热更新支持
## 热更新支持
对于绝大多数配置,在web管理中的修改将实时使用,无需重启客户端或者服务端

# 客户端地址显示
## 客户端地址显示
在web管理中将显示客户端的连接地址

# 流量统计
## 流量统计
可统计显示每个代理使用的流量,由于压缩和加密等原因,会和实际环境中的略有差异

# 当前客户端带宽
## 当前客户端带宽
可统计每个客户端当前的带宽,可能和实际有一定差异,仅供参考。

# 客户端与服务端版本对比
## 客户端与服务端版本对比
为了程序正常运行,客户端与服务端的核心版本必须一致,否则将导致客户端无法成功连接致服务端。

# Linux系统限制
## Linux系统限制
默认情况下linux对连接数量有限制,对于性能好的机器完全可以调整内核参数以处理更多的连接。
`tcp_max_syn_backlog` `somaxconn`
酌情调整参数,增强网络性能
6 changes: 4 additions & 2 deletions docs/donate.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# 捐助
如果您觉得nps对你有帮助,欢迎给予我们一定捐助,也是帮助nps更好的发展。
# 支付宝

## 支付宝
![image](https://github.com/cnlh/nps/blob/master/image/donation_zfb.png?raw=true)
# 微信
## 微信
![image](https://github.com/cnlh/nps/blob/master/image/donation_wx.png?raw=true)
21 changes: 11 additions & 10 deletions docs/example.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# 统一准备工作(必做)
# 使用示例
## 统一准备工作(必做)
- 开启服务端,假设公网服务器ip为1.1.1.1,配置文件中`bridge_port`为8284,配置文件中`web_port`为8080
- 访问1.1.1.1:8080
- 在客户端管理中创建一个客户端,记录下验证密钥
Expand All @@ -9,7 +10,7 @@
```
**注意:运行服务端后,请确保能从客户端设备上正常访问配置文件中所配置的`bridge_port`端口,telnet,netcat这类的来检查**

# 域名解析
## 域名解析

**适用范围:** 小程序开发、微信公众号开发、产品演示

Expand All @@ -24,9 +25,9 @@

现在访问(http|https://)`a.proxy.com``b.proxy.com`即可成功

**https:** 如需使用https请进行相关配置,详见 [使用https](#使用https)
**https:** 如需使用https请进行相关配置,详见 [使用https](##使用https)

# tcp隧道
## tcp隧道


**适用范围:** ssh、远程桌面等tcp连接场景
Expand All @@ -38,7 +39,7 @@
- 在刚才创建的客户端隧道管理中添加一条tcp隧道,填写监听的端口(8001)、内网目标ip和目标端口(10.1.50.101:22),保存。
- 访问公网服务器ip(1.1.1.1),填写的监听端口(8001),相当于访问内网ip(10.1.50.101):目标端口(22),例如:`ssh -p 8001 [email protected]`

# udp隧道
## udp隧道

**适用范围:** 内网dns解析等udp连接场景

Expand All @@ -49,7 +50,7 @@
- 在刚才创建的客户端的隧道管理中添加一条udp隧道,填写监听的端口(53)、内网目标ip和目标端口(10.1.50.102:53),保存。
- 修改需要使用的dns地址为1.1.1.1,则相当于使用10.1.50.102作为dns服务器

# socks5代理
## socks5代理


**适用范围:** 在外网环境下如同使用vpn一样访问内网设备或者资源
Expand All @@ -64,7 +65,7 @@
**注意**
经过socks5代理,当收到socks5数据包时socket已经是accept状态。表现是扫描端口全open,建立连接后短时间关闭。若想同内网表现一致,建议远程连接一台设备。

# http正向代理
## http正向代理

**适用范围:** 在外网环境下使用http正向代理访问内网站点

Expand All @@ -76,7 +77,7 @@
- 在刚才创建的客户端隧道管理中添加一条http代理,填写监听的端口(8004),保存。
- 在外网环境的本机配置http代理,ip为公网服务器ip(1.1.1.1),端口为填写的监听端口(8004),即可访问了

# 私密代理
## 私密代理

**适用范围:** 无需占用多余的端口、安全性要求较高可以防止其他人连接的tcp服务,例如ssh。

Expand All @@ -97,9 +98,9 @@
假设10.1.50.2用户名为root,现在执行`ssh -p 2000 [email protected]`即可访问ssh


# p2p服务
## p2p服务

**适用范围:** 大流量传输场景,流量不经过公网服务器,但是由于p2p穿透和nat类型关系较大,不保证100%成功,支持大部分nat类型。[nat类型检测](#nat类型检测)
**适用范围:** 大流量传输场景,流量不经过公网服务器,但是由于p2p穿透和nat类型关系较大,不保证100%成功,支持大部分nat类型。[nat类型检测](##nat类型检测)

**假设场景:**

Expand Down
54 changes: 27 additions & 27 deletions docs/feature.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@

# 缓存支持
# 扩展功能
## 缓存支持
对于web站点来说,一些静态文件往往消耗更大的流量,且在内网穿透中,静态文件还需到客户端获取一次,这将导致更大的流量消耗。nps在域名解析代理中支持对静态文件进行缓存。

即假设一个站点有a.css,nps将只需从npc客户端读取一次该文件,然后把该文件的内容放在内存中,下一次将不再对npc客户端进行请求而直接返回内存中的对应内容。该功能默认是关闭的,如需开启请在`nps.conf`中设置`http_cache=true`,并设置`http_cache_length`(缓存文件的个数,消耗内存,不宜过大,0表示不限制个数)

# 数据压缩支持
## 数据压缩支持

由于是内网穿透,内网客户端与服务端之间的隧道存在大量的数据交换,为节省流量,加快传输速度,由此本程序支持SNNAPY形式的压缩。

Expand All @@ -13,53 +13,53 @@
- 在web管理或客户端配置文件中设置


# 加密传输
## 加密传输

如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了ssh协议等,通过设置 配置文件,将服务端与客户端之间的通信内容加密传输,将会有效防止流量被拦截。
- nps使用tls加密,所以一定要保留conf目录下的密钥文件,同时也可以自行生成
- 在web管理或客户端配置文件中设置



# 站点保护
## 站点保护
域名代理模式所有客户端共用一个http服务端口,在知道域名后任何人都可访问,一些开发或者测试环境需要保密,所以可以设置用户名和密码,nps将通过 Http Basic Auth 来保护,访问时需要输入正确的用户名和密码。


- 在web管理或客户端配置文件中设置

# host修改
## host修改

由于内网站点需要的host可能与公网域名不一致,域名代理支持host修改功能,即修改request的header中的host字段。

**使用方法:在web管理中设置**

# 自定义header
## 自定义header

支持对header进行新增或者修改,以配合服务的需要

# 404页面配置
## 404页面配置
支持域名解析模式的自定义404页面,修改/web/static/page/error.html中内容即可,暂不支持静态文件等内容

# 流量限制
## 流量限制

支持客户端级流量限制,当该客户端入口流量与出口流量达到设定的总量后会拒绝服务
,域名代理会返回404页面,其他代理会拒绝连接,使用该功能需要在`nps.conf`中设置`allow_flow_limit`,默认是关闭的。

# 带宽限制
## 带宽限制

支持客户端级带宽限制,带宽计算方式为入口和出口总和,权重均衡,使用该功能需要在`nps.conf`中设置`allow_rate_limit`,默认是关闭的。

# 负载均衡
## 负载均衡
本代理支持域名解析模式和tcp代理的负载均衡,在web域名添加或者编辑中内网目标分行填写多个目标即可实现轮训级别的负载均衡

# 端口白名单
## 端口白名单
为了防止服务端上的端口被滥用,可在nps.conf中配置allow_ports限制可开启的端口,忽略或者不填表示端口不受限制,格式:

```ini
allow_ports=9001-9009,10001,11000-12000
```

# 端口范围映射
## 端口范围映射
当客户端以配置文件的方式启动时,可以将本地的端口进行范围映射,仅支持tcp和udp模式,例如:

```ini
Expand All @@ -70,7 +70,7 @@ target_port=8001-8009,10002,13000-14000
```

逗号分隔,可单个或者范围,注意上下端口的对应关系,无法一一对应将不能成功
# 端口范围映射到其他机器
## 端口范围映射到其他机器
```ini
[tcp]
mode=tcp
Expand All @@ -79,25 +79,25 @@ target_port=8001-8009,10002,13000-14000
target_ip=10.1.50.2
```
填写target_ip后则表示映射的该地址机器的端口,忽略则便是映射本地127.0.0.1,仅范围映射时有效
# 守护进程
## 守护进程
本代理支持守护进程,使用示例如下,服务端客户端所有模式通用,支持linux,darwin,windows。
```
./(nps|npc) start|stop|restart|status 若有其他参数可加其他参数
```
```
(nps|npc).exe start|stop|restart|status 若有其他参数可加其他参数
```
# KCP协议支持
## KCP协议支持

KCP 是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,在弱网环境下对性能能有一定的提升。可在nps.conf中修改`bridge_type`为kcp
,设置后本代理将开启udp端口(`bridge_port`

注意:当服务端为kcp时,客户端连接时也需要使用相同配置,无配置文件模式加上参数type=kcp,配置文件模式在配置文件中设置tp=kcp

# 域名泛解析
## 域名泛解析
支持域名泛解析,例如将host设置为*.proxy.com,a.proxy.com、b.proxy.com等都将解析到同一目标,在web管理中或客户端配置文件中将host设置为此格式即可。

# URL路由
## URL路由
本代理支持根据URL将同一域名转发到不同的内网服务器,可在web中或客户端配置文件中设置,此参数也可忽略,例如在客户端配置文件中

```ini
Expand All @@ -112,7 +112,7 @@ location=/static
```
对于`a.proxy.com/test`将转发到`web1`,对于`a.proxy.com/static`将转发到`web2`

# 限制ip访问
## 限制ip访问
如果将一些危险性高的端口例如ssh端口暴露在公网上,可能会带来一些风险,本代理支持限制ip访问。

**使用方法:** 在配置文件nps.conf中设置`ip_limit`=true,设置后仅通过注册的ip方可访问。
Expand All @@ -133,18 +133,18 @@ time为有效小时数,例如time=2,在当前时间后的两小时内,本


**注意:** 本机公网ip并不是一成不变的,请自行注意有效期的设置,同时同一网络下,多人也可能是在公用同一个公网ip。
# 客户端最大连接数
## 客户端最大连接数
为防止恶意大量长连接,影响服务端程序的稳定性,可以在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`都设置为同一端口,也能正常使用。

- 使用时将需要复用的端口设置为与`bridge_port`一致即可,将自动识别。
- 如需将web管理的端口也复用,需要配置`web_host`也就是一个二级域名以便区分

# 多路复用
## 多路复用

nps主要通信默认基于多路复用,无需开启。

Expand All @@ -154,14 +154,14 @@ nps主要通信默认基于多路复用,无需开启。
在Linux上,可以通过调节内核参数来适应不同应用场景。

对于需求大带宽又有一定的丢包的场景,可以保持默认参数不变,尽可能少抛弃连接
高并发下可根据[Linux系统限制](# Linux系统限制) 调整
高并发下可根据[Linux系统限制](## Linux系统限制) 调整

对于延迟敏感而又有一定丢包的场景,可以适当调整TCP重传次数
`tcp_syn_retries`, `tcp_retries1`, `tcp_retries2`
高并发同上
nps会在系统主动关闭连接的时候拿到报错,进而重新建立隧道连接

# 环境变量渲染
## 环境变量渲染
npc支持环境变量渲染以适应在某些特殊场景下的要求。

**在无配置文件启动模式下:**
Expand All @@ -185,7 +185,7 @@ target_addr={{.NPC_WEB_TARGET}}
```
在配置文件中填入相应的环境变量名称,npc将自动进行渲染配置文件替换环境变量

# 健康检查
## 健康检查

当客户端以配置文件模式启动时,支持多节点的健康检查。配置示例如下

Expand Down Expand Up @@ -223,7 +223,7 @@ health_check_target | 健康检查目标,多个以逗号(,)分隔
health_check_type | 健康检查类型
health_http_url | 健康检查url,仅http模式适用

# 日志输出
## 日志输出

日志输出级别

Expand Down
Loading

0 comments on commit c759cef

Please sign in to comment.