真是让人头皮发麻

ngrok 不好用,改用 frp

一、准备工作

首先得有个域名,和一台外网服务器

建立两个A记录,把域名解析到服务器上,用来关联ngrok服务。

比如我的域名是:ailitonia.com,那么建立 ngrok.ailitonia.com 和 *.ngrok.ailitonia.com 解析到vps服务器上。

二、搭建ngrok服务

1.安装go语言环境

ngrok是基于go语言开发的,所以需要先安装go语言开发环境,CentOS可以使用yum安装:

yum install golang

 

安装完成之后,执行 go version 看到如下信息,证明安装成功:

$ go version
$ go1.7.3 linux/amd64

 

安装好后,需设置go环境变量,在 ~/.bash_profile 或 ~/.zshrc 文件添加如下代码:

export GOPATH=$HOME/go
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$GOPATH/bin

 

保存后,重新加载配置文件:

source ~/.bash_profile

 

执行完成后,echo $GOPATH 可查看go路径,或通过 go env 查看是否配置生效。

2.安装git

直接yum install了事:

yum -y install git

 

系统CentOS 7 x64,默认安装版本为1.8.3.1,后续操作无问题,直接跳过网上其他教程的编译安装环节。

3.下载ngrok源码

新建一个目录,并clone一份源码

mkdir ~/go
cd ~/go
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=~/go/ngrok

 

4.生成自签名证书

使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自己建立ngrok服务,需要我们生成自己的证书,并提供携带该证书的ngrok客户端。

证书生成过程需要有自己的一个基础域名,官网随机生成的地址,如:693c358d.ngrok.com,基础域名就是ngrok.com。而在上文中提到的二级域名 ngrok.ailitonia.com 就是用来作为这次要提供的基础域名。如果你的域名是 abc.com,那么域名基础域名可以设置为 ngrok.abc.com。

以我的基础域名为例(注意替换成自己的域名),生成证书过程如下:

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.ailitonia.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.ailitonia.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

 

执行完成以上命令后,在ngrok目录下,会新生成6个文件

device.crt
device.csr
device.key
rootCA.key
rootCA.pem
rootCA.srl

 

我们在编译可执行文件之前,需要把生成的证书分别替换到 assets/client/tls和assets/server/tls中,这两个目录分别存放着ngrok和ngrokd的默认证书。

cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key

 

5.编译ngrok

首先需要知道,ngrokd 为服务端的执行文件,ngrok为客户端的执行文件。

接下来我们来编译ngrokd(服务端),在ngrok目录下,执行如下命令:

make release-server

 

编译过程需要等待一会,因为需要通过git安装相关依赖包。

然后编译客户端。

由于客户端的平台版本较多,我们需要交叉编译来选择生成的平台。
以windows、arm、linux版本编译,如下:

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

 

不同平台使用不同的 GOOS 和 GOARCH,GOOS为go编译出来的操作系统 (windows,linux,darwin),GOARCH, 对应的构架 (386,amd64,arm)

Linux 平台 32 位系统:GOOS=linux GOARCH=386
Linux 平台 64 位系统:GOOS=linux GOARCH=amd64

Windows 平台 32 位系统:GOOS=windows GOARCH=386
Windows 平台 64 位系统:GOOS=windows GOARCH=amd64

MAC 平台 32 位系统:GOOS=darwin GOARCH=386
MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64

ARM 平台:GOOS=linux GOARCH=arm

 

通过上面的步骤,将生成所有客户端文件,客户端文件放在对于的文件夹中,如windows 64位的为:windows_amd64,linux客户端在bin目录下的ngrok文件。当然,也可以简单的使用$ make release-client进行编译成默认的ngrok客户端文件

6.启动ngrok服务器

将 bin/ngrokd 放入环境变量中,启动命令:

ngrokd -domain="ngrok.ailitonia.com" -httpAddr=":8088" -httpsAddr=":8089"

 

其中,-domain为你的ngrok服务域名,-httpAddr为http服务端口地址,访问形式为:xxx.ngrok.ailitonia.com:8088,也可设置为80默认端口,-httpsAddr为https服务,同上。

ngrokd启动后,退出命令行即关闭服务。如果想要在后台运行,则执行:

nohup ngrokd -domain="ngrok.ailitonia.com" -httpAddr=":8000" &

 

注意末尾需要有 & 号,详细搜索 nohup 了解。

关闭服务只需通过:

ps -A	#找到PID,执行关闭
kill xxxid

 

三、启动客户端

由于在准备工作中,已经把 ngrok.ailitonia.com 的域名解析到服务器上,接下启动客户端测试是否可用。

1.建立配置文件

新建配置文件ngrok_config.cfg:

server_addr: “ngrok.ailitonia.com:4443"
trust_host_root_certs: false

 

server_addr端口默认4443,可通过ngrokd服务端启动修改端口

2.运行客户端

运行客户端,暴露本地80端口站点:

ngrok -config=./ngrok_config.cfg -subdomain testpage 80

 

3.访问页面

浏览器中输入:testpage.ngrok.ailitonia.com,就能访问本地80端口的站点内容。

浏览器输入:127.0.0.1:4040 查看页面请求情况。

至此,搭建成功。

 

 

 

参考:morongsaotu.iobbear.mexicheng412


本文被阅读了:3,038次

作者头像
关于  Ailitonia

正因站在了巨人的肩膀上,才越发觉得自己渺小。不求成为巨人,但求与其同行。 把自己所见所闻,记录下来。

→查看所有由Ailitonia发布的文章