在自己的VPS上编译部署Ngrok
由于我有一些测试服务需要从内网映射到公网,但是又不想使用其他第三方的转发服务,索性就自己编译一把Ngrok放到自己的服务器上用吧。
Ngrok是个啥?
ngrok is a reverse proxy that creates a secure tunnel from a public endpoint to a locally running web service. ngrok captures and analyzes all traffic over the tunnel for later inspection and replay.
——-github上作者对ngrok的说明
简单的来说,ngrok就是一个反向代理,可以通过公网服务器来和本地内网机器之间建立一个隧道,使得可以从外网访问内网的服务。
准备工作
1.在服务器上搭建go环境
我选择直接下载go的源码
选取适合服务器系统的go环境压缩包,由于我的VPS是Centos 7 64位,所以我下载的是1.8 amd64
1 | [root@vultr ngrok_compile]# wget http://www.golangtc.com/static/go/1.8/go1.8.linux-amd64.tar.gz |
然后需要解压一下,需要注意的是要把go解压到/usr/local,免得后面出现一些不可描述的问题。
1 | [root@vultr ngrok_compile]# tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz |
为go创建个软连接到/usr/bin,方便直接使用go命令
1 | [root@vultr ngrok_compile]# ln -s /usr/local/go/bin/* /usr/bin |
到此,go环境就搭建好了。
2.克隆ngrok的git仓库到本地
1 | [root@vultr ngrok_compile]# git clone https://github.com/inconshreveable/ngrok.git |
3.设置一些编译所需的环境变量
1 | [root@vultr ngrok]# export GOPATH=/opt/ngrok_compile/ngrok/ |
4.为域名生成证书
1 | [root@vultr ngrok_compile]# cd ngrok |
5.把生成的证书拷贝到指定的目录下
1 | [root@vultr ngrok]# cp rootCA.pem assets/client/tls/ngrokroot.crt |
6.为域名设置A记录泛解析
开始编译
1 | #先编译个Linux 64位的服务端和客户端程序 |
看一下编译好的程序
1 | [root@vultr ngrok]# ls -la bin |
运行测试
服务端:
1 | #因为我的服务上的80和443端口上运行着这个博客,所以我把http和https的端口进行了更改 |
windows客户端:
在ngrok.exe的所在目录新建一个简单的配置文件,内容如下:
1 | server_addr: "ngrok.star-chen.com:4443" #尤其注意,这里的域名需要和你生成证书所使用的域名一致 |
运行客户端程序:
1 | PS G:\> .\ngrok.exe -config .\ngrok.cfg -subdomain local 80 #subdomain为指定的子域名 |
运行的显示,status为online则表明已经建立了转发连接。
1 | ngrok |
然后访问 http://local.ngrok.star-chen.com:8080 就可以访问到我本机的xampp测试环境了。当然客户端还可以转发tcp连接,例如我的虚拟机里边的ssh:
1 | PS G:\> .\ngrok.exe -config .\ngrok.cfg -proto tcp 192.168.10.176:22 |
这样子,在外边也可以方便的ssh到内网中的虚拟机了。