最近公司空出来几台主机,于是乎我就把他们都安装了centos,想着替换掉阿里云上的dev和test环境省点钱,于是乎在内网服务器上部署好了环境和应用后,测试人员想通过公网在家测试。哎,没办法,作为一个爱替别人着想的后端,我准备研究搭建一下ngrok做个内网穿透,废话不说,搭建过程记录下来

 首先简单介绍一下ngrok的工作原理(我的理解):要想让ngrok替你完成内网穿透,你需要配置并安装服务端,服务端需要被安装在一个具有公网IP的服务器上。然后通过服务端的配置文件和证书,生成你需要使用的客户端(必须通过服务端搭配配置来生成,否则客户端会不好用)。然后将客户端复制在你想使用的终端上,通过配置文件,运行客户端,让客户端与服务端完成通讯,从而映射到你安装客户端的本地应用上。

 一. 准备工作

①首先要有一台公网IP的服务器。我这里使用的是阿里云ESC云服务器。

②要有一个域名,最好是备过案的。然后将域名解析到你的公网服务器IP中。

    解析时需要注意,如果你想使用的是一级域名给ngrok,例如xxx.com,则你需要解析两个A记录值:@和*两个记录值

Centos Ngrok进行内网穿透_客户端

    如果你想使用的是二级域名给ngrok,例如mmm.xxx.com,则你需要解析两个A记录值:mmm.xxx.com本身和*.mmm.xxx.com两个

Centos Ngrok进行内网穿透_客户端_02

③需要完成内网穿透的服务器,哈哈哈(这是一句废话)

④在部署ngrok服务端的机器上安装go语言环境与git,并通过git将ngrok的源码下载下来(也可以手动下载,然后复制在相应位置,害,太麻烦了):

   安装go环境:

cd /usr/local
wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz
tar -zxvf go1.11.linux-amd64.tar.gz
环境变量(vim /etc/profile)

export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
export NGROK_DOMAIN="你的域名"

更新环境变量:source /etc/profile

查看go环境安装是否成功:go version

安装git

# 下载新版本git (版本列表 https://www.kernel.org/pub/software/scm/git/)  
cd /usr/local  
wget https://www.kernel.org/pub/software/scm/git/git-2.16.2.tar.gz  

# 解压  
tar zxvf git-2.16.2.tar.gz  

# 编译git  
cd git-2.16.2  
./configure --prefix=/usr/local/git  
make  
make install  

#删除刚才下载的git包
cd /usr/local
rm git-2.16.2.tar.gz -y

或者:

安装 git
yum install git

#注意git版本应大于1.7.9.5

#下载ngrok源码包
cd ~
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok/

 

克隆ngrok代码到本地

cd /usr/local/  
git clone https://github.com/inconshreveable/ngrok.git

二. 配置ngrok服务端 

进入到ngrok的路径

cd /usr/local/ngrok

以下操作均在该路径下完成

①生成ngrok服务端证书:

cd /usr/local/ngrok
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

③根据证书生成编译完成服务端和客户端

生成Linux服务端和Linux客户端:生成后在bin路径下

make release-server release-client

编译生成Windows客户端:

GOOS=windows GOARCH=amd64 make release-client

生成后客户端在ngrok/bin/windows_amd64

编译生成Mac版本客户端:

GOOS=darwin GOARCH=amd64 make  release-client

④启动ngrok服务端

./bin/ngrokd -domain="你的域名" -httpAddr=":80" -httpsAddr=":443"
#后台一直运行,并输出日志到指定文件
nohup ./bin/ngrokd -domain="你的域名" -httpAddr=":80" -httpsAddr=":443" ->  ngrok.log &

三. 配置客户端

 

①将编译生成的window版客户端下载保存到本地D:ngrok/,然后同路径下创建ngrok的配置文件ngrok.cfg

配置文件内容如下:

tunnels表示隧道的意思就是下面的都是我需要进行穿透的东西

matsc和pms是需要进行穿透的配置别名

进行穿透可以有两种方式,比如ngrok服务端设置的域名是xxx.com,则可以通过子域名和端口的方式完成穿透:xxx.xxx.com或者xxx.com:15000。以下配置文件中,remote_port是通过端口的方式,例如下面配置,穿透出来就是xxx.top:15001穿透到了内网192.168.1.153:3389

subdomain是通过子域名的方式穿透,下面配置翻译过来就是:pms.xxx.top穿透到了内网127.0.0.1:8083

server_addr: "xxx.top:4443"
trust_host_root_certs: false
tunnels:
  mstsc:
    remote_port: 15001
    proto:
      tcp: "192.168.1.153:3389"
  pms:
    subdomain: "pms"
    proto:
      http: "127.0.0.1:8083"

②打开cmd命令提示符,路径切换到ngrok.exe所在路径,执行命令:

ngrok.exe -config=ngrok.cfg start pms

此时就启动了pms配置的穿透服务