一、简介

NPS是一款轻量级,高性能,强大功能的内网穿透代理服务器。目前支持TCP,UDP流量转发,可支持任何TCP,UDP上层协议(访问内网网站,本地支付接口调试,SSH访问,远程桌面,内网dns解析等等......),此外还支持内网http代理,内网socks5代理,p2p等,并带有功能强大的网络管理端。

源码地址:https://github.com/cnlh/nps

发布地址:https://github.com/cnlh/nps/releases

通常内网穿透工具都有服务端和客户端,安装要求如下:

  • 服务端:需要安装在一个有公网IP的服务器上,系统为Linux/Windows/Mac均可。
  • 客户端:一般安装在一个内网的VPS服务器或Windows/Mac/Linux电脑上使用。

二、服务端配置

1、修改配置文件

conf/nps.conf 如无特殊需求,无需修改。

#web管理端口
web_port
#web界面管理密码
web_password
#服务端客户端通信端口
bridge_port
#ssl certFile绝对路径
https_default_cert_file
#ssl keyFile绝对路径
https_default_key_file
#域名代理https代理监听端口
https_proxy_port
#域名代理http代理监听端口
http_proxy_port
#客户端与服务端连接方式kcp或tcp
bridge_type

2、nps server启动

nps.exe start
#重启/停止服务端
nps.exe stop|restart

服务端运行nps test,无报错后nps start启动服务端。

然后打开地址http://ip:8080访问管理界面,具体端口以自己修改的为准,再使用密码登录进去,默认用户名admin,默认密码为123。

3、nps server添加client

随便填就行,client config文件用得到,socks5、http代理时候需要用到basic认证帐号密码。

client状态:

得到客户端启动命令:

./npc.exe -server=192.168.91.1:8024 -vkey=adminkey -type=tcp

192.168.91.1为我服务器端的IP

三、客户端配置

1、Linux系统

#启动客户端,比如服务端公网IP为192.168.91.1,服务端配置文件中tcpport为8024

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

2、Windows系统

#启动客户端,比如服务端公网IP为192.168.91.1,服务端配置文件中tcpport为8024

npc.exe -server=192.168.91.1:8024 -vkey=客户端的密钥

四、使用场景

关于使用场景,Github文档写的很清楚了,这里大概的说下。

1、tcp隧道模式

适用:想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,或者做微信公众号开发、小程序开发等。

详细教程→点击查看

2、udp隧道模式

适用:在非内网环境下使用内网dns,或者需要通过udp访问内网机器等。

详细教程→点击查看

3、http代理模式

适用:在外网使用HTTP代理访问内网站点。

详细教程→点击查看

4、socks5代理模式

适用:搭建一个内网穿透55,在外网如同使用内网v皮n一样访问内网资源或者设备。

详细教程→点击查看

五、使用测试

1、TCP隧道

两种配置方式:server web配置和client config文件配置。其一即可。

(1)、server web配置

点击tunnel创建隧道

增加tcp隧道:

隧道建立后,连接server ip 192.168.91.1的7000端口,即连接到内网192.168.91.149的3389端口。

(2)、client config文件配置

config文件在nps client启动时加载即可。

[common] 
server_addr=x.x.x.x:8024 
conn_type=tcp 
vkey=adminkey 
auto_reconnection=true 
crypt=true 
compress=true 
[tcp] 
mode=tcp 
target_addr=192.168.91.149:3389 
server_port=7000

client 的config文件无法重载,故,只能启动时候加载上所有配置,不建议用config文件方式进行隧道配置,不灵活,推荐使用server web配置方式。

2、UDP隧道

UDP隧道配置和TCP过程一样,mode改成UDP即可。

3、socks5内网代理

两种配置方式:server web配置和client config文件配置。其一即可。

(1)、server web配置

增加socks5:

代理设置完毕后,连接server ip 192.168.91.1的9000端口即可代理到内网中。

在nps server添加client时,设置了basic权限认证admink/admink,部分浏览器插件如SwitchyOmega不支持s5的basic认证,建议使用proxychains或者Proxifier进行代理。

proxychains配置:

socks5 x.x.x.x 9000 admink admink

(2)、client config文件配置

config文件在nps client启动时加载即可。

[common] 
server_addr=x.x.x.x:8024 
conn_type=tcp 
vkey=adminkey 
auto_reconnection=true 
basic_username=admink 
basic_password=admink 
crypt=true 
compress=true 
[socks5] 
mode=socks5 
server_port=9000

client 的config文件无法重载,故,只能启动时候加载上所有配置,不建议用config文件方式进行socks5代理配置,不灵活,推荐使用server web配置方式。

4、http内网代理

http内网代理和socks5过程一样,mode改成httpProxy即可。

5、内网文件访问服务

内网文件访问配置只能在client config中进行。

config文件在nps client启动时加载即可。

[common] 
server_addr=x.x.x.x:8024 
conn_type=tcp 
vkey=adminkey 
auto_reconnection=true 
basic_username=admink 
basic_password=admink 
crypt=truecompress=true 
[file]mode=file 
server_port=8888 
local_path=C:\\ 
strip_pre=/fileservice/

local_path配置内网机要设置文件服务的目录。

server_port配置一个server ip上的端口。

strip_pre配置访问文件服务的path。

启动

npc.exe -config=npc.conf

成功启动:

浏览器中访问:http://x.x.x.x:8888/fileservice/

目前只能做文件访问,还做不到文件管理。

六、相关功能

1、数据压缩支持

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

  • 所有模式均支持数据压缩,可以与加密同时使用
  • 开启此功能会增加cpu和内存消耗
  • 在server端加上参数-compress=snappy(或在web管理中设置)

2、加密传输

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

  • 开启此功能会增加cpu和内存消耗
  • 在server端加上参数-crypt=true(或在web管理中设置)

3、站点保护

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

  • web管理中可配置

4、host修改

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

  • 在web管理中设置

5、自定义header

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

6、404页面配置

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

7、流量限制

支持客户端级流量限制,当该客户端入口流量与出口流量达到设定的总量后会拒绝服务,域名代理会返回404页面,其他会拒绝连接。

8、带宽限制

支持客户端级带宽限制,带宽计算方式为入口和出口总和,权重均衡。

9、负载均衡

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

10、守护进程

本代理支持守护进程,使用示例如下,服务端客户端所有模式通用,支持linux、darwin、windows。

./(nps|npc) start|stop|restart|status 若有其他参数可加其他参数 (nps|npc).exe start|stop|restart|status 若有其他参数可加其他参数

11、KCP协议支持

KCP是一个快速可靠协议,能以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,在弱网环境下对性能能有一定的提升。可在app.conf中修改bridgeType为kcp。

  • 当服务端为kcp时,客户端连接时也需要加上参数-type=kcp。

该工具很强大,更多的使用可以自行研究,如果有人知道Frp管理面板的话,可以给博主提供下。

七、防御方案

  1. 加强内网攻击检测
  2. 部署apt设备和蜜罐设备
  3. 捕捉内网攻击行为

参考文章

https://mp.weixin.qq.com/s/NTBd8AI92yG4Au7W5W9Ktw

https://blog.csdn.net/superDE009/article/details/99700179

内网穿透工具--NPS的更多相关文章

  1. 一款带Web面板的轻量级、高性能内网穿透工具:nps使用教程

    说明:内网穿透工具之前已经介绍了不少了,比如Frp.lanproxy.Holer等,现在再介绍个带Web面板的穿透工具nps,之前叫easyProxy,只是改名了而已,该工具是一款使用go语言编写的轻 ...

  2. 钉钉内网穿透工具在windows的使用。

    钉钉内网穿透工具在windows环境下使用 1.WIN+R,然后cmd,调出dos控制台 2.进入内网穿透程序ding.exe所在目录 3.执行 ./ding.exe -config=ding.cfg ...

  3. 分享一个内网穿透工具frp

    首先简单介绍一下内网穿透: 内网穿透:通过公网,访问局域网里的IP地址与端口,这需要将局域网里的电脑端口映射到公网的端口上:这就需要用到反向代理,即在公网服务器上必须运行一个服务程序,然后在局域网中需 ...

  4. 内网穿透工具--frp

    对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题. 今天给大家介绍一款好用内网穿透工具 FRP,FRP 全名:Fast Reverse Proxy.FRP 是一个使用 ...

  5. 【代理】内网穿透工具 frp&frps

    frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发. ### frp 的作 ...

  6. rein 多平台支持的超便携端口转发与内网穿透工具

    介绍 本程序主要用于进行反向代理IP地址和端口,功能类似于 nginx 的 stream 模式和rinetd 的功能:在(1.0.5)版本开始,rein支持内网穿透,这一功能类似于frp 和ngrok ...

  7. windows(Linux)创建”内网穿透“工具(通过自定义域名访问部署于内网的 web 服务,可以用于调试微信支付,支付宝支付,微信公众号等开发项目)

    此方法需要自有服务器和域名,如果没有这些的开发者, 可以参考钉钉提供的内网穿透方式:https://www.cnblogs.com/pxblog/p/13862376.html 一.准备工作 1.域名 ...

  8. cpolar——安全的内网穿透工具

    什么是cpolar? cpolar是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务. 它能用在哪些场景? 微信公众号开发,实时断点调试微信消息 ...

  9. 使用NATAPP内网穿透工具

    准备资料 netapp客户端 百度云下载: 官网下载:https://natapp.cn/#download 按照自己的需求进行下载 可以访问到本地的web服务 下载后解压,获得natapp_wind ...

随机推荐

  1. postman python疑难

    例子1:postman请求时会将默认的headers的content-type替换成Content-Type,而直接使用python的request则不行,服务器端就会接收到错误的Content-Ty ...

  2. vue 定义全局函数和变量

    背景 最近我在整一个网站,介绍一些有意思的网站和实用工具的网站并且把他们收集起来,网站刚建有些不成熟希望给点意见 我用的是前端框架的vue, 但是我没有打包,直接甩到服务器上了, 不想扯了, 步骤 1 ...

  3. Solution -「LOJ #138」「模板」类欧几里得算法

    \(\mathcal{Description}\)   Link.   \(T\) 组询问,每次给出 \(n,a,b,c,k_1,k_2\),求 \[\sum_{x=0}^nx^{k_1}\left\ ...

  4. LNK善意利用

    lnk   lnk在Windows平台下是快捷方式,可以指向其他目录下的文件,并且可以传递参数.现在有些恶意活动会恶意利用lnk,执行恶意代码.   关于lnk的格式,可以使用010 editor的模 ...

  5. 《深度探索C++对象模型》第二章 | 构造函数语意学

    默认构造函数的构建操作 默认构造函数在需要的时候被编译器合成出来.这里"在需要的时候"指的是编译器需要的时候. 带有默认构造函数的成员对象 如果一个类没有任何构造函数,但是它包含一 ...

  6. 使用Jitpack发布开源Java库

    原文:使用Jitpack发布开源Java库 | Stars-One的杂货小窝 很久之前也写过一篇使用Jitpack发布Android开源库的文章,详见Android开发--发布第三方库到JitPack ...

  7. .netrar最不安全几个问题总结

    任何有经历的.NET开发人员都知道,即使.NET应用程序具有废物收回器,内存走漏一直会发作. 并不是说废物收回器有bug,而是咱们有多种办法能够(轻松地)导致保管语言的内存走漏. 内存走漏是一个偷偷摸 ...

  8. ssh 连接出现expecting SSH2_MSG_KEX_ECDH_REPLY失败解决

    问题描述: ssh连接通过ipsec后连接卡住:ssh -vvv显示: echo "1420" > /sys/class/net/eth0/mtu #把mtu值设置一下默认是 ...

  9. IDEA使用JDBC链接MySql(java编程)

    1.在Maven的pom.xml文件中引入MySql的驱动 <dependency> <groupId>mysql</groupId> <artifactId ...

  10. vue--vue-router 组件映射到路由

    前言 地址栏路由的发展经历了后端路由配置阶段.前后端分离阶段.直至单页面富应用阶段.本文来总结一下 vue-router 的相关知识点和用法. 正文 1.什么是 vue-router 路由 路由就是S ...