准备工作:
1.一台能连接外网的服务器
这里我们使用Centos 7 64位 环境
2.一个域名解析了的域名
列如:abc.com
将一个域名或二级域名泛解析到服务器上。例如将 *.abc.com 或 *.xxx,abc.com 解析到VPS的IP。要注意,此时还需要将 abc.com 或 xxx.abc.com 的A记录设置为VPS的IP
3.需要的软件:注意 go环境下载1.4版本,会出现编译错误;git则需要下载较高版本,太低会出现下载错误 ,一般最新即可。
go环境 下载地址:http://www.golangtc.com/download
git仓库 下载地址:http://git-scm.com/downloads
ngrok git地址:https://github.com/inconshreveable/ngrok.git
搭建步骤:
- go环境安装及配置
准备go环境,我的系统是64位的centos所以我下载arm64的包
-
1、下载go的软件包
1
wget http:
//www
.golangtc.com
/static/go/1
.4.2
/go1
.4.2.linux-amd64.
tar
.gz
2、解压出来可以随便指定位置
1
tar
-C
/usr/local
-xzf go1.4.2.linux-amd64.
tar
.gz
3、go的命令需要做软连接到/usr/bin
1
ln
-s
/usr/local/go/bin/
*
/usr/bin/
- git仓库的安装
1、安装git,我安装的是2.6版本,防止会出现另一个错误,安装git所需要的依赖包
1
yum -y
install
zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget
gcc
gcc
-c+
2、下载git
1
wget https:
//www
.kernel.org
/pub/software/scm/git/git-2
.6.0.
tar
.gz
3、解压git
1
tar
zxvf git-2.6.0.
tar
.gz
4、编译git
1
2
3
4
cd
git-2.6.0
.
/configure
--prefix=
/usr/local/git
make
make
install
5、创建git的软连接
1
ln
-s
/usr/local/git/bin/
*
/usr/bin/
- ngrok安装
1.编译ngrok
1
2
3
4
5
6
7
8
cd
/usr/local/
git clone https:
//github
.com
/inconshreveable/ngrok
.git
export
GOPATH=
/usr/local/ngrok/
export
NGROK_DOMAIN=
"abc.com"
cd
ngrok
注意:abc.com: 映射出去后的外网域名(该域名要经过泛解析)
ngrok需要一个域名作为base域名,ngrok会为客户端分配base域名的子域名。例如:ngrok的base域名为 abc.com,客户端即可被分配子域名 xxx.abc.com。
使用ngrok官方服务时,base域名是ngrok.com,并且使用默认的SSL证书。现在自建ngrok服务器,所以需要重新为自己的base域名生成证书。
2.为域名生成必要的证书
1
2
3
4
5
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj
"/CN=$NGROK_DOMAIN"
-days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj
"/CN=$NGROK_DOMAIN"
-out server.csr
openssl x509 -req -
in
server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
3.在软件源代码目录下面会生成一些证书文件,我们需要把这些文件拷贝到指定位置 ,询问是否覆盖都 选择 ‘y’
1
2
3
cp
rootCA.pem assets
/client/tls/ngrokroot
.crt
cp
server.crt assets
/server/tls/snakeoil
.crt
cp
server.key assets
/server/tls/snakeoil
.key
4.如果是在大陆的服务器需要改配置文件,香港或者国外的服务器不需要
1
2
3
vim
/usr/local/ngrok/src/ngrok/log/logger
.go
修改为:log
"github.com/alecthomas/log4go"
- ngrok服务端编译
指定编译环境变量,如何确认GOOS和GOARCH,可以通过go env来查看
参数选择:GOOS:linux ,darwin(mac),windows GOARCH:amd64,i386,arm
这里我的机器环境为:linux | amd641
2
3
4
cd
/usr/local/go/src
GOOS=linux GOARCH=amd64 .
/make
.
bash
cd
/usr/local/ngrok/
GOOS=linux GOARCH=amd64
make
release-server
- ngrok客户端的编译,这里我们只举例 linux的客户端编译,其他环境需要修改GOOS,GOARCH即可
1
2
3
4
cd
/usr/local/go/src
GOOS=linux GOARCH=amd64 .
/make
.
bash
cd
/usr/local/ngrok/
GOOS=linux GOARCH=amd64
make
release-client
ngrok的使用
- 开启服务端
1
export
NGROK_DOMAIN=
"abc.com"
1
/usr/local/ngrok/bin/ngrokd
-domain=
"$NGROK_DOMAIN"
-httpAddr=
":80"
1
2
后台运行:
setsid
/usr/local/ngrok/bin/ngrokd
-domain=
"$NGROK_DOMAIN"
-httpAddr=
":80"
- 开启客户端
1. 在ngrok客户端运行文件的同级目录下新建ngrok.cfg 文件。1
2
3
4
内容:
server_addr:
"abc.com:4443"
trust_host_root_certs:
false
2.运行ngrok客户端1
2
3
4
5
6
.
/ngrok
-config=.
/ngrok
.cfg -subdomain=blog 80
setsid .
/ngrok
-config=.
/ngrok
.cfg -subdomain=
test
80
#在linux下 后台运行
* -subdomain:表示域名的前缀 列如:abc.com -subdomain=blog ------> blog.abc.com
80:需要穿透的端口号,还可以是其他端口号,如8080等