Rat's

一款带Web面板的轻量级、高性能内网穿透工具:nps使用教程
说明:内网穿透工具之前已经介绍了不少了,比如Frp、lanproxy、Holer等,现在再介绍个带Web面板的穿透...
扫描右侧二维码阅读全文
16
2019/02

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

说明:内网穿透工具之前已经介绍了不少了,比如FrplanproxyHoler等,现在再介绍个带Web面板的穿透工具nps,之前叫easyProxy,只是改名了而已,该工具是一款使用go语言编写的轻量级、功能强大的内网穿透服务器。支持tcpudp流量转发,支持内网httpsocks5代理,同时支持snappy压缩(节省带宽和流量)、站点保护、加密传输、多路复用、header修改等。同时还支持web图形化管理。

截图

请输入图片描述
请输入图片描述

安装

Github地址:https://github.com/cnlh/nps

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

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

1、编译安装

提示:编译安装主要讲的Linux系统,其它系统(Win/Mac,也包括Linux)建议直接使用作者编译好的文件即可。

安装Go语言:

#Debian/Ubuntu系统
apt-get -y install golang
#创建目录并定义GOPATH环境变量指向该目录
mkdir ~/workspace
echo 'export GOPATH="$HOME/workspace"' >> ~/.bashrc
source ~/.bashrc

#CentOS/RHEL系统
yum -y install golang
#创建目录并定义GOPATH环境变量指向该目录。
mkdir ~/workspace
echo 'export GOPATH="$HOME/workspace"' >> ~/.bashrc
source ~/.bashrc

安装git

#Debian/Ubuntu系统
apt-get -y install git

#CentOS/RHEL系统
yum -y install git

安装源码:

go get github.com/cnlh/nps

编译服务端和客户端:

#进入指定目录
cd ~/workspace/src/github.com/cnlh/nps
#编译服务端
go build cmd/nps/nps.go
#编译客户端
go build cmd/npc/npc.go

编译好了后,就会在当前目录生成npcnps二进制文件了,就可以直接拿来用了。

编译的时候可能出现的问题解决方法:

#只拿一种常见的错误做例子,有时候可能会出现很多种这样的提示
lib/kcp/crypt.go:14:2: cannot find package "golang.org/x/crypto/pbkdf2" in any of:
    /usr/lib/go-1.7/src/golang.org/x/crypto/pbkdf2 (from $GOROOT)
    /root/workspace/src/golang.org/x/crypto/pbkdf2 (from $GOPATH)

#意思是缺少这种包,然后记住提示的地址,比如上面的golang.org/x/crypto/pbkdf2,有时候也会提示的github地址。

然后再使用命令go get golang.org/x/crypto/pbkdf2命令安装一下就行了。

2、直接安装
除了自己编译外,作者也直接提供了编译好的文件给你使用,文件下载地址:点击进去,然后再根据自己的系统架构下载对应的最新版服务端和客户端。

如果对于Linux服务器还是不知道怎么选择的,这里拿Vultr、搬瓦工大多数VPS为例。先使用命令getconf LONG_BIT获取系统版本,32位就选38664就选amd64,具体还是以实际情况为准。

服务端使用

这里博主使用的是Vultr Linux x64服务器,直接使用命令:

#记得复制前先将下面链接替换成当前最新版地址
cd ~
#下载并解压服务端
wget https://github.com/cnlh/nps/releases/download/v0.0.14/linux_amd64_server.tar.gz && tar zxvf linux_amd64_server.tar.gz
#编辑配置文件
cd nps
nano conf/nps.conf

配置文件参数如下:

#web管理端口
httpport
#web界面管理密码
password
#服务端客户端通信端口
bridePort
#ssl certFile绝对路径
pemPath
#ssl keyFile绝对路径
keyPath
#域名代理https代理监听端口
httpsProxyPort
#域名代理http代理监听端口
httpProxyPort
#web api免验证IP地址
authip
#客户端与服务端连接方式kcp或tcp
bridgeType

然后启动服务端:

./nps start

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

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

#如果打不开Web界面,就需要开启防火墙,一般CentOS系统出现情况最多
#Centos 6系统
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
service iptables save
service iptables restart

#CentOS 7系统
firewall-cmd --zone=public --add-port=8080/tcp --permanent 
firewall-cmd --reload

对于有些服务器,比如阿里云,谷歌云等,还需要在服务器管理面板上开放Web端口才行。

客户端使用

1、Linux系统

#比如下载的客户端文件在根目录,先进入根目录
cd ~
#启动客户端,比如服务端公网IP为1.1.1.1,服务端配置文件中tcpport为8284
./npc -server=1.1.1.1:8284 -vkey=客户端的密钥

2、Windows系统
首先按住Win+R,输入cmd进入命令窗口,然后使用命令:

#比如下载的客户端文件在D盘,先进入到D盘
cd /d d:
#启动客户端,比如服务端公网IP为1.1.1.1,服务端配置文件中tcpport为8284
npc.exe -server=1.1.1.1:8284 -vkey=客户端的密钥

至于Mac系统启动参考上面就行。

使用场景

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

1、tcp隧道模式

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

详细教程→点击查看

2、udp隧道模式

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

详细教程→点击查看

3、http代理模式

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

详细教程→点击查看

4、socks5代理模式

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

详细教程→点击查看

相关功能

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修改功能,即修改requestheader中的host字段。

  • web管理中设置

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

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

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

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

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

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

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

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

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

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

相关教程

Vultr注册就送$50,可开日本/新加坡等机房,【点击注册】。
最后修改:2019 年 02 月 16 日 05 : 19 PM

发表评论

76 条评论

  1. 嘟嘟

    感谢分享,另外问一下,这个实现原理跟holer一样不?

  2. X-osadmin

    客户端可以安装在树莓派上吗?

    1. Rat's
      @X-osadmin

      一切都是可以的

  3. 媛媛

    对比了一下这么多内网穿透软件,还是喜欢用holer

    1. 嘟嘟SAMA
      @媛媛

      holer不能多个设备啊,要申请来着

  4. 大笨兔

    改默认80端口和默认面板端口在宝塔上与网站共存成功搭建,并实现不带端口实现域名直接访问,爽啊!

  5. lionel

    麻烦您教教,刚接触Nginx不久实在不是很熟悉

    1. Rat's
      @lionel

      看教程,搭建过程中,会要你编辑配置文件,你把那个端口改成其它的应该就可以了。

      1. lionel
        @Rat's

        nps的web面板能进去了但是怎么设置客户端都是离线的这是什么问题

      2. lionel
        @Rat's

        thank找到问题在哪里了一语点醒梦中人

  6. lionel

    请问下 我的服务器内安装了lnmp环境,nps无法使用,但是卸载Nginx之后nps能正常使用,请问这是什么问题,实在不知道怎么解决了

    1. Rat's
      @lionel

      应该是80端口被nginx占用了导致的,编辑配置文件,把httpProxyPort=80修改成其它端口,重新启动看看。

  7. fghwett

    我的是学校是内网,我电脑用的路由器就是内网中的内网。服务器端搭好以后,客户端能和服务器连上,但是访问http的时候就进不去了。

    1. Rat's
      @fghwett

      看下面板添加配置什么的时候对不对

      1. fghwett
        @Rat's

        我找到问题了,网页代理是tcp不是http正向

      2. fghwett
        @Rat's

        如果正确的话是不是访问网页就不需要输入用户名和密码了。多重内网可以穿透的

  8. lanly

    debian9 环境让 nps 开机就户动怎么搞?

    1. Rat's
      @lanly

      方法很多,最简单的就是rc.local,参考这个教程,https://www.moerats.com/archives/623/,把启动命令丢进去

  9. 66666

    看配置文件这个应该是基于frp开发的

    1. Rat's
      @66666

      这个就不清楚了

  10. alinwei

    目前使用规定是搬瓦工的vps,安装的是宝塔面板,后台已经开放8080和8284端口,vps安装的是对应编译好的版本,web页面打开显示网络错误。./nps start提示:2019/03/11 22:37:18 start ok , pid: 15218 config path: /root/nps。./nps test提示:2019/03/11 22:45:52 open the 80 port error ,remark: https port,大神知道如何解决不?谢谢

    1. Rat's
      @alinwei

      初步估计是端口冲突或者其他问题,你试下这个命令:
      Centos 6:service iptables stop
      Centos 7:systemctl stop firewalld
      Ubuntu/Debian:/etc/init.d/ufw stop

      1. alinwei
        @Rat's

        [root@host nps]# service iptables stop
        iptables: Setting chains to policy ACCEPT: filter [ OK ]
        iptables: Flushing firewall rules: [ OK ]
        iptables: Unloading modules: [ OK ]

      2. alinwei
        @Rat's

        尝试了,执行service iptables stop后也不行。尴尬

        1. Rat's
          @alinwei

          这个问题我之前遇到过,貌似是端口冲突,然后忘了咋解决得了

          1. alinwei
            @Rat's

            解决了,谢谢你

            1. Rat's
              @alinwei

              可以说下方法,后以后遇到的人看看

              1. alinwei
                @Rat's

                现在nps搭建还了,博主有没有在黑群晖中利用搭建的nps进行内网穿透的教程呢?

              2. alinwei
                @Rat's

                还是端口被占用,因为我vps中放了一个网站,占用80端口的,然后只需要更改配置文件的

                HTTP proxy port, no startup if empty

                httpProxyPort=80
                将80改为其他的。
                其实执行./nps就可以看到反馈的信息,一些错误的信息都会显示。

                1. Rat's
                  @alinwei

                  我想起来了,是80的问题,我之前用宝塔也遇到这个问题,然后搞好了,时间一长就忘记是哪个端口被占用了

                  1. alinwei
                    @Rat's

                    是的,就是这个问题。

          2. alinwei
            @Rat's

            我换了8080端口也不行,哎

  11. alinwei

    发现一篇详图的文章。https://www.coldl.com/1667.html

    1. Rat's
      @alinwei

      都是采集的,这个得习惯。

      1. alinwei
        @Rat's
        该评论仅登录用户及评论双方可见
        1. alinwei
          @alinwei

          看错了,是pm

          1. Rat's
            @alinwei

            时间都是可以改的,改到十年前都行

  12. 蓝新

    不能用 到安装源码 获取的是404

    1. Rat's
      @蓝新

      你是说的编译安装?能把错误说的具体点么,或者你直接使用作者编译好的文件。

      1. 蓝新
        @Rat's

        [root@xl ~]# go get github.com/cnlh/nps

        cd .; git clone https://github.com/cnlh/nps /root/workspace/src/github.com/cnlh/nps

        error: while accessing https://github.com/cnlh/nps/info/refs

        fatal: HTTP request failed
        package github.com/cnlh/nps: exit status 128
        [root@xl ~]#

        1. Rat's
          @蓝新

          看起来像网络连接失败的缘故,你直接用编译好的吧

  13. Spirit

    装完后台默认是英文的怎么改成中文?

    1. Rat's
      @Spirit

      居然改版了,我还没注意。

  14. oldiy

    友链还有位置吗?能交换一个吗

    1. Rat's
      @oldiy

      暂时不加了

  15. 月情博客

    在么,nps架设好后,利用Proxifier 我还是无法连接到我公司的网络, 是哪里出问题了呢?

    1. Rat's
      @月情博客

      就这点信息,也知道不了啥。

  16. 海平面

    还是一如既往过来看看博客,已然成为一种习惯

    1. Rat's
      @海平面

      我现在都不怎么看自己博客了,差不多一天看一次。

      1. 沐风
        @Rat's

        Web management startup failure 本地站点绑定域名,域名解析了公网IP,原先是80端口占用,我改成了8080,我本地127.0.0.1是有站点的,直接访问域名和域名:8080都显示不了本地站点,请问这个是什么原因

      2. 海平面
        @Rat's

        再折腾下其他有趣的东西,再回来看发觉很有成就感

        1. Rat's
          @海平面

          是的,玩多了,你就会懂很多。

          1. 海平面
            @Rat's

            很赞同

  17. eshao2019

    装了bt 域名乏解析之后 添加域名代理 客户端连接正常 但是域名指向 还是bt的提示界面 http代理 方式 也是无法打开

    1. Rat's
      @eshao2019

      看是不是配置不对,你可以多看下官方的http文档,再用下反代

  18. 张尧博客

    一直用frp....主要是路由器支持 哈哈哈

    1. Rat's
      @张尧博客

      frp挺好用的,不过有web面板的还是方便些

  19. eshao2019

    编译安装时报错can't load package: package github.com/cnlh/nps: no Go files in /root/workspace/src/github.com/cnlh/nps
    直接用编译好的安装 启动正常 2019/02/18 13:09:56 start ok , pid: xxxxxx config path: /root/nps 但是web就是打不开 防火墙也开启了

    1. Rat's
      @eshao2019

      看是不是服务器面板还需要额外再开启下防火墙端口。

      1. ccc
        @Rat's

        我遇到了这个情况。但是我解决了。是因为创建的workspace文件夹没有给予写入权限导致的go无法写入。。

  20. D0_0C

    这个是我学长写的唉

    1. Rat's
      @D0_0C

      牛批。

  21. Bruce

    一直在用FRP 这个比FRP好在哪?

    1. Rat's
      @Bruce

      好处就是有面板,好管理些吧

      1. sunshinesuo
        @Rat's

        frp也有面板啊

        1. Rat's
          @sunshinesuo

          你不会指的是统计面板吧

          1. sunshinesuo
            @Rat's

            额,是这样的

  22. typecho模板

    博主用的代码块是怎么实现的?

    1. Rat's
      @typecho模板

      博客的代码高亮那块?主题自带的

      1. typecho模板
        @Rat's

        不是代码高亮,应该是关键词高亮吧,就是单个单词高亮那个

  23. uranus

    不知道这个有没有docker版本,最近迷上了docker觉得用起来方便极了
    另外推荐同样的穿透/组网软件zerotier可以一试,缺点是不开源

    1. qinkangdeid
      @uranus

      有没有对比过 zerotier是可以跑满速 frp不行 这个行吗?

    2. Rat's
      @uranus

      docker好像快有了,不过会玩的,可以自己做个docker,你说的这个,我先了解下。

  24. typecho模板

    太专业了,现阶段用不上

  25. kim

    可惜我的路由器不支持

  26. Neworld

    收藏了