月度归档:2020年04月

一款带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 install
./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

centos下go get 问题

今天在下载chromiumos 代码的时候,按照google官网的提示步骤下载的时候,

提示Unable to find remote helper for ‘http’,发现原来是git安装不完全

的问题造成的。如果是centos,用下面命令安装即可

  1. yum -y install git-core gitk git-gui 

frp源码编译及404页面.默认页面 修改教程

前言

frp 是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持 TCP、UDP、HTTP、HTTPS 等协议类型,并且 web 服务支持根据域名进行路由转发。

Github: https://github.com/fatedier/frp

当然frp作者已经提供多达20种已编译好的各种版本可以供大家使用,几乎不需要自己编译。

但是有时候我们需要自定义一些内容,这时候就需要自行编译了。

搭建GO环境

1、安装依赖

#Ubuntu
sudo apt-get install bison ed gawk gcc libc6-dev make
#CentOS
sudo yum install gcc

2、下载go支持包
各版本的下载地址 https://www.golangtc.com/static/go/,我使用的是当前最新的1.9.2版本

wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz

3、解压go包

sudo tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz

4、添加环境变量和go工作区

vim /etc/profile

在文件的底部添加以下两行:

export PATH=$PATH:/usr/local/go/bin  
export GOPATH=/usr/local/gopath

:wq 保存退出后,重新加载环境变量

source /etc/profile

至此,go环境搭建完毕。

下载编译frp

直接运行以下命令

go get github.com/fatedier/frp 
cd /usr/local/gopath/src/github.com/fatedier/frp/
make

make 编译完成后,frp里会多出一个bin目录,放着frpc和frps,对应客户端和服务端的可执行文件。服务端上只需要用到 frps,可以删掉 frpc,客户端则相反。

修改404页面

404页面在源码路径utils/vhost/resource.go文件里,
更改部分如图

请输入图片描述

404源码示例1

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>404 找不到此页面/(ㄒoㄒ)/~~</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">

<style>*{padding:0;margin:0}a{text-decoration:none}.notfoud-container .img-404{height:155px;background:url(https://www.ituku.me/images/0c87.png) center center no-repeat;-webkit-background-size:150px auto;margin-top:40px;margin-bottom:20px}.notfoud-container .notfound-p{line-height:22px;font-size:17px;padding-bottom:15px;border-bottom:1px solid #f6f6f6;text-align:center;color:#262b31}.notfoud-container .notfound-reason{color:#9ca4ac;font-size:13px;line-height:13px;text-align:left;width:210px;margin:0 auto}.notfoud-container .notfound-reason p{margin-top:13px}.notfoud-container .notfound-reason ul li{margin-top:10px;margin-left:36px}.notfoud-container .notfound-btn-container{margin:40px auto 0;text-align:center}.notfoud-container .notfound-btn-container .notfound-btn{display:inline-block;border:1px solid #ebedef;background-color:#239bf0;color:#fff;font-size:15px;border-radius:5px;text-align:center;padding:10px;line-height:16px;white-space:nowrap}</style>
</head>
<body>

    <div class="notfoud-container">
        <div class="img-404">
        </div>
        <p class="notfound-p">哎呀迷路了...</p>
        <div class="notfound-reason">
            <p>可能的原因:</p>
            <ul>
                <li>frpc没有启动成功</li>
                <li>域名不正确</li>
                <li>内网端不存在该页面</li>
                <li>我们的服务器被外星人劫持了</li>
            </ul>
        </div>
        
        <div class="notfound-reason">
            <p align="center"><a href=http://freenat.win/>免费frp内网穿透服务</a>
        </div>

    </div>

</body>

404源码示例2

<head>
<meta charset="UTF-8" http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>404-找不到此页面/(ㄒoㄒ)/~~</title>
<style type="text/css">
 
.head404{ width:196px; height:196px; margin:50px auto 0 auto; background:url(https://www.ituku.me/images/0zHK.png) no-repeat; }
 
.txtbg404{ width:499px; height:169px; margin:10px auto 0 auto; background:url(https://www.ituku.me/images/0DQE.png) no-repeat;}
 
.txtbg404 .txtbox{ width:390px; position:relative; top:30px; left:60px;color:#eee; font-size:13px;}
 
.txtbg404 .txtbox p {margin:5px 0; line-height:18px;}
 
.txtbg404 .txtbox .paddingbox { padding-top:15px;}
 
.txtbg404 .txtbox p a { color:#eee; text-decoration:none;}
 
.txtbg404 .txtbox p a:hover { color:#FC9D1D; text-decoration:underline;}
 
</style>
</head>


<body bgcolor="#494949">
 
       <div class="head404"></div>
 
       <div class="txtbg404">
 
  <div class="txtbox">
 
      <p>对不起,您请求的页面不存在、或已被删除、或暂时不可用</p>
 
      <p class="paddingbox">可能的原因:</p>
      <p>1、frpc没有启动成功;</p>
      <p>2、域名不正确;</p>
      <p>3、内网端不存在该网页;</p>
      <p>4、frp服务器被外星人劫持了。</p>
      <p> </p>
        
      <p align="center"><a href=http://freenat.win/>免费frp内网穿透服务</a>     Powered by <a href="http://agint.me/">SWORD'S BLOG</a></p>
 
    </div>
 
  </div>

</body>

你可以自行更改后再编译,就可以了

参考文章:https://bingozb.github.io/55.html

centos6 – 安装 golang 1.9

1.下载安装包,地址为:https://golang.org/dl/ , 我的操作系统为centos6,我下载的是:go1.9.2.linux-amd64.tar.gz

cd /tools
wget https://redirector.gvt1.com/edgedl/go/go1.9.2.linux-amd64.tar.gz
tar -C /usr/local -xzf /usr/local/go1.9.2.linux-amd64.tar.gz

2.写入环境变量

如果 /root/go 文件夹不存在,则新建该文件夹

vim /etc/profile ,在最后另起新行添加下面的环境变量

export GOROOT=/usr/local/go
export GOPATH=/root/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

让环境变量生效:

source /etc/profile

这样,go安装就完成了。

frp源码编译及404页面修改–文件压缩教程

前言 frp 是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持 TCP、UDP、HTTP、HTTPS 等协议类型,并且 web 服务支持根据域名进行路由转发。 当然frp作者已经提供多达20种已编译好的各种版本可以供大家使用,几乎不需要自己编译。 但是有时候我们需要自定义一些内容,这时候就需要自行编译了。 

搭建GO环境

 1、安装依赖

 #Ubuntu sudo apt-get install bison ed gawk gcc libc6-dev make 

#CentOS sudo yum install gcc 

2、下载go支持包 各版本的下载地址 https://www.golangtc.com/static/go/,我使用的是当前最新的1.9.2版本

 wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz

 3、解压go包 sudo tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz

 4、添加环境变量和go工作区 

vim /etc/profile

 在文件的底部添加以下两行:

 export PATH=$PATH:/usr/local/go/bin 

 export GOPATH=/usr/local/gopath 

:wq 保存退出后,

重新加载环境变量

 source /etc/profile 

至此,go环境搭建完毕。

5. 下载编译frp 直接运行以下命令 go get github.com/fatedier/frp 

cd /usr/local/gopath/src/github.com/fatedier/frp/ make make 

编译完成后,frp里会多出一个bin目录,放着frpc和frps,对应客户端和服务端的可执行文件。服务端上只需要用到 frps,可以删掉 frpc,客户端则相反。 

6.修改404页面 

404页面在源码路径

utils/vhost/resource.go

文件里,你可以自行更改后编译

7. 压缩Golang 编译出的可执行文件70%大小 

工具 upx 

#Ubuntu sudo apt-get install upx 

 upx frps

 例如:我编译的约 11M. 压缩后只有  3.4M.  详细教程不在说明 

8.全平台编译

go支持跨平台编译,平时我们在mac或者windows上面开发,部署服务器的时候需要编译成linux的可执行文件,可以使用命令行进行跨平台编译,但是每次敲命令有点麻烦,gogland简单配置一下也可以实现同样的功能。

打开configuration:

添加Go Application,在environment里面添 GOOS=linux;GOARCH=amd64

    $GOOS       $GOARCH

    android     arm

    darwin      386

    darwin      amd64

    darwin      arm

    darwin      arm64

    dragonfly   amd64

    freebsd     386

    freebsd     amd64

    freebsd     arm

    linux       386

    linux       amd64

    linux       arm

    linux       arm64

    linux       ppc64

    linux       ppc64le

    linux       mips

    linux       mipsle

    linux       mips64

    linux       mips64le

    netbsd      386

    netbsd      amd64

    netbsd      arm

    openbsd     386

    openbsd     amd64

    openbsd     arm

    plan9       386

    plan9       amd64

    solaris     amd64

    windows     386

    windows     amd64

——————— 

作者:zhaobisheng1 

来源:CSDN 

原文:https://blog.csdn.net/zhaobisheng1/article/details/81265310 

版权声明:本文为博主原创文章,转载请附上博文链接!

然后运行就能编译出在linux下面运行的可执行文件。

参考文章: 

https://agint.me/104.html
https://bingozb.github.io/55.html