您的位置:首页 > 其它

搭建自己的ngrok服务

2017-03-15 13:30 246 查看
1. 服务器准备 

CentOS6上试过了, 编译卡住了, 据说是Git版本过低导致, 想升级git , 谁知又有一堆问题, 索性放弃, 安装了CentOS7, 在上面部署. 
2. Go环境搭建 

go环境安装可以通过源码安装或安装EPEL扩展源后使用yum安装,由于使用yum安装的go不能进行交叉编译,不能够编译生成Windows客户端,所以推荐使用通过源码安装。 

源码安装go的详细过程如下: 

1).下载源码,可以在http://www.golangtc.com/download 上找到自己系统对应的源码。由于我的vps系统是centos的,所以下载的是:go1.7.1.Linux-amd64.tar.gz。 

2).将其解压到/usr/local目录下:
tar -C /usr/local  -xzf   go1.7.1.linux-amd64.tar.gz
1
1

注意下载适合自己操作系统的版本 

3).设置环境变量
mkdir $HOME/go
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
source  $HOME/.bashrc
1
2
3
4
5
1
2
3
4
5

4). 安装go get工具
yum install mercurial git bzr subversion
1
1

2.获取ngrok源码 

git版本需要在1.7.9.5以上,如果不符合条件需要将git版本升级。我这里的git版本是1.8.3.1。 

获取源码:
git clone https://github.com/inconshreveable/ngrok.git
1
1

3. 编译 

1). 配置环境变量
export NGROK_DOMAIN="tunnel.ngrok.me"
1
1

tunnel.ngrok.me 替换成你自己的域名。 

2). 生成自签名ssl证书
cd ngrok

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 device.key 2048

openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr

openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

cp rootCA.pem assets/client/tls/ngrokroot.crt

cp device.crt assets/server/tls/snakeoil.crt

cp device.key assets/server/tls/snakeoil.key
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

设置变量:
GOOS=linux GOARCH=amd64  #如果是32位系统,这里 GOARCH=386
1
1

生成服务端与客户端
make release-server release-client
1
1

编译之后,就会在ngrok源码的bin目录下生成两个可执行文件:ngrokd、ngrok。 

其中ngrokd就是ngrok的服务端程序,ngrok就是ngrok的客户端程序。 

由于现在生成的客户端ngrok只能在linux下运行,因此如果想要生成windows下的客户端程序,需要继续进行交叉编译。 
4. 交叉编译 

1).生成windows客户端 

上述编译过程生成的服务端和客户端都是linux下的,不能在windows下用。如果想编译生成windows客户端,需要重新配置环境并编译。 

交叉编译过程如下:
GOOS=windows GOARCH=amd64 make release-server release-client
1
1

编译后,就会在bin目录下生成windows_amd64目录,其中就包含着windows下运行的服务器和客户端程序。 

网上有文章说需要:
cd  /usr/local/go/src/

GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
1
2
3
1
2
3

我没有重新编译go, 一样生成了windows客户端, 可能我的go版本高的缘故? 

2). 编译arm客户端
sudo GOOS=linux GOARCH=arm make release-client
1
1

3).编译mac版本客户端
GOOS=darwin GOARCH=amd64 make  release-client
1
1

5.设置域名解析 

添加两条A记录:tunnel.ngrok.me和*.tunnel.ngrok.me,指向所在的Ngrok服务器ip。 
6. ngrokd服务启动与使用 

1).启动ngrokd服务端
bin/ngrokd -domain="$NGROK_DOMAIN"
1
1

运行结果如下:
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:80
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:443
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[09:40:02 HKT 2016/10/21] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
1
2
3
4
5
1
2
3
4
5

默认转发80和443端口, 监听端口是4443 

如果要改需要添加参数
-httpAddr=":8000" -httpsAddr=":44443"
1
1

$NGROK_DOMAIN是必须指定的, 不然会生成ngrok.com的二级域名, 那就用不了 

2).启动ngrok客户端 

客户端使用,拷贝刚刚生成的ngrok.exe文件到本地,创建ngrok.cfg配置文件,可以根据自己的实际情况进行配置
server_addr: "tunnel.ngrok.me:4443"
trust_host_root_certs: false
1
2
1
2

ngrok -config=ngrok.cfg -subdomain test 8080 

test是你的二级域名地址 

看到这样的信息说明你成功了
ngrok

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://test.tunnel.ngrok.me -> 127.0.0.1:80
Forwarding                    https://test.tunnel.ngrok.me -> 127.0.0.1:80
Web Interface                 127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9

如果出错了, 可以加参数看看什么原因 

-log=stdout

错误的原因有可能是证书的原因,也可能是域名的原因, 必须保持与NGROK_DOMAIN相同 

如果开了防火墙的话, 还必须开启80, 443, 4443端口

资料参考: 
http://bbear.me/shi-yong-a-li-yun-da-jian-zi-ji-de-ngrokfu-wu/ 
http://chuansong.me/n/341281851829 
https://www.sunnyos.com/article-show-48.html 
http://tonybai.com/2015/03/14/selfhost-ngrok-service/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: