大纲
- 一、 如何用一分钟实现ngrok内网穿透
- 二、 ngrok的作用
- 三、 材料
- 四、 搭建过程
- 事前准备
- 下载ngrok源码
- ssl证书
- 安装编译环境
- 编译
- 运行
- 五、 注意事项
一、 如何用一分钟实现ngrok内网穿透
安装ngrok, 开启服务, 完成。 本次分享到此结束。
二、 ngrok的作用
网络十分发达, 但是大部分网络以局域网的形式存在, 无法直接访问。 所以需要内网穿透
三、 需要用到的材料
- 一台具有公网ip的服务器
- 一个域名, 有备案最好(示例域名: tunnel.emok.top)
- 一堆依赖的工具, 包括但不限于:
- git
- gcc
- wget
四、 搭建过程
目前搭建的方案大都是 :
- 事前准备》2. 安装编译环境 》 3. 下载源码 》 4. 获取证书 》 5. 编译 》 6. 运行。
其中2-4步是可以并行进行, 不需要按顺序的。 流程图如下:
1 | graph TB |
事前准备
事前准备分为两个步骤, 一个是域名解析, 一个是依赖安装。
域名解析需要到域名服务商那里设置用于ngrok的域名的服务器地址解析, 以及该域名子域名的解析。
依赖安装是指搭建过程中需要用到的一些底层工具, 包括Git、 gcc、 wget等。
1 | # |
下载ngrok源码
下载ngrok的源码是通过Git工具到Github上下载的, 一般Linux默认有Git工具, 如果没有, 可以自己安装(安装方式不限于apt、 yum、 下载安装)。
1 | # |
或者可以下载Git安装包进行安装, 参考 这篇文章
安装完使用克隆命令将ngrok代码克隆到某个路径
1 | # |
安装结果如图:
获取SSL证书
运行ngrok服务需要ssl证书的支持, 一般用于商业服务的ssl证书都是花钱购买别的机构颁发的证书, 这里我们选择自己生成一个证书, 缺点是只能用于自己的服务, 但是对我们来说足够了。
首先需要安装生成证书所需的工具 open-ssl
1 | # |
然后为了便于管理, 我们可以新建一个目录来存放ssl证书。
1 | mkdir cert |
然后生成ssl证书
生成SSL证书时使用的域名要和准备搭载ngrok服务的域名一致。
1 | # |
生成过程中遇到 yes or no 可以直接yes, 遇到需要输入的地方也可以直接回车继续。
生成完成后会有如图的 6 个文件:
然后我们将其中的 rootCA.pem 、 server.crt 、 server.key 三个文件复制到 ngrok 的 assets 目录下, 覆盖原来的默认证书。
1 | cp rootCA.pem ngrok / assets / client / tls / ngrokroot.crt |
如果还没下载源码就先下载源码后在执行覆盖
安装编译环境
假设已经安装好依赖环境。
编译的依赖环境为Golang。
go的安装可以通过下载源码, 然后编译安装, 也可以直接下载go安装, 后者相对简单一点。
我们为了简单, 直接下载go的压缩包, 下载下来解压就可以用。
去官网(https://golang.org/dl/)下载go1.4的安装包, 以及最新版本的压缩包, 要选择kind为Archive的。 后面会解释为什么要下载两个版本。
下载后放在服务器上顺眼的地方, 然后运行安装, 基本都默认就可以。
需要说明的是, go1.4 之后的版本是需要基于go1.4 进行自编译, 所以需要安装两次go环境, 一次是安装go1.4, 第二次是安装更新的版本(一般是最新的稳定版)。
至于为什么要安装最新的go稳定版是因为go1.4会在编译ngrok的过程中出错。
安装完go后需要配置go的环境配置, 后续的编译要用到。
1 | export GOPATH = /usr/local / ngrok / |
编译
通过go语言的指令进行编译, 需要编译一个服务端和需要的客户端。 编译过程本身没有难度, 只要go环境没问题, 一般都不会报错。
需要注意一点, 编译客户端的参数要和需要运行的目标系统及其位数匹配
编译服务端
Linux 64位:
1 | # |
编译客户端
Windows 64的版本:
1 | # |
Mac 64:
1 | # |
运行
运行服务端
1 | # |
客户端配置文件格式
新建配置文件ngrok.cfg, 内容如下:
1 | # |
客户端运行指令
1 | # |
五、 注意事项 & 解答
- 编译安装golang的时候遇到以下报错:
1 | ngrok package net / http / httptrace: unrecognized |
解决: 安装go最新稳定版
- 安装最新版golang时遇到以下报错:
1 | $GOPATH must not be set to $GOROOT |
解决: 设置GOROOT
- 安装最新版golang时遇到以下报错:
1 | Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4. |
解决: 先安装1 .4 再安装最新版
- 启动客户端后访问页面提示 : tunnel not found
1 | // 如果是以下面的命令启动的,建议将 -httpsAddr 参数块与 -httpAddr 参数调换位置 |
评论加载中