一、简介

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. ScaleFlux CSD 2000 在携程的应用实践

    一.业界背景与现状 近些年来,有三件事实在业界同时发生:     1.  业务的发展朝着"生产"和"使用"海量增长数据的方向演进.     2.  摩尔定律 的 ...

  2. SpringCloud微服务实战——搭建企业级开发框架(三十七):微服务日志系统设计与实现

      针对业务开发人员通常面对的业务需求,我们将日志分为操作(请求)日志和系统运行日志,操作(请求)日志可以让管理员或者运营人员方便简单的在系统界面中查询追踪用户具体做了哪些操作,便于分析统计用户行为: ...

  3. [LeetCode]66.加一(Java)

    原题地址: plus-one 题目描述: 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 ...

  4. CSS代码示例-背景属性(background)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. python虚拟环境与伪静态网页

    目录 一:python虚拟环境 1.本地虚拟环境 1.创建虚拟环境 2.venv表示虚拟环境标志 3.虚拟环境下载django 4.使用虚拟环境 二:伪静态(了解) 1.什么是伪静态网页? 2.为什么 ...

  6. WPF 开发,优化 AvalonEdit 显示单行超长文本的性能。

    路遥工具箱内置了一个名为"JSON 格式化"的功能.通过该功能可以将 JSON 字符串进行美化和简化(设置缩进和取消缩进). 该功能上线后收到很多客户的反馈:大部分经由网络传输的J ...

  7. 批量自动化配置Dell服务器idrac管理口IP

    背景说明 工作中经常会遇到一次上几十台.几百台服务器的情况 每当到这个时候小伙伴们拿台笔记本和一根网线,一台服务器.一台服务器的去修改idrac IP 为了节约这个工作量,利用dell的racadm工 ...

  8. 【C# 程序集】把自己的程序集添加|卸载 到GAC 全局程序集缓存中

    添加全局程序集缓存 Global Assembly Cache Tool (Gacutil.exe) 操作环境windows10+vs2019 cmd.exe位置在 C:\Windows\System ...

  9. textbox 实现跨操作系统换行的两种写法

    每个操作系统对换坏的解释都不一样.所以写代码的时候要注意这个细节: 要基于.net跨环境的基类去写,才能跨平台. Unix系统里,每行结尾只有"<换行>",即" ...

  10. shell脚本编程练习

    转至:http://www.178linux.com/88406 1.写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态 在线的主机使用绿色 ...