Ngrok - VPS搭建内网穿透

Ngrok - VPS搭建内网穿透

概述

使用内网穿透原因是公司内网和手机不在同一局域网,这样导致开发演示结果无法在手机实时查看。目前项目使用了已经开源搭建的免费ngrok服务,此文为如何在VPS上自己搭建。

根据测试,ngrok可实现多实现任意多本地端口内网穿透,可以借此公用。本例在digitaloceanubuntu- 16.0.4环境下测试正常,基本步骤如下:

官方文档

解析域名

因需要使用到公网域名,需要将域名,如本例deepui.cn解析到服务器的ip上。(需要二级域名解析)

服务器端开启

  1. vps服务器安装工具
sudo apt-get install build-essential golang mercurial git
  1. 获取ngrok源码
git clone https://github.com/inconshreveable/ngrok.git ngrok
### 请使用下面的地址,修复了无法访问的包地址
git clone https://github.com/tutumcloud/ngrok.git ngrok
cd ngrok
  1. 终端输入以下代码,生成并替换源码里默认的证书,注意域名修改为你自己的
NGROK_DOMAIN=deepui.cn

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
  1. 编译,在ngrok/bin目录下应该有 ngrok、ngrokd 两个可执行文件,其中ngrok为客户端,ngrokd为服务器端
sudo make release-server release-client
  1. 服务器端开始监听,8081为http,8082为https
sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain=deepui.cn -httpAddr=":8081" -httpsAddr=":8082"
  1. 浏览器访问8081端口,出现以下为正常:
Tunnel pub.imququ.com:8081 not found

开启客户端

  1. 客户端如为linux,直接拷贝上述生成的ngrok文件到本地执行。

    如为mac,单独在服务器端再生成一份,输出到darwin_amd64目录:

sudo GOOS=darwin GOARCH=amd64 make release-server release-client
  1. 本地创建配置文件,随意命名如 ngrok.cfg:
server_addr: imququ.com:4443
trust_host_root_certs: false
  1. 运行,指定子域、要转发的协议和端口,以及配置文件,运行客户端:
./ngrok -subdomain pub -proto=http -config=ngrok.cfg 3000
  1. 这样访问http://pub.deepui.cn:8081即可访问到本地3000端口服务
  2. 同时根据命令行返回信息,可以查看可视化管理界面。

开机自启动

可使用supervisor

名词解释

域名泛解析

泛解析,所有子域名均被解析到统一地址(除单独设置的子域名解析);

域名解析选择A记录,将主机记录改为*,即可对所有子域名有效

本地安装ngrok

ngrok-installation.md

  • Download ngrok
  • Unzip it to your Applications directory
  • Create a symlink (instructions below)
# cd into your local bin directory
cd /usr/local/bin

# create symlink
ln -s /Applications/ngrok ngrok

Using ngrok

The easiest way to use ngrok to tunnel into your localhost is if your local project is running on a specific port (e.g. not using named vhosts). You just run ngrok http [port number].

You can quickly boot up a local webserver using ruby. cd into the project's root directory and run ruby -run -e httpd . -p [port number].

相关连接

@2017-09-20 23:45