Linux搭建Ngrok服务器详细过程

本文详述了在Linux服务器上搭建Ngrok服务器的步骤,包括安装前置软件、配置Go语言环境、下载Ngrok、详细配置以及可能出现的问题与解决方案。在配置过程中,涉及到创建证书、启动服务端和客户端,并提供了针对IP地址穿透问题的解决方法。

1.安装前置软件

安装git
#安装命令
yum -y install git

2.go语言环境

1.安装go语言并解压到/usr/local/目录下,目录可以自己换别的,go语言版本也可以换高级点的

wget https://storage.googleapis.com/golang/go1.12.0.linux-amd64.tar.gz
tar -C /usr/local/ -zxvf go1.12.0.linux-amd64.tar.gz

2.配置go语言的环境变量
1)打开配置文件

vi /etc/profile

2)在最下面新增以下代码

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

3)重新加载配置文件

source /etc/profile

3)验证go是否安装成功

go version

结果显示版本信息就表示安装成功

[root@localhost bin]# go version
go version go1.12.0 linux/amd64

3.下载Ngrok

1)使用大佬已处理好依赖的ngrok文件
下载下来会有一个ngrok文件夹,里面有ngrok压缩包,此时将这个ngrok下载到/usr/中,后面解压后就没用了,可以删除这里下载的ngrok文件夹

cd /usr/
git clone https://github.com/haungjianli/ngrok

2)解压里面的ngrok压缩包
这里解压的ngrok是真正的ngrok文件

tar -C /usr/local/ -zxvf ./ngrok.tar.gz

4.详细配置

1)创建证书

使用域名和IP地址两种方式创建证书时配置有部分不同

①使用域名时

#进入ngrok目录
cd /usr/local/ngrok
#使用openssl创建证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.site" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=ngrok.site" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

②使用公网IP地址时

#进入ngrok目录
cd /usr/local/ngrok

#证书(使用IP地址时必须要配置这一行):
echo subjectAltName = IP:36.134.235.178 > extfile.cnf

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=xx.xx.xx.168" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=xx.xx.xx.168" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000 -extfile extfile.cnf

2)复制并覆盖到 assets 构建的时候自动引用

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

3) 生成服务端与客户端
根据自己服务器与客户端的操作系统选择命令。

<!--linux服务端/客户端-->
GOOS=linux GOARCH=386 make release-server (32位)
GOOS=linux GOARCH=amd64 make release-server(64位)

GOOS=linux GOARCH=386 make release-client (32位)
GOOS=linux GOARCH=amd64 make release-client(64位)

<!--Mac OS服务端/客户端-->
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-server

GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client


<!--windows服务端/客户端-->
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-server

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

4)启动服务端

#进入到bin目录
cd /usr/local/ngrok/bin
#启动(如果是域名,则把domain中的IP换成域名)
./ngrokd -domain="xx.xx.xx.168" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" 

如果需要后台启动

#后台启动命令
nohup ./ngrokd -domain="xx.xx.xx.168" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" & >/dev/null 2>&1 &

端口可以自行设置
①httpAddr是 http的端口,默认80,
②httpsAddr是 https的端口,默认443,
③tunnelAddr是 客户端连接ngrok的端口,默认设置4443

5)启动客户端

以windows为例:
把/bin/windows_amd64/ngrok.exe文件传输到本地。
然后在当前目录下新建文件ngrok.cfg,注意与ngrok.exe在相同目录下。

server_addr: "xx.xx.xx.xx:4443" 
trust_host_root_certs: false

此处xx.xx.xx.xx需要写服务端所在的IP或者域名,4443为之前设置的tunnelAddr端口

新建脚本start.bat

①直接启动(IP方式或者直接使用服务端配置的域名)

ngrok -config=ngrok.cfg -log=ngrok.log  8080  
设置proto则指定某种方式穿透
ngrok -proto=https -config=ngrok.cfg -log=ngrok.log  8080  

8080就是本地需要穿透的端口
norok.log 就是日志的日志的名称

②使用子域名方式启动

ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=xxx 8080  

-log不是必须的,可以删除-log

双击start.bat即可。

如果是以IP地址来穿透,会出现穿透后地址为 xxxxxx.36.134.235.178:80 这种情况,此时无法成功访问,解决办法看最后的问题与解决方案

5.问题与解决方案

1.使用IP地址穿透时,穿透成功的链接地址为xxxxxx.36.134.235.178这种时。

去掉随机生成的 subdomain

ngrok 客户端会自动生成一个随机子域名或者用户自定义一个,总之无论如何都会有一个域名,这就会导致 ip 域名无效, 例如http://41254wg5.36.134.235.178 -> localhost:80, 解决办法就是改源码,去掉随机生成的 subdomain。代码地址:src/ngrok/server/tunnel.go 第89 行

// src/ngrok/server/tunnel.go  #89 行
// Register for random URL
    t.url, err = tunnelRegistry.RegisterRepeat(func() string {
      return fmt.Sprintf("%s://%x.%s", protocol, rand.Int31(), vhost)
    }, t)

修改后:

return fmt.Sprintf("%s://%s", protocol, vhost)

注意: 删掉 %x. ,rand.Int31(), 以及该文件第一行引入的 math/rand,重新编译出服务端与客户端即可。这样不加 -subdomain 选项就不会有子域名。

重新生成服务端与客户端,再启动

2.生成服务端与客户端时发生错误

go get ngrok/…: malformed module path “ngrok”: missing dot in first path element
make: *** [Makefile:8: deps] Error 1

进入环境配置文件,新增配置

vi /etc/profile
export GO111MODULE=off

重新载入配置文件source /etc/profile

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值