2005251830@CentOS8服务器搭建ngrok服务-实现内网穿透

Author Avatar
ClueeZhuo 5月 25, 2020

1 安装 gcc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

..#安装 gcc
yum -y install gcc

yum y install gcc-c++

..#安装 golang , [下载地址](https://studygolang.com/dl go)

wget https://studygolang.com/dl/golang/go1.8.linux-amd64.tar.gz

tar -zxvf go1.8.linux-amd64.tar.gz

vi /etc/profile #文件中加上环境变量

export GOROOT=你的go解压地址

export PATH=$PATH:$GOROOT/bin

source /etc/profile #是环境生效

go version #查看go是否安装成功

2 下载ngrok

1
2
3
4
5
yum -y install git  #安装git 用于下载ngrok代码

.. #克隆代码,文件夹命名为 ngrok-server,也可以填写,默认就是ngrok

git clone https://github.com/inconshreveable/ngrok.git ngrok-server

3 ngrok配置

执行一下命令。使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。
证书生成过程需要一个NGROK_BASE_DOMAIN。 填写我们的域名地址

1
2
3
4
5
6
7
8
9
10
11
12
13
cd ngrok-server    #进入安装根目录

NGROK_DOMAIN="ngrok.xxxx.com"

openssl genrsa -out rootCA.key 2048

openssl req -new -x509 -nodes -key rootCA.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -days 10000 -out server.crt

4 经过以上步骤,证书已经生成,下面复制证书到默认读取目录下

1
2
3
4
5
6
7
8
9
10
11
..#复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt

cp rootCA.pem assets/client/tls/ngrokroot.crt

..#复制server.crt到assets/server/tls/并更名为snakeoil.crt

cp server.crt assets/server/tls/snakeoil.crt

..#复制server.key到assets/server/tls/并更名为snakeoil.key

cp server.key assets/server/tls/snakeoil.key

上面会让你提示是否覆盖,输入y即可。如果不想每次都提示,可以使用如下命令,这是一个骚操作。
cp前面加上一个\,然后加上-rf即可没有提示,直接覆盖。

1
2
3
4
5
\cp -rf rootCA.pem assets/client/tls/ngrokroot.crt

\cp -rf server.crt assets/server/tls/snakeoil.crt

\cp -rf server.key assets/server/tls/snakeoil.key

5 生成客户端和服务器端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
..#win服务端

GOOS=windows GOARCH=386 make release-server

..#win客户端

GOOS=windows GOARCH=386 make release-client

..#linux服务端

GOOS=linux GOARCH=386 make release-server

..#linux客户端

GOOS=linux GOARCH=386 make release-client

我只用到linux服务器端和win客户端,我只需要执行如下即可。
根据自己需要生成

1
2
3
4
5
6
7
..#linux服务端

GOOS=linux GOARCH=386 make release-server

..#win客户端

GOOS=windows GOARCH=386 make release-client

第一次生成需要点时间,因为golang编译需要下载一些插件。

编译后的软件在bin目录下

进入 linux_386服务器端文件夹配置启动服务器,启动linux服务端

httpAddr,httpsAddr为访问服务端端口,可以设置为80和443,访问的时候不用加端口号.

tunnelAddr为给客户端提供的连接端口默认4443可自行修改,这里改为34443

1
2
3
4
5
6
7
8
9
#./ngrokd -domain="ngrok.cluee.tech"  -httpAddr=":30080" -httpsAddr=":30443" -tunnelAddr=":34443"
server_addr: ngrok.cluee.tech:34443
trust_host_root_certs: false

tunnels:
webapi_client:
subdomain: test
proto:
http: 127.0.0.1:10101

start.bat

1
ngrok -config=ngrok.yml -log=ngrok.log start webapi_client