前言

ngrok是一个内网穿透的解决方案,它可以使你的本地网络暴露在公网,就是不局限于局域网进行访问,ngrok分为服务端和客户端,需要将服务端部署到现有公网服务器,客户端在本地运行即可

参考文章:
https://blog.csdn.net/h15766509632/article/details/83106075
https://blog.mazey.net/2039.html


一、安装环境

1、安装相关依赖

yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ unzip

2、安装git

#安装命令
yum -y install git

解决国内git下载慢的问题

#配置 host文件
vim /etc/hosts

#在最下面添加下面两行代码
140.82.114.4 github.com
199.232.69.194 github.global.ssl.fastly.net

重启服务

reboot

3、安装go

#下载go源码包
wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
#解压到/usr/local/
tar -C /usr/local/ -zxf go1.4.2.linux-amd64.tar.gz
#删除资源吗
rm -rf go1.4.2.linux-amd64.tar.gz

进行下面的环境配置

#打开配置文件
vim /etc/profile

#在最下面添加下面两行代码
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

#保存后退出使用下面命令重新加载配置
source /etc/profile

二、下载项目

1、下载源码

ngrok下载:https://pan.baidu.com/s/1i5ckSdR ;zip解压放到/usr/local/ngrok下

2、生成证书

#进入到 ngrok 目录
cd /usr/local/ngrok
#创建证书目录
mkdir cert 
#进如创建好的目录
cd cert
#在该目录输入下面两行命令配置
export GOPATH=/usr/local/ngrok/
export NGROK_DOMAIN="xxx.com(你的域名)"
#开始生成证书
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -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 -out server.crt -days 5000

复制证书到指定目录下替换 每次复制需要输入y进行确认

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

3、编译

<!--服务端-->
cd /usr/local/go/src
GOOS=linux GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=linux GOARCH=amd64 make release-server

<!--客户端-->
cd /usr/local/go/src
GOOS=windows GOARCH=amd64 ./make.bash
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client

编译完以后会在ngrok的目录下生成bin目录,所有的文件都在bin目录下生成

三、启动运行

1、启动服务端

#进入到bin目录
cd /usr/local/ngrok/bin
#使用 nohup 运行
nohup ./ngrokd -domain="xxx.com(你的域名)" > ./ngrok.log 2>&1 &
#查看控制台
tail -f ./ngrok.log

端口设置:
-httpAddr=“:80” http服务的访问端口 默认80
-httpsAddr=“:443” https服务的访问端口 默认443
-tunnelAddr=“:4443” 客户端连接服务端的端口 默认4443

nohup ./ngrokd -domain="xxx.com(你的域名)" -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443 > ./ngrok.log 2>&1 &

2、启动客户端

在本地创建 ngrok 文件夹,将生成出来的 exe 文件复制到该文件夹
并在同级下创建 ngrok.cfg 文件加入下面这段代码

server_addr: "xxx.com(你的域名):4443"
trust_host_root_certs: false

同级目录下创建启动命令文件 ngrok.bat ,写入下面代码

#顶级域名方式
ngrok -config=ngrok.cfg -hostname xxx.com(你的域名) 127.0.0.1:8080(对外开放的端口)
#二级域名方式
ngrok -config=ngrok.cfg -subdomain xxx(二级域名) 8080(对外开放的端口)

双击bat文件即可启动实现内网穿透

在这里插入图片描述

四、扩展操作

如何实现多台设备同时使用一个 ngrok 互不影响,在域名解析时可以采用 泛解析 的方式

1、域名解析

在这里插入图片描述

这时之前 第二章节 所有需要用到域名的操作都使用 ngrok.xxx.com 进行

2、文件修改

在这里插入图片描述

ngrok.bat文件修改如下,cfg文件无需修改,双击 bat 文件即可运行

@echo off
echo input your subdomain: 
set /p domain=
echo input your tunnle port: 
set /p port=
ngrok -config=ngrok.cfg -subdomain %domain%.ngrok %port%

domain= 和 port= 后面是空的什么都不用写,这样每次运行时都可以输入自己喜欢的三级域名和需要被代理的本地端口,效果如下

在这里插入图片描述

运行后效果

在这里插入图片描述

总结

注意:需要提前将服务中需要用到的端口全部开放,默认需要的端口 80、443、4443,有防火墙的也需要开放这些端口,第一次编译服务的时候可能会比较慢,多等一会就好了

请添加图片描述

Logo

更多推荐