diff --git a/README.md b/README.md index 4303547..5f08bee 100644 --- a/README.md +++ b/README.md @@ -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为公网服务器ip(1.1.1.1),端口为填写的监听端口(8003),即可畅享内网了 +- 在外网环境的本机配置socks5代理(例如使用proxifier进行全局代理),ip为公网服务器ip(1.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.css,nps将只需从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