内网穿透工具nps使用教程 - 来自内部交流群

内网穿透工具nps使用教程.docx

内网穿透工具nps使用教程

感谢

感谢开源软件开发者,github链接https://github.com/cnlh/nps/

感兴趣的去star下吧~


视频教程

https://www.bilibili.com/video/av74707117https://www.bilibili.com/video/av76554314

nps简介

与ngrok、frp等老牌内网穿透工具相比,nps可以算是一匹黑马。其优势主要有两点:一是强大的网页管理面板,nps可以在服务端通过网页管理所有用户行为以及映射记录;二是它集成了多种协议,包括tcp/udp隧道,socks5以及p2p,可以满足多种需求。

做微信公众号开发、小程序开发等----> 域名代理模式

想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,----> tcp代理模式

在非内网环境下使用内网dns,或者需要通过udp访问内网机器等----> udp代理模式

在外网使用HTTP代理访问内网站点----> http代理模式

搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式

服务端安装

A 源码安装

  • 安装源码 go get -u ehang.io/nps

服务端go build cmd/nps/nps.go

客户端go build cmd/npc/npc.go

首先,需要一台拥有静态公网IP的服务器。国内推荐使用腾讯云或阿里云,国外推荐Linode以及hostus。不熟悉服务器租用流程的,可以直接在天猫搜索阿里云官方店铺向客服咨询开通流程。

服务器选购方面,建议购买Linux系统(推荐CentOS6/CentOS7),用作内网穿透的话对CPU性能、内存、以及硬盘容量都没有要求,选择最便宜的即可。网络带宽速度则取决于使用场景,可以大致参考以下表格

应用名称  |协议       |推荐服务器带宽|网络延迟(本地ping服务器)

远程桌面  tcp/udp隧道|>5mbps          <50ms

游戏开服  tcp/udp隧道|无要求          <80ms

个人云端  p2p连接    |无要求          |无要求

         tcp/udp隧道|越快越好         |无要求

游戏串流  socks5    >10mbps           <30ms

网站调试  http/https|无要求            |无要求

按自身需求购买服务器后,请从供应商处获取ssh登陆信息。Windows系统推荐下载PuTTY[官网下载|直接下载]或WinScp[官网下载|直接下载]进行ssh连接,Mac系统可直接在终端中输入指令连接

ssh -p <服务器ssh端口,默认为22> root@<服务器IP地址>

ssh连接成功后,就可以开始配置服务端了。
首先请确保防火墙开放了所有端口,检查方式如下

iptables -L -n

如果得到以下结果则证明端口已全部开放

否则可以使用以下命令关闭防火墙

CentOS6/Debian:

systemctl stop iptables

 

systemctl disable iptables

如果你使用的是其他Linux发行版,或以上命令无效,请自行搜索Linux如何关闭防火墙。
另外,如果你使用了腾讯云或阿里云的服务器,则需要前往网页控制台配置防火墙,详细情况可咨询客服或搜索腾讯云/阿里云如何开放全端口。

确保全端口开通后,可以前往GitHub页面下载内网穿透软件nps了。请选择和自己系统对应的release版本,本篇教程使用Linux系统服务器,所以选择linux_amd64_server.tar.gz。右键复制下载链接,在ssh窗口中输入以下指令下载

B release安装  https://hub.fastgit.org/ehang-io/nps/releases   下载链接

wget --no-check-cetificate <下载链接>  

下载完成后,可在ssh窗口输出"ls"查看当前目录下的文件,确认刚刚下载的压缩包是否存在

确认无误后,开始解压缩

 

mkdir nps

cd nps

tar -zxf nps.*

解压后,可以用"ls"看到目录下多出了一个nps文件夹,进入这个文件夹,并编辑配置文件

cd ./nps

vi ./conf/nps.conf

按下"i"开始编辑,编辑完成后按"Esc"退出编辑模式,在输入":wq"保存并退出。自带配置文件比较复杂仅供参考,以下为自行精简过的配置文件,可用于替换原本的配置文件。标注的地方请按自身情况修改

appname = nps

#Boot mode(dev|pro)

runmode = dev

##bridge

# 底层通信协议,默认tcp,可选用kcp

bridge_type=tcp

# 底层通信端口,默认8024,如已被占用请指定其他端口

bridge_port=8024

bridge_ip=0.0.0.0

# 当客户端以配置文件模式启动时会用到的验证密钥,可自行设置

public_vkey=<你的通信密钥>

#web网页管理界面

web_host=<服务器IP或域名>或直接使用0.0.0.0

web_username=<设置用户名>

web_password=<设置密码>

web_port = <网页面板端口>

web_ip=0.0.0.0

编辑完成并保存退出后,请使用以下命令启动nps服务

./nps start  /* 后台启动服务 */

./nps stop  /* 结束后台进程 */

./nps reload  /* 重新加载配置 */

./nps  /* 前台启动服务 */

启动后,可以访问网页管理面板(在浏览器中输入"<你服务器的IP或域名>:<网页面板端口>"),如果能打开网页并成功登陆,则说明服务端配置完成。

 

注册到系统服务(实现开机启动、守护进程)nps和npc的方式相同,nps不需要参数

# 操作命令 开始/停止/重启/配置文件重载/卸载服务/安装服务

nps start/stop/restart/reload/uninstall/install

# 服务端更新

nps-update update (请更新前停止服务)

对于linuxdarwin

  • 注册:./npc install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
  • 启动:npc start
  • 停止:npc stop
  • 如果需要更换命令内容需要先卸载./npc uninstall,再重新注

注册到服务后,日志文件位于/var/log/npc.log

对于windows,使用管理员身份运行cmd

  • 注册:npc.exe install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
  • 启动:npc.exe start
  • 停止:npc.exe stop
  • 如果需要更换命令内容需要先卸载npc.exe uninstall,再重新注

注册到服务后,日志文件windows位于当前目录下

nps执行文件移动到/usr/bin

 

conf文件夹移动到/etc/nps/

 

服务端web管理

进入web界面,公网ip:web界面端口(默认8080),密码默认为123

进入web管理界面,有详细的说明

服务端web管理页面使用https

如果web管理需要使用https,可以在配置文件nps.conf中设置web_open_ssl=true,并配置web_cert_file和web_key_file

客户端配置

首先,在内网设备中下载对应的npc客户端,下载地址与服务端下载地址相同。本教程使用Windows10(64位)设备做演示,所以下载win_amd64_client.tar.gz(32位系统请下载i386的版本)。下载完成后,放在合适的目录并解压缩。

与传统内网穿透软件不同,nps最大的特点就是可以在网页面板完成所有对客户端的配置和管理,完全无需在客户端编辑配置文件(当然,如果愿意,也可以在客户端完成所有配置而不去理会网页管理面板)。本教程将会演示如何使用网页进行配置。首先,登录管理面板"<服务端IP或域名>:<面板端口>",在左侧导航栏找到"客户端",并选择添加一个客户端。


添加完成后,可以在列表中看到客户端信息,且客户端处于offline状态(因为还未在内网设备上输入指令连接服务端)。点击左侧按钮查看详细信息,可以看到系统生成(或手动指定)的通信密钥,以及客户端连接服务端的命令。

Windows下客户端使用的命令与面板中显示的有所不同,请把"./npc"部分替换为"npc",前往存放npc客户端的目录并启动cmd,在打开的窗口中输入网页面板显示的连接指令

 

 

 

npc -server_addr=<服务端IP或域名>:8024 vkey=<验证密钥> type=tcp

如果没有报错,可以访问网页管理面板查看客户端是否变为online状态。如进入online状态,则可以添加内网穿透规则

 

客户端启动及自启命令:增加登入日志log文件

./npc -server_addr=服务端IP或域名:8024 vkey=验证密钥 type=tcp >> nps.log &

nohup ./npc -server=服务端IP或域名:8024 vkey=验证密钥 type=tcp >> nps.log &

tcp/udp隧道

使用场景

Windows远程桌面,ssh连接,vnc连接,游戏开服,内网架设dns服务器等

配置方法

以Windows远程桌面为例,其默认使用3389端口。假设局域网内有一台IP为192.168.1.100的Windows设备,那么,在同一局域网下,只要访问192.168.1.100:3389即可连接。但如果想要从外网连接,则必须添加一条tcp转发规则,把内网设备的3389端口,映射到服务端的某个端口,这里假设使用服务器的10000端口。假如服务器IP为100.1.1.68,那么,映射完成后,外网访问100.1.1.68:10000的请求会全部被转发到192.168.1.100:3389,也就是说,访问100.1.1.68:10000即可连接内网的windows设备

具体配置如下:

首先登录网页管理面板,查看并记住客户端id(例子中id是9)。选择左侧导航栏的tcp隧道,点击新增并输入参数


完成后,尝试通过 服务器IP:外网端口 连接内网windows设备,如可以成功连接,则内网穿透成功。

 

添加udp隧道的方式与tcp类似,udp可用于映射内网dns服务器,根据自身需求配置即可。

 

P2P连接

使用场景

大文件传输,如在内网架设NAS,流量不经过服务器转发

要求

目标内网设备与访问端都需要运行npc,且二者NAT类型不能同时为对称型网络

配置方法:必须在nps.conf文件中将p2p部分注释取消,启用p2p功能

首先,需要编辑内网穿透服务器的配置文件,让服务器支持p2p穿透。先通过./nps stop停止服务,打开nps/conf/nps.conf,在末尾添加以下代码

#p2p

p2p_ip=<服务器公网IP,不要填域名,不要填127.0.0.1>

p2p_port=<默认使用6000端口,可自行配置>

 注:若p2p_port设置为6000,请在防火墙开放6000~6002(额外添加2个端口)udp

请确保p2p_ip准确的填写了服务器的静态公网IP,否则会导致p2p穿透失败。编辑完成后保存并退出,使用./nps start重新启动服务。之后,前往网页管理面板添加一条p2p转发记录,用于作为被访问端

 

需要注意的是,唯一验证密钥既被作为连接密码,也被作为目标端的身份标识。如果有多条p2p记录,请保证唯一验证密钥不要重复。完成后,可以在记录下看到访问端需要输入的命令。


如果访问端为windows设备,请把"./npc"替换为"npc"。此项记录的意思是,把访问端的本地端口(默认2000,可在命令后添加"-local_port=xxx"指定;当客户端使用配置文件时,也可在npc.conf文件中增加p2p本地端口)绑定到目标内网设备的目标端口3389。

 

 

只要在访问端输入127.0.0.1:2000就能连接目标设备的3389端口。如果访问端和目标端的NAT类型都符合要求,那么二者就可以直接通信,流量不需要再走服务器转发了。反之,如果NAT类型不符合要求,npc会报告p2p穿透失败,并继续使用服务器转发流量。

访问端出现以下问题,更换被访问端的端口即可

bind: Only one usage of each socket address (protocol/network address/port) is normally permitted

值得注意的是,手机、平板等无法运行npc的设备是无法直接使用p2p的。如果想使用p2p连接,则要保证同网段下至少有一台能运行npc的设备(假设该设备内网IP为192.168.1.10),然后再用手机平板访问192.168.1.10:2000(或自定义本地端口)来访问目标设备。

服务端配置文件

/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

客户端与服务端连接方式kcptcp

public_vkey

客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式

ip_limit

是否限制ip访问,truefalse或忽略

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

nps server增强功能

使用https

方式一: 类似于nginx实现https的处理

在nps.conf配置文件中将https_proxy_port设置为443或者其他希望配置的端口,和在web中对应域名编辑中设置对应的证书路径,将https_just_proxy设置为false,然后就和http代理一样了

此外: 可以在nps.conf中设置一个默认的https配置,当遇到未在web中设置https证书的域名解析时,将自动使用默认证书,另还有一种情况就是对于某些请求的clienthello不携带sni扩展信息,nps也将自动使用默认证书

方式二: 在内网对应服务器上设置https

nps.conf中将https_just_proxy设置为true,并且打开https_proxy_port端口,然后nps将直接转发https请求到内网服务器上,由内网服务器进行https处理

nginx配合

有时候还需要在云服务器上运行nginx来保证静态文件缓存等,本代理可和nginx配合使用,在配置文件中将httpProxyPort设置为非80端口,并在nginx中配置代理,例如httpProxyPort为8010时

server {

    listen 80;

    server_name *.proxy.com;

    location / {

        proxy_set_header Host  $http_host;

        proxy_pass http://127.0.0.1:8010;

    }

}

如需使用https也可在nginx监听443端口并配置ssl,并将本代理的httpsProxyPort设置为空关闭https即可,例如httpProxyPort为8020时

server {

    listen 443;

    server_name *.proxy.com;

    ssl on;

    ssl_certificate  certificate.crt;

    ssl_certificate_key private.key;

    ssl_session_timeout 5m;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_prefer_server_ciphers on;

    location / {

        proxy_set_header Host  $http_host;

        proxy_pass http://127.0.0.1:8020;

    }

}

web使用Caddy代理

如果将web配置到Caddy代理,实现子路径访问nps,可以这样配置.

假设想通过 http://caddy_ip:caddy_port/nps 来访问后台, Caddyfile 这样配置:

caddy_ip:caddy_port/nps {

  ##server_ip 为 nps 服务器IP

  ##web_port 为 nps 后台端口

  proxy / http://server_ip:web_port/nps {

    transparent

  }

}

nps.conf 修改 web_base_url 为 /nps 即可

web_base_url=/nps

关闭代理

如需关闭http代理可在配置文件中将http_proxy_port设置为空,如需关闭https代理可在配置文件中将https_proxy_port设置为空。

流量数据持久化

服务端支持将流量数据持久化,默认情况下是关闭的,如果有需求可以设置nps.conf中的flow_store_interval参数,单位为分钟

注意: nps不会持久化通过公钥连接的客户端

系统信息显示

nps服务端支持在web上显示和统计服务器的相关信息,但默认一些统计图表是关闭的,如需开启请在nps.conf中设置system_info_display=true

自定义客户端连接密钥

web上可以自定义客户端连接的密钥,但是必须具有唯一性

关闭公钥访问

可以将nps.conf中的public_vkey设置为空或者删除

关闭web管理

可以将nps.conf中的web_port设置为空或者删除

服务端多用户登陆

如果将nps.conf中的allow_user_login设置为true,服务端web将支持多用户登陆,登陆用户名为user,默认密码为每个客户端的验证密钥,登陆后可以进入客户端编辑修改web登陆的用户名和密码,默认该功能是关闭的。

用户注册功能

nps服务端支持用户注册功能,可将nps.conf中的allow_user_register设置为true,开启后登陆页将会有有注册功能,

监听指定ip

nps支持每个隧道监听不同的服务端端口,在nps.conf中设置allow_multi_ip=true后,可在web中控制,或者npc配置文件中(可忽略,默认为0.0.0.0)

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上设置想转发的隧道或者域名然后选择转发到本地选项即可成功。

客户端配置文件

基本使用

无配置文件模式

web界面创建客户端时关闭允许客户端使用配置文件连接

 

此模式的各种配置在服务端web管理中完成,客户端除运行一条命令外无需任何其他设置

 ./npc -server=ip:port -vkey=web界面中显示的密钥

客户端更新

首先进入到客户端二进制文件目录

请首先执行npc stop或者npc.exe stop停止运行,然后

对于linux

npc-update update

对于windows

npc-update.exe update

更新完成后,执行执行npc start或者npc.exe start重新运行即可完成升级

如果无法更新成功,可以直接自行下载releases压缩包然后覆盖原有的npc二进制文件

配置文件模式

此模式使用nps的公钥或者客户端私钥验证,各种配置在客户端完成,同时服务端web也可以进行管理

 ./npc -config=npc配置文件路径

配置文件说明

示例配置文件  见源码中conf文件夹

全局配置

[common]

server_addr=server IP:port

conn_type=tcp

vkey=123                   #服务端与客户端连接密码

username=111

password=222

compress=true

crypt=true

rate_limit=10000

flow_limit=100

remark=test

max_conn=10

#pprof_addr=0.0.0.0:9999

含义

server_addr

服务端ip/域名:port

conn_type

与服务端通信模式(tcpkcp)

vkey

服务端配置文件中的密钥(web)

username

socks5http(s)密码保护用户名(可忽略)

password

socks5http(s)密码保护密码(可忽略)

compress

是否压缩传输(truefalse或忽略)

crypt

是否加密传输(truefalse或忽略)

rate_limit

速度限制,可忽略

flow_limit

流量限制,可忽略

remark

客户端备注,可忽略

max_conn

最大连接数,可忽略

pprof_addr

debug pprof ip:port

auto_reconnection

断线重连

域名代理

[common]

server_addr=server IP:port

vkey=123

[web1]

host=a.proxy.com

target_addr=127.0.0.1:8080,127.0.0.1:8082

host_change=www.proxy.com

header_set_proxy=nps

含义

web1

备注

host

域名(http

target_addr

内网目标,负载均衡时多个目标,逗号隔开

host_change

请求host修改

header_xxx

请求header修改或添加,header_proxy表示添加header proxy:nps

tcp隧道模式

[common]

server_addr=server IP:port

vkey=123

[tcp]

mode=tcp

target_addr=127.0.0.1:8080

server_port=9001

含义

mode

tcp

server_port

在服务端的代理端口

tartget_addr

内网目标

udp隧道模式

[common]

server_addr=server IP:port

vkey=123

[udp]

mode=udp

target_addr=127.0.0.1:8080

server_port=9002

含义

mode

udp

server_port

在服务端的代理端口

target_addr

内网目标

http代理模式

[common]

server_addr=server IP:port

vkey=123

[http]

mode=httpProxy

server_port=9003

含义

mode

httpProxy

server_port

在服务端的代理端口

socks5代理模式

[common]

server_addr=server IP:port

vkey=123

[socks5]

mode=socks5

server_port=9004

multi_account=multi_account.conf

含义

mode

socks5

server_port

在服务端的代理端口

multi_account

socks5多账号配置文件(可选),配置后使用basic_usernamebasic_password无法通过认证

私密代理模式

[common]

server_addr=server IP:port

vkey=123

[secret_ssh]

mode=secret

password=ssh2

target_addr=192.168.1.18:22

含义

mode

secret

password

唯一密钥

target_addr

内网目标

p2p代理模式

[common]

server_addr=server:port

vkey=123

[p2p_ssh]

mode=p2p

password=ssh2

target_addr=192.168.1.18:22

含义

mode

p2p

password

唯一密钥

target_addr

内网目标

文件访问模式

利用nps提供一个公网可访问的本地文件服务,此模式仅客户端使用配置文件模式方可启动

[common]

server_addr=server:port

vkey=123

[file]

mode=file

server_port=9100

local_path=/tmp/

strip_pre=/web/

含义

mode

file

server_port

服务端开启的端口

local_path

本地文件目录

strip_pre

前缀

对于strip_pre,访问公网ip:9100/web/相当于访问/tmp/目录

npc client增强功能

nat类型检测

 ./npc nat -stun_addr=stun.stunprotocol.org:3478

如果p2p双方都是Symmetric Nat,肯定不能成功,其他组合都有较大成功率。stun_addr可以指定stun服务器地址。

状态检查

 ./npc status -config=npc配置文件路径

重载配置文件

 ./npc restart -config=npc配置文件路径

通过代理连接nps

有时候运行npc的内网机器无法直接访问外网,此时可以可以通过socks5代理连接nps,对于配置文件方式启动,设置:

[common]

proxy_url=socks5://104.100.10.50@127.0.0.1:8024

对于无配置文件模式,加上参数

-proxy=socks5://104.100.10.50@127.0.0.1:8024

支持socks5和http两种模式

即socks5://username:password@ip:port

http://username:password@ip:port

群晖支持

可在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形式的压缩

  • 所有模式均支持数据压
  • web管理或客户端配置文件中设

加密传输

如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了ssh协议等,通过设置 配置文件,将服务端与客户端之间的通信内容加密传输,将会有效防止流量被拦截

  • nps现在默认每次启动时随机生成tls证书,用于加密传

站点保护

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

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

host修改

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

使用方法:在web管理中设

自定义header

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

404页面配置

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

流量限制

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

带宽限制

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

负载均衡

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

端口白名单

为了防止服务端上的端口被滥用,可在nps.conf中配置allow_ports限制可开启的端口,忽略或者不填表示端口不受限制,格式allow_ports=9001-9009,10001,11000-12000

端口范围映射

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

[tcp]

mode=tcp

server_port=9001-9009,10001,11000-12000

target_port=8001-8009,10002,13000-14000

逗号分隔,可单个或者范围,注意上下端口的对应关系,无法一一对应将不能成

端口范围映射到其他机器

[tcp]

mode=tcp

server_port=9001-9009,10001,11000-12000

target_port=8001-8009,10002,13000-14000

target_ip=192.168.1.18

填写target_ip后则表示映射的该地址机器的端口,忽略则便是映射本地127.0.0.1,仅范围映射时有

KCP协议支持

在网络质量非常好的情况下,例如专线,内网,可以开启略微降低延迟。如需使用可在nps.conf中修改bridge_typekcp ,设置后本代理将开启udp端口(bridge_port)

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

域名泛解析

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

URL路由

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

[web1]

host=a.proxy.com

target_addr=127.0.0.1:7001

location=/test

[web2]

host=a.proxy.com

target_addr=127.0.0.1:7002

location=/static

对于a.proxy.com/test将转发到web1,对于a.proxy.com/static将转发到web2

限制ip访问

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

使用方法: 在配置文件nps.conf中设置ip_limit=true,设置后仅通过注册的ip方可访问

ip注册

方式一:在需要访问的机器上,运行客户

./npc register -server=ip:port -vkey=公钥或客户端密钥 time=2

time为有效小时数,例如time=2,在当前时间后的两小时内,本机公网ip都可以访问nps代理.

方式二:此外npsweb登陆也可提供验证的功能,成功登陆nps web admin后将自动为登陆的ip注册两小时的允许访问权限

注意:本机公网ip并不是一成不变的,请自行注意有效期的设置,同时同一网络下,多人也可能是在公用同一个公网ip

客户端最大连接数

为防止恶意大量长连接,影响服务端程序的稳定性,可以在web或客户端配置文件中为每个客户端设置最大连接数。该功能针对socks5http正向代理域名代理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主要通信默认基于多路复用,无需开启

多路复用基于TCP滑动窗口原理设计,动态计算延迟以及带宽来算出应该往网络管道中打入的流量。 由于主要通信大多采用TCP协议,并无法探测其实时丢包情况,对于产生丢包重传的情况,采用较大的宽容度, 5分钟的等待时间,超时将会关闭当前隧道连接并重新建立,这将会抛弃当前所有的连接。 Linux上,可以通过调节内核参数来适应不同应用场景

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

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

环境变量渲染

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

在无配置文件启动模式下: 设置环境变

export NPC_SERVER_ADDR=100.1.1.68:8024

export NPC_SERVER_VKEY=xxxxx

直接执行./npc即可运

在配置文件启动模式下

[common]

server_addr={{.NPC_SERVER_ADDR}}

conn_type=tcp

vkey={{.NPC_SERVER_VKEY}}

auto_reconnection=true

[web]

host={{.NPC_WEB_HOST}}

target_addr={{.NPC_WEB_TARGET}}

在配置文件中填入相应的环境变量名称,npc将自动进行渲染配置文件替换环境变

健康检查

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

[health_check_test1]

health_check_timeout=1

health_check_max_failed=3

health_check_interval=1

health_http_url=/

health_check_type=http

health_check_target=127.0.0.1:8083,127.0.0.1:8082

[health_check_test2]

health_check_timeout=1

health_check_max_failed=3

health_check_interval=1

health_check_type=tcp

health_check_target=127.0.0.1:8083,127.0.0.1:8082

health关键词必须在开头存

第一种是http模式,也就是以get的方式请求目标+url,返回状态码为200表示成

第一种是tcp模式,也就是以tcp的方式与目标建立连接,能成功建立连接表示成

如果失败次数超过health_check_max_failednps则会移除该npc下的所有该目标,如果失败后目标重新上线,nps将自动将目标重新加入

含义

health_check_timeout

健康检查超时时间

health_check_max_failed

健康检查允许失败次数

health_check_interval

健康检查间隔

health_check_type

健康检查类型

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

默认为全输出,级别为07

对于nps

nps.conf中设置相关配置即

pprof性能分析与调试

可在服务端与客户端配置中开启pprof端口,用于性能分析与调试,注释或留空相应参数为关闭

默认为关闭状

自定义客户端超时检测断开时间

客户端与服务端间会间隔5s相互发送延迟测量包,这个时间间隔不可修改。可修改延迟测量包丢包的次数,默认为60也就是5分钟都收不到一个延迟测量回包,则会断开客户端连接。 值得注意的是需要客户端的socket关闭,才会进行重连,也就是当客户端无法收到服务端的fin包时,只有客户端自行关闭socket才行。 也就是假如服务端设置为较低值,而客户端设置较高值,而此时服务端断开连接而客户端无法收到服务端的fin包,客户端也会继续等着直到触发客户端的超时设置

nps.confnpc.conf中设置disconnect_timeout即可,客户端还可附带-disconnect_timeout=60参数启

使用示例

统一准备工作(必做)

  • 开启服务端,公网服务器ip100.1.1.68,配置文件中bridge_port8024,配置文件中web_port8080
  • 访问100.1.1.68:8080
  • 在客户端管理中创建一个客户端,记录下验证密
  • 内网客户端运行(windows使用cmd运行加.exe)

./npc -server=100.1.1.68:8024 -vkey=客户端的密钥

注意:运行服务端后,请确保能从客户端设备上正常访问配置文件中所配置的bridge_port端口,telnetnetcat这类的来检

域名解析

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

注意:域名解析模式为http反向代理,不是dns服务器,在管理web上能够轻松灵活配

假设场景

  • 有一个域名proxy.com,有一台公网机器ip100.1.1.68
  • 两个内网开发站点127.0.0.1:81127.0.0.1:82
  • 想通过(http|https://)a.proxy.com访问127.0.0.1:81,通过(http|https://)b.proxy.com访问127.0.0.1:82

使用步

  • 域名网站上,*.proxy.com解析到公网服务器100.1.1.68
  • 点击客户端的域名管理,添加两条规则规则:

1、域名:a.proxy.com,内网目标:127.0.0.1:81

2、域名:b.proxy.com,内网目标:127.0.0.1:82

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

tcp隧道

适用范围:ssh、远程桌面等tcp连接场

假设场景:想通过访问公网服务器100.1.1.688001端口,连接内网机器192.168.1.1822端口,实现ssh

使用步

  • 在客户端隧道管理中添加一条tcp隧道,填写监听的端口(8001)、内网目标ip和目标端口(192.168.1.18:22),保存
  • 访问公网服务器ip(100.1.1.68),填写的监听端口(8001),相当于访问内网ip(192.168.1.18):目标端口(22),例如:

ssh -p 8001 root@100.1.1.68

udp隧道

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

假设场景:内网有一台dns(192.168.1.18:53),在非内网环境下想使用该dns,公网服务器为100.1.1.68

使用步

  • 在客户端的隧道管理中添加一条udp隧道,填写监听的端口(53)、内网目标ip和目标端口(192.168.1.18:53),保存
  • 修改需要使用的dns地址为100.1.1.68,则相当于使用192.168.1.18作为dns服务

http代理与socks5代理的区别主要有三个方面:

一、工作层面

1. socks工作在会话层上,不要求应用程序遵循特定的操作系统平台,Socks5代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)

2. HTTP代理工作在应用层上,只允许用户通过HTTP协议访问外部网站。

二、代理速度

Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求),所以Socks代理服务器比应用层代理服务器要快得多。

三、端口

1. socks5代理默认端口是1080。

2. http代理一般端口是80、8080、3128等。

socks5代理

适用范围:在外网环境下如同使用vpn一样访问内网设备或者资

假设场景:想将公网服务器100.1.1.688003端口作为socks5代理,达到访问内网任意设备或者资源的效

使用步

  • 在客户端隧道管理中添加一条socks5代理,填写监听的端口(8003),保存
  • 在外网环境的本机配置socks5代理(例如使用proxifier进行全局代理)ip为公网服务器ip(100.1.1.68),端口为填写的监听端口(8003),即可畅享内网

注意 经过socks5代理,当收到socks5数据包时socket已经是accept状态。表现是扫描端口全open,建立连接后短时间关闭。若想同内网表现一致,建议远程连接一台设备

http正向代理

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

假设场景:想将公网服务器100.1.1.688004端口作为http代理,访问内网网

使用步

  • 在客户端隧道管理中添加一条http代理,填写监听的端口(8004),保存
  • 在外网环境的本机配置http代理,ip为公网服务器ip(100.1.1.68),端口为填写的监听端口(8004),即可访问

对于私密代理与p2p,除了统一配置的客户端和服务端,还需要一个客户端作为访问端提供一个端口来访

私密代理

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

假设场景:无需新增多的端口实现访问内网服务器192.168.1.1822

使用步

  • 在客户端中添加一条私密代理,并设置唯一密钥secrettest和内网目标192.168.1.18:22
  • 在需要连接ssh的机器上以执行命

./npc -server=100.1.1.68:8024 -vkey=vkey -type=tcp -password=secrettest -local_type=secret

如需指定本地端口可加参数-local_port=xx,默认为2000

注意: passwordweb管理上添加的唯一密钥,具体命令可查看web管理上的命令提

假设192.168.1.18用户名为root,现在执行ssh -p 2000 root@127.0.0.1即可访问ssh

p2p服务:必须在nps.conf文件中将p2p部分前的注释取消,启用p2p功能

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

假设场景

想通过访问访问端机器(也就是本机)的2000端口---->访问到内网机器 192.168.1.1822

使用步

  • nps.conf中设置p2p_ip(nps服务器ip)和p2p_port(nps服务器udp端口)

注:若p2p_port设置为6000,请在防火墙开放6000~6002(额外添加2个端口)udp

  • 在客户端中添加一条p2p代理,并设置唯一密钥p2pssh
  • 在访问端机器(本机)执行命

./npc -server=100.1.1.68:8024 -vkey=123 -password=p2pssh -target=127.0.0.1:22

如需指定本地端口可加参数-local_port=xx,默认为2000

注意: passwordweb管理上添加的唯一密钥,具体命令可查看web管理上的命令提

假设内网机器为192.168.1.18ssh用户名为root,现在在本机上执行ssh -p 2000 root@127.0.0.1即可访问机器ssh,如果是网站在浏览器访问127.0.0.1:2000端口即可

  • 4
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rudon滨海渔村

花的越多,赚得越多...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值