ngrok搭建内网穿透服务
参考:
介绍
-
内网穿透,简单来说就是让内部服务能够被外网访问,比如使用外网访问本地启动的
127.0.0.1:80
服务。 -
ngrok,是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。
ngrok官网:https://ngrok.com/
准备
-
一台公有云服务器,如:阿里云、腾讯云的服务器。
-
一个已备案域名,假如是:baidu.com
添加域名解析到服务器 ip,需要添加两条解析记录,
ngrok
和*.ngrok
,这里的ngrok
可以自己定义。
安装软件
更新 yum 源
yum update -y
安装git
yum install git -y
安装golang
yum install golang -y
安装ngrok
ngrok 需要下载它的源码,使用 git 进行 clone
# 进入放置代码的路径,这个路径自己随意
cd /usr/local/
# 拉取代码
git clone https://github.com/inconshreveable/ngrok.git
# 设置 GOPATH 环境变量,值为 ngrok 代码目录
export GOPATH="/usr/local/ngrok"
为域名生成证书
以下代码直接复制粘贴运行即可,需要注意的是,在哪个目录运行以下代码,生成的证书就在哪个目录。
# 假如域名为 baidu.com,你添加的域名解析记录为 ngrok,那么这里就是 ngrok.baidu.com
export NGROK_DOMAIN="ngrok.baidu.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
执行完后会生成以下六个文件
然后需要将其中三个放入 ngrok 代码下的指定文件夹中
# 以下三个命令可能会询问是否覆盖原文件,直接覆盖即可
cp rootCA.pem /usr/local/ngrok/assets/client/tls/ngrokroot.crt
cp server.crt /usr/local/ngrok/assets/server/tls/snakeoil.crt
cp server.key /usr/local/ngrok/assets/server//tls/snakeoil.key
编译服务端和客户端
以下使用的参数值,可以通过 go env 查看
# 比如 GOARCH 和 GOOS 的值
go env
以下是编译命令,编译后会生成对应的可执行文件(建议编译前先看看下面服务端和客户端的介绍)
# 需要进入 ngrok 目录执行
cd /usr/local/ngrok
# 以下命令自行选取
GOOS=windows GOARCH=386 make release-server #win服务端
GOOS=windows GOARCH=386 make release-client #win客户端
GOOS=linux GOARCH=386 make release-server #linux服务端
GOOS=linux GOARCH=386 make release-client #linux客户端
GOOS=linux GOARCH=amd64 make release-server #centos64服务端
GOOS=linux GOARCH=amd64 make release-client #centos64客户端
GOOS=darwin GOARCH=amd64 make release-server #mac64服务端
GOOS=darwin GOARCH=amd64 make release-client #mac64客户端
服务端和客户端的介绍:
- 客户端:在自己win10笔记本开了个 127.0.0.1:80 的服务,现在需要将其提供给外网访问,那么win10电脑使用的就是
win客户端
- 服务端:介绍了客户端后,服务端就更容易理解了。就是提供内网穿透功能的服务器。
简单介绍两者之后,我们就可以生成对应的可执行文件了,下面以生成 Linux服务端
和 win客户端
为例
# 需要进入 ngrok 目录执行
cd /usr/local/ngrok
#linux服务端,会在 /usr/loca/ngrok/bin 下生成 linux_386/ngrok 文件
GOOS=linux GOARCH=386 make release-server
#win客户端,会在 /usr/loca/ngrok/bin 下生成 windows_386/ngrok.exe 文件
GOOS=windows GOARCH=386 make release-client
编译完后生成对应的文件
启动服务端和客户端
-
启动服务端
# 进入 ngrok/bin/linux_386 目录 cd /usr/local/ngrok2/bin/linux_386/ # 启动服务,参数表示开放 $NGROK_DOMAIN 的 80 端口进行映射 ./ngrok -tlsCrt=/usr/local/ngrok/assets/server/tls/snakeoil.crt -domain="$NGROK_DOMAIN" -httpAddr=":80"
-
启动客户端
将服务器windows_386目录下的 ngrok.exe 文件通过其它软件拿到win10笔记本电脑上,放置目录随意。
在win10笔记本的 ngrok.exe 文件同级目录下新建 ngrok.conf 文件
server_addr: "ngrok.baodu.com:4443" # 你解析的域名:4443 trust_host_root_certs: false tunnels: # 代理管道 http: # 管道名称 subdomain: myserver # 子域名前缀 proto: http: 127.0.0.1:80 # 本地被代理的服务地址
使用 cmd 进入 ngrok.exe 目录下,运行以下命令启动
ngrok.exe -config ngrok.conf start http
如果需要代理多个服务,按照 http 管道的格式往下继续添加服务地址,同时启动 ngrok.exe 时在 http 后面加上其它的管道名称,使用空格隔开即可(管道名称不可相同)。
上图为启动成功之后的 cmd 截图,我们访问给出的域名即可从外网访问到本地服务。
将本地gitlab映射到外网
搭建本地gitlab可参考之前的文章,点我直达
我们只需要修改 git 拉取代码地址的配置,将/gitlab/data/gitlab-rails/etc/gitlab.yml
文件的 host
改为外网访问的域名即可(记得重启gitlab)。