编译 ngrok
我的VPS是 CentOS release 6.8 (Final)
安装需要的工具:
# yum groupinstall 'Development Tools'
yum install gcc gcc-c++ make openssl-devel
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install golang
yum install mercurial git
获取 ngrok 源码:
git clone https://github.com/inconshreveable/ngrok.git ngrok
### 请使用下面的地址,修复了无法访问的包地址
git clone https://github.com/tutumcloud/ngrok.git ngrok
cd ngrok
生成并替换源码里默认的证书,注意域名修改为你自己的。(之后编译出来的服务端客户端会基于这个证书来加密通讯,保证了安全性)
NGROK_DOMAIN="imququ.com"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
cp base.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
开始编译应用程序 ngrok 和 ngrokd :
$ # linux 64 位程序,位于 ngrok/bin 目录下
$ GOOS=linux GOARCH=amd64 make release-server release-client
$ # linux 32 位程序, 位于 ngrok/bin/linux_386 目录下
$ GOOS=linux GOARCH=386 make release-server release-client
$ # windows 64 位程序, 位于 ngrok/bin/windows_amd64 目录下
$ GOOS=windows GOARCH=amd64 make release-server release-client
$ # Mac OS 64 位程序, 位于 ngrok/bin/darwin_amd64 目录下
$ GOOS=darwin GOARCH=amd64 make release-server release-client
如果出现问题,很可能是因为 git 版本老旧(老版的系统软件仓库更新不及时),可以考虑自己编译 git
服务端 ngrokd
前面生成的 ngrokd 就是服务端程序,指定端口启动(注意修改域名):
sudo ./bin/ngrokd -domain="imququ.com" -httpAddr=":8081" -httpsAddr=":8082"
到这一步,ngrok
服务已经跑起来了, 可以通过屏幕上显示的日志查看更多信息。 httpAddr
、httpsAddr
分别是 ngrok
用来转发 http
、https
服务的端口,可以随意指定。 ngrokd
还会开一个 4443
端口用来跟客户端通讯(可通过 -tunnelAddr=":xxx"
指定),如果你配置了 iptables
规则,需要放行这三个端口上的 TCP
协议。
现在,通过 https://imququ.com:8081
和 https://imququ.com:8082
就可以访问到 ngrok
提供的转发服务。为了使用方便,建议把域名泛解析到 VPS 上,这样能方便地使用不同子域转发不同的本地服务。
客户端 ngrok
配置文件:
# ngrok.cfg:
server_addr: imququ.com:4443
trust_host_root_certs: false
指定子域、要转发的协议和端口,以及配置文件,运行客户端:
./ngrok -subdomain pub -proto=http -config=ngrok.cfg 80
在 windows 下
./ngrok -subdomain pub -proto http -config ngrok.cfg 80
不出意外可以看到这样的界面,这说明已经成功连上远端服务:
现在再访问 http://pub.imququ.com:8081,访问到的已经是我本机 80 端口上的服务了。
管理界面
上面那张 ngrok 客户端运行界面截图中,有一个 Web Interface
地址,这是 ngrok
提供的监控界面。通过这个界面可以看到远端转发过来的 http
详情,包括完整的 request/response
信息,非常方便。
实际上,由于 ngrok
可以转发 TCP
,所以还有很多玩法。