IT技术互动交流平台

内网穿透神器(ngrok)服务端部署分享一台自己的ngrok服务器 多平台

作者:huhuhuo  来源:IT165收集  发布日期:2016-04-28 21:39:36

Ngrok为何物

  “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。”这是百度百科上给Ngrok给出的定义。说俗点就是内网穿透,将自己电脑上的Web页面或API等穿透内网,发布到网络上。和国内有名的“花生壳”内网版相似。

  调试API时,每次修改提交服务器会比较麻烦,而花生壳经常无缘无故丢我POST参数,稳定点的价格还不菲,无奈选择了Ngrok。但现在大陆地区,Ngrok的官方服务在非“科学上网”的环境下,无法正常访问。好在Ngrok开源,可以下载编译后将服务端部署到自己的服务器上,比较便捷与稳定,同时由于Ngrok采用go语言开发,编译后可到对应的平台运行,具有跨平台的特性。由于需要生成openssl证书,所以接下去编译的演示基于mac os平台,liunx下基本是一模一样的,编译生成的exe程序基于win386运行。

需要准备什么

  1.一个域名  几级的无所谓,我解析了一个叫ngrok的二级域名给它,同时设置了这个二级域名下*.ngrok的泛解析。

  2.一台主机  阿里云上或**云**云上的云主机都行。

  如果没有这两个,那就直接看文章最后吧。正好有一台没有用的云主机,搭建了一台自己的Ngrok服务器,可以分享给大家用于测试,但为了保证稳定,不可能分享很多,先到先得。

编译

   1.为mac安装go环境  这个简单,直接用homebrew安装,使用 ‘brew install go’一键安装,安装完后配置环境变量。

  2.在git下载Ngrok源码  懒得clone,直接去git上下载 https://github.com/inconshreveable/ngrok  下载完成后解压到工作目录。

  3.生成openssl证书  为了方便复制,先cd到刚刚的工作目录,运行下面的命令生成公钥私钥。

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj '/CN=ngrok.facebeek.cn' -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj '/CN=ngrok.facebeek.cn' -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

  其中ngrok.facebeek.cn是我绑定的二级域名。务必替换成你自己的。

  生成完成后将对应的证书复制到assets文件夹下的对应目录,替换原有的证书。如不替换,域名与证书不一致,客户端与服务端是没法正常连接的。

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.修改log下的logger.go   go编译时会下载对应依赖项,如果依赖了code.google.com下的,你懂的。这里将ngrok/src/ngrok/log/logger.go中的第四行更改为“github.com/keepeye/log4go”,如果源码中已经是github的地址,那就不用更改了。

  5.编译服务端与客户端  由于go语言的特性,在编译时直接生成机器码,所以在运行过程中并不需要go的环境。在ngrok目录下,运行一下命令分别生成对应的客户端/服务端。

#win服务端
GOOS=windows GOARCH=386 make release-server 
#win客户端
GOOS=windows GOARCH=386 make release-client
#linux服务端
GOOS=linux GOARCH=386 make release-server
#linux客户端
GOOS=linux GOARCH=386 make release-client

  生成完成后,在工作目录的bin文件夹下,产生对应的文件。以编译win平台为例,会产生“ngrok.exe”与“ngrokd.exe”这两个文件,前者客户端,后者需要运行在服务器上。

服务器端部署

  将ngrokd.exe复制到服务器上,偷懒写个bat

C:
grokd.exe -domain='ngrok.facebeek.cn' -httpAddr=':801' -httpsAddr=':802' -tunnelAddr=':4443'

  如上,将ngrokd.exe放至c盘根目录上,绑定的域名换成自己的域名,http使用801端口,https使用802端口,供客户端连接的管道端口设置为4443端口。

  运行bat,得到下图,说明运行正常。

客户端连接

  将ngrok.exe复制至客户端,创建ngrok.cfg配置文件

server_addr: 'ngrok.facebeek.cn:4443'
trust_host_root_certs: false

  将server_addr替换为对应的地址。

  偷懒再写个bat,其中指定配置文件,使用的域名前缀为test,映射本地的80端口。以我的配置为例,当用户访问test.ngrok.facebeek.cn域名时,将会显示本机80端口所显示的内容。

D:
grok
grok.exe -config=./ngrok.cfg -subdomain=test 80

  运行bat,得到下图,表示连接正常。

  连接成功后,在浏览器中输入test.facebeek.cn:801,可以正常访问。

  大体上Ngrok的服务已经可以开始使用了。

IIS的URL重写

  由于服务器上同时运行着IIS,故服务端Ngrok启动时无法使用80端口,所以在上面,我使用了801作为Ngrok服务器的http端口,但在上图中,我并没有在URL后添加801端口,因此在这里,我使用了IIS的代理功能。在调试开发微信等必须使用80端口的应用时,这一点很有必要。

  首先需要为IIS安装安装ARR,下载地址(http://www.iis.net/downloads/microsoft/application-request-routing)。

  安装完成后,开启ARR,如下图。

  创建网站,绑定信息如下,由于IIS不支持*.XXX.XXX.cn这类格式,所以为了泛解析只能绑定*。

  选择URL重写。

  添加规则,用正则表达式匹配URL,模式^(.*),表示匹配任意URL,在下方添加一条匹配条件,条件输入填写{HTTP_HOST},模式填写如下,表示后匹配“.ngrok.facebeek.cn”的域名。添加重写规则为http://{C:0}:801。如下图

   经过以上的操作,可以将80端口上的请求重写到801端口上,完成反向代理。

 最后分享台我部署好的Ngrok服务器

  由于服务器性能差、带宽小,不敢分享太多,原来想直接放出下载链接的,后来考虑到整体的稳定性,还是放弃这么粗暴的分享方式了。

  分享仅供测使用,如需使用,请将使用用途以及想要的域名前缀发送至569823161@qq.com或者微信linhanhanhan,我收到后会把客户端发给你。最好是开源项目,开源项目请附上git地址。因为域名备过案,为了不被查水表,还是谨慎点为好。

  但须知晓以下几点:

  1.我将尽力保证服务端的稳定,但不保证100%的可用性。要100%稳定,建议自己部署服务器。

  2.仅供测试使用,不要放论坛博客之类的。域名备过案,不要让我背黑锅。

  3.不要做图片、视频等大流量的操作,服务器带宽小。

  4.本意只是方便大家测试,小问题可以交流下,但不提供类似“技术支持”那种级别的服务!!!

  5.为了保证自己能用,不会分享太多,先到先得,我会根据服务器的负载调整分享的量,同样,收到客户端的朋友请不要传播客户端!!!

转载请注明出处 huhuhuo的博客园

地址:http://www.cnblogs.com/linhan/p/5440790.html 

Tag标签: 神器   服务器   平台  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规