1.配置go编译环境
1.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++ build-essential mercurial
1.2 配置git
wget https://www.kernel.org/pub/software/scm/git/git-2.6.0.tar.gz
1.3 安装必要环境包☆
sudo yum install build-essential golang mercurial git
1.4 检出ngrok源代码☆
git clone https://github.com/inconshreveable/ngrok.git ~/ngrok
1.5 安装lrzsz下载上传工具☆
#该工具如何使用参考 http://blog.csdn.net/zy_zhengyang/article/details/52385887
yum -y install lrzsz
1.6 安装screen多窗户工具☆
yum install -y screen
2. 配置临时环境变量
export GOPATH=~/ngrok/ #ngrok源码根目录
export NGROK_DOMAIN="ngrok.zkaiyuan.com" #映射到该服务器隧道的域名
2.1 去到源码目录
cd ~/ngrok
3.生成https安全证书,Ngrok会使用此证书加密通讯
openssl genrsa -out rootCA.key 2048
openssl req -new -x509 -nodes -key rootCA.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -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 -days 10000 -out server.crt
3.1 将证书文件复制到指定位置
#提示是否覆盖,输入y确定
cp rootCA.pem assets/client/tls/ngrokroot.crt -i
cp server.crt assets/server/tls/snakeoil.crt -i
cp server.key assets/server/tls/snakeoil.key -i
4.编译服务器端和客户端
注:这里测试时只编译了i386的服务器端和arm的客户端,实际上可以通过改变GOOS与GOARCH来获取各个平台的客户端与服务端,GOOS可以指定为windows、linux 、 freebsd 、darwin (Mac OS X 10.5 or 10.6) 和 nacl (Chrome 的Native Client 接口) ,GOARCH可以指定为amd64 (64-bit x86) 、386 (32-bit x86) 、 和arm (32-bit ARM),可见Go语言的跨平台能力相当彪悍。
4.1服务端
#我的服务器为:linux-x86-64
export GOOS=linux
export GOARCH=386
make release-server
编译完成过后~/ngrok/bin/ngrokd即为服务端运行文件。
4.2客户端
树莓派为linux-arm架构,重新声明go env里的变量
export GOOS=linux
export GOARCH=arm
make release-client
编译完成过后~/ngrok/bin/linux_arm/ngrok即为树莓派客户端运行文件
5.部署服务端和客户端
5.1 服务端
屏幕会输出一连串日志信息,ttpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,ngrokd 还会开一个 4443 端口用来跟客户端通讯,注意设置防火墙使端口开放。
./ngrokd -domain="ngrok.zkaiyuan.com" -httpAddr=":80" -httpsAddr=":443"
或者
./ngrokd -domain="ngork.zkaiyuan.com" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443"
5.2 客户端
通过rz命令下载客户端
该目录下的ngrok
cd ~/ngrok/bin/linux_arm/
拷贝到客户端任意目录后。新建一个 ngrok.cfg 配置文件
vim ngrok.cfg
内容如下
server_addr: zkaiyuan.com:4443
trust_host_root_certs: false
运行客户端,如果提示没权限,先授权
chmod +x ngrok
#web测试
./ngrok -subdomain pi -proto=http -config=ngrok.cfg 80
#tcp转发
./ngrok -proto=tcp -config ngrok.cfg 22
如果想一次性完成多个端口转发。可以完善ngrok.cfg。特别需要注意的是配置文件为YAML语法,所有缩进都要使用空格,不能够使用tab
而且可以看出不但可以转发本机的端口,亦可以转发其它内网设备
server_addr: ngork.zkaiyuan.com:4443
trust_host_root_certs: false
tunnels:
ssh:
remote_port: 1122
proto:
tcp: 22
ss:
emote_port: 8388
proto:
tcp: 8388
ftp:
remote_port: 20
proto:
tcp: 20
ftp2:
remote_port: 21
proto:
tcp: 21
http:
subdomain: www
proto:
http: 80
https: 192.168.1.4:443
启动后,如果可以看到如下内容,说明你已经完成了
Tunnel Status reconnecting
Version 1.7/1.7
Forwarding tcp://ngork.zkaiyuan.com:38755 -> 127.0.0.1:22
Web Interface 127.0.0.1:4040
# Conn 1
Avg Conn Time 14275.98ms
到此结束。。。。正常来说就没问题了,有其他问题,自行百度