ubuntu16.04搭建ngrok

Ngrok是一个隧道,即建立安全通道从公共端点到本地运行的网络服务,同时捕捉检查和重播所有流量的反向代理。

简单来说,他可以代理你本地的数据,并将其转发到外网。当然原理没有大变,都是找一个公网服务器做中介。此处称为服务器 A。流程如下。

  1. 本地内网主机和服务器A构建一条连接
  2. 用户访问服务器A
  3. 服务器A通过网络隧道转发到本地内网主机获取内容
  4. 服务器A将获取到的内容发送给用户
  5. 通过上面的流程,就实现了用户访问到了我们内网的内容。

linux环境为ubuntu16.04

安装依赖

1.安装go环境

注意 golang 需要 1.6 以上,否则不能编译客户端。我的主机是ubuntu16.04,所以可以使用自带的

apt-get install golang

目前默认安装的是1.6版本,但是因为后面编译失败,所以换成了1.8的

wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
sudo tar -xvf go1.8.3.linux-amd64.tar.gz
sudo mv go /usr/local

配置环境变量

vim /etc/profile
export GOPATH=/usr/local/go
export PATH=$PATH:$GOPATH/bin
export NGROK_DOMAIN="xxxx.com"

需要一台公网虚拟机和一个备案域名,本人使用的是阿里云的ECS,把域名泛解析到 VPS 上,这样能方便地使用不同子域转发不同的本地服务上面的xxxx.com是泛解析域名的后缀,比如*.xxxx.com。
使修改即时生效

source /etc/profile

2.获取Ngrok源码

git clone https://github.com/inconshreveable/ngrok.git ngrok
## 建议请使用下面的地址,修复了无法访问的包地址
git clone https://github.com/tutumcloud/ngrok.git ngrok

进入ngrok文件夹中:
生成自签名证书

sudo openssl genrsa -out base.key 2048
sudo openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
sudo 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

3.编译服务端和客户端

sudo make release-server release-client

如果一切正常,我们将会在ngrok/bin文件夹下发现有ngrok和ngrokd两个可执行文件,其中ngrokd是服务器端运行的,ngrok是linux客户端运行的。

4.启动服务端

sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="xxxx.com" -httpAddr=":8081" -httpsAddr=":8082"

注意ecs需要开启三个端口,8081,8002,4443,4443是客户端和服务端链接的端口,ecs管理控制台有一层防火墙,还有系统的一层防火墙,注意细节。如果端口比较多,可以使用默认的80和443端口。因为已经占用了所以使用8081和8082.

5.测试连接

现在可以通过http://xxxx.com:8081和http://xxxx.com:8082就可以访问到ngrok提供的转发服务

为了使用方便,建议把域名泛解析到 VPS 上,这样能方便地使用不同子域转发不同的本地服务。

可以看到这样一行提示

Tunnel xxxx.com:8081 not found  

这样子说明已经ok了,只差客户端进行连接了.

6.编译客户端

客户端有各种os,可以生成不同的客户端
32位linux客户端: GOOS=linux GOARCH=386 make release-client
64位linux客户端: GOOS=linux GOARCH=amd64 make release-client
32位windows客户端: GOOS=windows GOARCH=386 make release-client
64位windows客户端: GOOS=windows GOARCH=amd64 make release-client
32位mac平台客户端:GOOS=darwin GOARCH=386 make release-client
64位mac平台客户端:GOOS=darwin GOARCH=amd64 make release-client
ARM平台linux客户端: GOOS=linux GOARCH=arm make release-client

下面生成一个windows客户端测试

#windows
GOOS=windows GOARCH=amd64 make release-client

在这里插入图片描述
把客户端下载到本地windows
创建一个ngrok配置文件:ngrok.cfg,写入以下内容:

server_addr: "xxxx.com:4443"
 
trust_host_root_certs: false

在这里插入图片描述

7.进入到ngrok目录运行客户端:

ngrok -subdomain emeet -proto=http -config=ngrok.cfg 80

在这里插入图片描述状态为绿色链接成功,此时我是关闭了服务端,所以是红色的链接失败

8.测试

在本地80端口运行一个web项目,test接口返回success,测试访问成功。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值