theboyaply
theboyaply
发布于 2020-03-06 / 583 阅读
0
0

ngrok搭建内网穿透服务

ngrok搭建内网穿透服务

参考:

https://blog.csdn.net/zhangguo5/article/details/77848658

http://www.imooc.com/article/276245?block_id=tuijian_wz

介绍

  • 内网穿透,简单来说就是让内部服务能够被外网访问,比如使用外网访问本地启动的 127.0.0.1:80 服务。

  • ngrok,是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。

    ngrok官网:https://ngrok.com/

    ngrok源码:https://github.com/inconshreveable/ngrok

准备

  • 一台公有云服务器,如:阿里云、腾讯云的服务器。

  • 一个已备案域名,假如是:baidu.com

    添加域名解析到服务器 ip,需要添加两条解析记录,ngrok*.ngrok,这里的 ngrok 可以自己定义。

ngrok_domain_mapping

安装软件

更新 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_openssl_cert

然后需要将其中三个放入 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_server_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 后面加上其它的管道名称,使用空格隔开即可(管道名称不可相同)。

    ngrok_domain

    上图为启动成功之后的 cmd 截图,我们访问给出的域名即可从外网访问到本地服务。

将本地gitlab映射到外网

搭建本地gitlab可参考之前的文章,点我直达

我们只需要修改 git 拉取代码地址的配置,将/gitlab/data/gitlab-rails/etc/gitlab.yml 文件的 host 改为外网访问的域名即可(记得重启gitlab)。


评论