RSS订阅专注X86/ARM架构技术
博客交流QQ群693563350 赞助本站
你现在的位置:网站首页 / 建站 / 正文内容

内网穿透神器-ngrok,自建ngrok服务器

51990 建站 | 2016年08月09日

最近想用树莓派2搭建一个WEB服务器,但身处的网络环境让人堪忧,移动网络,无外网IP,而且树莓派又与无线路由相连,被囚禁与内网中的内网里,如何解救呢?花生壳?NO-IP?各种DDNS?最终都以失败告终,而且要想绑定自己的顶级域名,还得付费使用…

在V2EX中发现了一个内网穿透神器-ngrok,ngrok官方提供的服务貌似被墙掉,还好天朝的子民们不傻,自建了一个国内的ngrok服务器,原文地址:https://www.v2ex.com/t/148279,试了一下,很顺利的通过外网访问到了树莓派的WEB服务,因为只能使用作者提供的二级域名,所以想自己搭建一个服务,使用自己的域名即可。

要搭建自己的ngrok服务,需要一台VPS以及一个外网IP,本人手里闲置的VPS太多,xvmlabs的7IP VPS买来就闲置了大半年,ping了一下稳定性还不错,准备在这上面搭建。

本人选的是Ubuntu 14.04 x86的系统,CentOS的系统也尝试过,编译容易报错,解决起来相对复杂。

安装步骤

1.更新下资源列表

sudo apt-get update

2.安装build工具,Go开发环境,mercurial测试工具,以及git

sudo apt-get install build-essential golang mercurial git

3.下载ngrok资源包并进入ngrok目录

git clone https://github.com/inconshreveable/ngrok.git ngrokcd ngrok

4.生成自签名SSL证书,findhao.com替换为你自己的域名

openssl genrsa -out base.key 2048

openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=findhao.com" -out base.pem

openssl genrsa -out server.key 2048

openssl req -new -key server.key -subj "/CN=findhao.com" -out server.csr

openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

5.会生成6个文件:

base.key

base.pem

base.srl

server.crt

server.csr

server.key


6.将原始的ngrokroot.crt替换为生成的crt文件

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

7.开始编译(注意:小内存VPS编译过程中会报错,建议使用512M以上内存的VPS)

make release-server release-client

编译无报错的话,会生成bin目录,里面包含3个文件,其中ngrokd为服务端文件,ngrok为客户端文件

bin.png

因为树莓派是基于arm架构的系统,所以还得编译一份arm的ngrok文件

进入go编译器

cd /usr/share/go/src

设置编译类型

GOOS=linux GOARCH=arm CGO_ENABLED=0 ./make.bash

回到ngrok目录

cd /root/ngrok

再次编译

GOOS=linux GOARCH=arm make release-server release-client

这样bin文件夹多了linux_arm文件夹,里面就是编译好了的arm版ngrokd和ngrok

linuxarm.png

8.设置域名解析

把域名解析到VPS上,如果你只需要主机记录@和www,直接设置A记录把他们解析到VPS的IP上,如果需要很多二级域名的话,可以直接把*解析到IP上

9.服务端启动

给权限

chmod +x /root/ngrok/bin/ngrokd

启动服务,注意ngrokd的路径以及key和crt的路径,domain填写自己的域名,http及https端口按实际情况修改

/root/ngrok/bin/ngrokd -tlsKey=/root/ngrok/server.key -tlsCrt=/root/ngrok/server.crt -domain="findhao.com" -httpAddr=":80" -httpsAddr=":443"

这样就算启动成功了

ngrokd.png

10.客户端启动

将服务器端的ngrok文件(/root/ngrok/bin/linux_arm里)复制到树莓派中,我复制到了root里,同样给权限

chmod +x /root/ngrok

然后新建一个ngrok.cfg文件,编辑以下内容并保存(域名换成你自己的)

server_addr: findhao.com:4443
trust_host_root_certs: false

ngrok.png

启动连接,www替换为你要绑定的二级域名-config设置配置文件的路径,80为WEB服务端口

./ngrok -subdomain www -config=ngrok.cfg 80

成功连接ngrok服务器后会显示online

online.png

然后打开下面的地址http或者https(自签的SSL证书浏览器不信任),就可以访问树莓派的WEB内容啦

tunnel.png

注意,客户端必须使用自己编译的ngrok文件,否则就会出现bad certificate错误,这个问题之前一直困扰我,因为我使用的是官方下载的ngrok

附:设置开机自动启动ngrok服务

服务器端:

复制启动命令保存为ngrok_start文件

/root/ngrok/bin/ngrokd -tlsKey=/root/ngrok/server.key -tlsCrt=/root/ngrok/server.crt -domain="findhao.com" -httpAddr=":80" -httpsAddr=":443"

放到/etc/init.d目录下

设置文件权限:

sudo chmod 755 /etc/init.d/ngrok_start

将上述脚本放到启动脚本里:

cd /etc/init.d
sudo update-rc.d ngrok_start defaults 20

重启后就会自动启动服务了,同理可设置客户端自启动。

附卸载启动脚本方法:

cd /etc/init.d
sudo update-rc.d -f ngrok_start remove

参考文章:http://www.svenbit.com/2014/09/run-ngrok-on-your-own-server/

                 https://yongpei.wang/106.html


上一篇:百度不支持收录https网页以及XP系统不支持SNI的解决办法

下一篇:DigitalOcean:San Francisco 评测

猜你喜欢