40865-yrzf85gysj9.png
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。
反向代理在计算机网络中是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器集群的存在。

一、安装Linux系统的环境

#操作系统版本
cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core) 

#0 安装GCC和GIT
yum install gcc -y 
yum install git -y
yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386
yum update -y nss curl libcurl

#1 安装GO环境
cd /usr/local
wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz
tar -zxvf go1.11.linux-amd64.tar.gz

#2 修改环境变量(/etc/profile)
#2.1 导入
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
export NGROK_DOMAIN=collick.xyz    #修改成自己的域名

#2.2 生效
source /etc/profile

二、下载Ngrok#0 下载ngrok文件

[root@VM-0-2-centos tmp]# git clone https://github.com/sunhuwh/ngrok.git
Cloning into 'ngrok'...
remote: Enumerating objects: 2769, done.
remote: Total 2769 (delta 0), reused 0 (delta 0), pack-reused 2769
Receiving objects: 100% (2769/2769), 670.40 KiB | 8.00 KiB/s, done.
Resolving deltas: 100% (1318/1318), done.

#1 将下的文件移动至/ngrok
[root@VM-0-2-centos tmp]# mv ./ngrok /ngrok

三、生成自签名证书

#0 生成新的自签名证书
cd /ngrok
NGROK_DOMAIN="collick.xyz"  #修改成自己的域名
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 device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

#1 将生成的证书分别替换到 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

四、设置链接认证

#0 添加认证存放文件
touch /etc/ngrok-secrets

#1 编辑认证文件
vi /etc/ngrok-secrets
# username      password
  user             pass

五、编译服务端及客户端

#0 ngrokd为服务端的执行文件,ngrok为客户端的执行文件,我们先来编译ngrok的服务端程序,在ngrok目录下面执行下面的命令:
cd /ngrok
GOOS=linux GOARCH=amd64  make release-server  # 64位
GOOS=linux GOARCH=386 make release-server   # 32位

#1 编译客户端,Linux客户端默认存放在/ngrok/bin/下,windows 64位客户端存放在/ngrok/bin/windows_amd64
cd ngrok目录
# linux32
GOOS=linux GOARCH=386 make release-client 
# linux64
GOOS=linux GOARCH=amd64 make release-client
# win32
GOOS=windows GOARCH=386 make release-client
# win64
GOOS=windows GOARCH=amd64 make release-client
#mac32
GOOS=darwin GOARCH=386 make release-client
#mac64
GOOS=darwin GOARCH=amd64 make release-client
#arm
GOOS=linux GOARCH=arm make release-client

六、服务端的启动命令

#0 编译成功之后会在项目目录的bin目录下面生成一个 ngrokd 的文件,使用下面的命令启动服务:
/ngrok/bin/ngrokd -tlsKey=/ngrok/device.key -tlsCrt=/ngrok/device.crt -domain="collick.xyz" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
# 上面的参数中,domain表示服务的域名,httpAddr和httpsAddr分别表示HTTP和HTTPS的端口,tunnelAddr用来设置通道的端口,在客户端和服务端建立连接的端口,需要在防火墙中开放次端口(默认为4443)。

七、配置服务端自启动

#0 方法一可以将命令加入到 /etc/rc.local 中使其开机启动,其中 /usr/local/ngrok 是ngrok的安装目录,最后不显示运行的日志,并且在后台运行。命令如下:
/ngrok/bin/ngrokd -domain="collick.xyz" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" > /dev/null 2>&1 &

#1 方法二将其配置位服务自启动
#1.1 配置启动文件
touch /usr/lib/systemd/system/ngrok.service
vi /usr/lib/systemd/system/ngrok.service
[Unit]
Description=Share local port(s) with ngrok
After=syslog.target network.target
 
[Service]
PrivateTmp=true
Type=simple
Restart=always
RestartSec=1min
StandardOutput=null
StandardError=null
ExecStart=/ngrok/bin/ngrokd  -tlsCrt=/ngrok/device.crt -domain="collick.xyz" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"  %i
ExecStop=/usr/bin/killall ngrok
 
[Install]
WantedBy=multi-user.target
#1.2 加载并启动脚本
systemctl enable ngrok.service //加入开机启动
systemctl daemon-reload  //重新载入 systemd,扫描新的或有变动的单元

#1.3 systemctl服务说明
systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体。
 
systemctl is-enabled iptables.service
systemctl is-enabled servicename.service #查询服务是否开机启动
systemctl enable *.service #开机运行服务
systemctl disable *.service #取消开机运行
systemctl start *.service #启动服务
systemctl stop *.service #停止服务
systemctl restart *.service #重启服务
systemctl reload *.service #重新加载服务配置文件
systemctl status *.service #查询服务运行状态
systemctl --failed #显示启动失败的服务
 
注:*代表某个服务的名字,如http的服务名为httpd

八、客户端下载及安装

#0 使用winscp工具将对应平台的客户端ngrok下载

#1 创建ngrok的配置文件ngrok.cfg
server_addr: "collick.xyz:4443"
trust_host_root_certs: false
auth_token: user:pass

#2 windows客户端的安装,将下载的客户端、配置文件复制到c:\windows\system32\中,打开cmd,输入以下(注意配置文件中的用户名和密码):
ngrok -config=c:\windows\system32\ngrok.cfg -subdomain www  8443
8443为本地服务的端口

#3 Linux客户端的安装,将客户端、配置文件复制到/ngrok/中,执行以下(注意配置文件中的用户名和密码)命令:
nohup /ngrok/ngrok -config=/ngrok/ngrok.cfg -log=stdout -subdomain mydsm 5000 >/dev/null 2>&1 &
[2] 32381

#4 还可以使用 -proto 来指定协议的类型(默认是http协议),支持http、tcp等多种协议:
./ngrok -subdomain mydsm -config=/ngrok/ngrok.cfg -proto=tcp 5000

参考文档:
https://blog.csdn.net/sunhuwh/article/details/108076078
https://blog.csdn.net/sunhuwh/article/details/107971820
https://www.javatang.com/archives/2018/04/17/05302345.html#i-6
https://www.xiaomiqiu.com/article/7



最后修改:2022 年 09 月 01 日
如果觉得我的文章对你有用,请随意赞赏