Ngrok 服务搭建与客户端编译
今天朋友叫我帮他搭建个ngrok,我自己也是个喜欢折腾的人,所以就应承下了。用了2小时左右搭建成功,中间查看各种资料,都太乱,太不利于大家搭建。所以我准备写一个简单明了的,方便大家参考。中间的踩的坑我就不讲了,直接把成功经验分享给大家。
首先
主要有几个步骤
1.准备材料
1.一台有公网IP的主机,或者vps等(Linux,如果Windows这篇文章仅供参考)
2.一个域名
3.git,安装。
apt install git
4.Golang 最新版 下载到服务器,国内 http://www.golangtc.com/download,国外就是官网。
wget http://www.golangtc.com/static/go/1.7.3/go1.7.3.linux-amd64.tar.gz
5.ngrok 源码,去github下载,或者用git拉取,地址(https://github.com/inconshreveable/ngrok)
2.配置环境
1.配置 A 记录指向你的主机IP,类似 * tunnel.yuming.com (我没法截图,打开域名配置你自己就知道怎么做了)。
2.配置 Golang
tar -xzvf go1.7.3.linux-amd64.tar.gz 解压Golang文件
mv ./go/ /usr/local/ 移动go文件夹到 /usr/local/ 文件夹
mkdir gopath 在用户目录下创建 gopath 用的目录
vim .mypath 在用户目录新建文件,存放go的环境信息
export PATH=$PATH:/usr/local/go/bin
export GOPATH=~/gopath
export GOROOT=/usr/local/go
export GOBIN=$GOPATH/bin
如果你是bash 就直接在 ~/.bashrc 里面加一句 source ~/.mypath,其他的自己看吧。
然后执行 source .mypath 把环境变量添加进来
3.配置ngrok
如果是git拉取的就直接 mv ./ngrok/ ~/gopath/src/ 把ngrok下的所有文件移动到 gopath 下
其他的也类似,最后效果如下图:(没有bin,和sslkey)
4.配置SSL证书
建议在 assets 文件夹中执行,我在sshkey里面执行的,最后文件移动的目录层级很多。
把其中的域名替换成你自己的域名就好
$ openssl genrsa -out rootCA.key 2048
$ openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=tunnel.yuming.com" -days 5000 -out rootCA.pem
$ openssl genrsa -out device.key 2048
$ openssl req -new -key device.key -subj "/CN=tunnel.yuming.com" -out device.csr
$ openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
执行完后目录下有六个文件:
device.crt device.csr device.key rootCA.key rootCA.pem rootCA.srl
拷贝文件
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
3.编译程序
到gopath 目录下 执行 make release-server replease-client
执行成功后 在gopath/bin 目录下会有 ngrok(Linux客户端) 和ngrokd(服务端)
执行 unset GOBIN 删除 GOBIN 变量,否则交叉编译报错
执行 GOOS=windows GOARCH=386 make release-client 交叉编译Windows
执行 GOOS=darwin GOARCH=amd64 make release-client 交叉编译 Mac
后台启动 ngrok 服务
setsid ./ngrokd -domain="tunnel.yuming.com" -httpAddr=":80" -httpsAddr=":443" -log ./access.log
4.下载使用
使用下载工具下载客户端到本地,我是mac 我用的scp
scp root@ip:~/gopath/bin/darwin_amd64/ngrok ./ 回车后输入密码开始下载
vim ngrok.cfg 输入
server_addr: "tunnel.yuming.com:443"
trust_host_root_certs: false
保存退出(wq)
./ngrok -config=ngrok.cfg -subdomain=test ip:8000(ip,端口随意你自己定)
test 就是客户端想要绑定的域名,连接成功后截图:
我的是最新版本,不知道为什么没有 web interface 但是 本地 http://localhost:4040/http/in 可以使用然后 使用 test.tunnel.yuming.com 访问,展示成功。
5.庆祝成功
点赞。
吐槽一下,简书的编辑功能太难用了。(字数挺喜庆)。