theboyaply

学,就硬学!

  • Home
  • Archives
  • Java
  • Maven
  • Docker
  • Kubernetes
  • JavaScript
  • ES6
  • Vue
  • 踩坑记录
  • noted

  • 搜索
element ui vue wsimport webservice npm mysql redis node nginx nfs ftp es6 开发工具 vscode 前端 javascript springboot 常见问题 tomcat oracle jenkins maven k8s Linux gitlab docker java

ngrok搭建内网穿透服务

发表于 2020-03-06 | 分类于 踩坑记录 | 0 | 阅读次数 437
  • ngrok搭建内网穿透服务
    • 介绍
    • 准备
    • 安装软件
      • 安装git
      • 安装golang
      • 安装ngrok
    • 为域名生成证书
    • 编译服务端和客户端
    • 启动服务端和客户端
    • 将本地gitlab映射到外网

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)。

# Linux
centos7搭建gitlab私有仓库
Docker简介
  • 文章目录
  • 站点概览
theboyaply

theboyaply

好记性不如烂笔头

184 日志
13 分类
27 标签
Github E-mail
Creative Commons
0%
© 2019 — 2023 theboyaply
由 Halo 强力驱动
|
主题 - NexT.Gemini
湘ICP备19009291号

湘公网安备 43312402001034号