centos系统下自建ngrok服务器完整教程

0 338

自建ngrok服务器(centos7)

前言

文中提到的顶级域名,二级域名,三级域名请根据实际情况替换!!!

一 前置条件

  1. 一台公网服务器(centos系统)

  2. 一个备案的域名,假设你的顶级域名为 xxx.com

  3. 服务器开放端口4443 443 80

二 准备条件

解析对应的基础域名和映射域名,所谓基础域名就是用来ngrok服务本身提供外部访问用的域名,映射域名就是你本地映射出去访问用的域名,现假设你用的基础域名为二级域名 ngrok.xxx.com,映射域名用的是三级域名test.ngrok.xxx.com

你需要将基础域名和映射域名先做DNS解析,解析规则为:

基础域名(ngrok.xxx.com)通过A记录解析到服务器ip;

映射域名(test.ngrok.xxx.com)通过CNAME的方式解析到基础域名(ngrok.xxx.com)

三 开始搭建ngrok服务器

1 安装git和go

yum install gcc -y

yum install git -y

yum install mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y

2 下载源码

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

完成后会在当前目录生成ngrok目录

3 生成证书(默认是ngrok.com,我们需要改成基础域名 ngrok.xxx.com)

首选切换至ngrok

cd ngrok  

mkdir cert

cd cert


openssl genrsa -out rootCA.key 2048

openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.xxx.com" -days 5000 -out rootCA.pem

openssl genrsa -out device.key 2048

openssl req -new -key device.key -subj "/CN=ngrok.xxx.com" -out device.csr

openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

生成证书后替换默认的证书(提示overwrite输入y)

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

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

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

4 生成服务端与客户端

切换回ngrok目录

<!--linux服务端-->
GOOS=linux GOARCH=386 make release-server
GOOS=linux GOARCH=amd64 make release-server

<!--Mac OS客户端-->
GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client

<!--windows客户端-->
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client

执行完毕后会在ngrok 下面的bin目录下生成对应的文件

5 启动服务器

./bin/ngrokd -domain="ngrok.xxx.com" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443"

以上命令可以简写 为 ./bin/ngrokd -domain="ngrok.xxx.com",因为-httpAddr 默认端口是80,-httpsAddr默认端口是443,-tunnelAddr默认端口是4443

启动完你应该看到如下信息:

[09:27:59 CST 2019/11/21] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[09:27:59 CST 2019/11/21] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:80
[09:27:59 CST 2019/11/21] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:8081
[09:27:59 CST 2019/11/21] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443

6 客户端链接

从ngrok目录下的bin目录下载对应的客户端到本地,如我是windows客户端,下载了生成的ngrok.exe到电脑上,然后在存放ngrok.exe的存放目录下新建配置文件ngrok.cfg,内容为:

server_addr: "ngrok.xxx.com:4443"  
trust_host_root_certs: false

注意 4443端口必须与启动服务器执行命令中的-tunnelAddr值一致。

然后在同级目录下新建一个startup.bat 启动脚本(此步骤可选,只是为了方便快速映射一个端口出来)

@echo on
cd %cd%
#ngrok -proto=tcp 22
#ngrok start web
ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=test 8080

7 客户端启动

命令行执行 ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=test 8080或者双击startup.bat 启动脚本

启动完成后出现如下信息说明启动成功

ngrok                                                                                                   (Ctrl+C to quit)

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://test.ngrok.xxx.com -> 127.0.0.1:8080
Forwarding                    https://test.ngrok.xxx.com -> 127.0.0.1:8080
Web Interface                 127.0.0.1:4040
# Conn                       0
Avg Conn Time                 0.00ms

8 测试

在本电脑8080端口运行一个程序,网页上输入http://test.ngrok.xxx.com 即可访问程序了。


备注:以上服务启动命令只要窗口关闭了服务就停止了,解决办法在命令前加上setsid


setsid ./bin/ngrokd -domain="ngrok.xxx.com" -httpAddr=":80" -httpsAddr=":8081" -tunnelAddr=":4443"

评论