1. 安装

  • 手动搭建ngrok服务器(生成ngrok服务端和客户端文件)、启动ngrok服务器

    • 安装杂项
    [root@host ~]# yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ build-essential  mercurial
    
    • 安装golang

      ## 境外[root@host ~]# wget https://storage.googleapis.com/golang/go1.7.6.linux-amd64.tar.gz
      ## 境内[root@host ~]# wget https://www.golangtc.com/static/go/1.7.6/go1.7.6.linux-amd64.tar.gz
      [root@host ~]# tar zxvf go1.7.6.linux-amd64.tar.gz
      [root@host ~]# mv go /usr/local/
      [root@host ~]# ln -s /usr/local/go/bin/* /usr/bin/
      [root@host ~]# go env
      GOARCH="amd64"
      GOBIN=""
      GOEXE=""
      GOHOSTARCH="amd64"
      GOHOSTOS="linux"
      GOOS="linux"
      GOPATH=""
      GORACE=""
      GOROOT="/usr/local/go"
      GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
      CC="gcc"
      GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build554985173=/tmp/go-build"
      CXX="g++"
      CGO_ENABLED="1"
      
    • Go编译过程中要求高版本的git

      [root@host ~]# wget https://www.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz
      [root@host ~]# tar zxvf git-2.9.3.tar.gz
      [root@host ~]# cd git-2.9.3
      [root@host git-2.9.3]# ./configure --prefix=/usr/local/git-2.9.3
      [root@host git-2.9.3]# make && make install
      [root@host git-2.9.3]# yum remove git*
      [root@host git-2.9.3]# ln -s /usr/local/git-2.9.3/bin/* /usr/bin/
      [root@host git-2.9.3]# git --version
      git version 2.9.3
      
    • ngrok源码配置

      ## 声明编译的路径和必要的域名(域名改成你自己的)
      [root@host ~]# git clone https://github.com/inconshreveable/ngrok.git ~/ngrok
      [root@host ~]# export GOPATH=~/ngrok/
      [root@host ~]# export NGROK_DOMAIN="ngrok.test.com"
      [root@host ~]# cd ~/ngrok
      
    • 生成证书,Ngrok会使用此证书加密通讯

      [root@host ngrok]# openssl genrsa -out base.key 2048
      [root@host ngrok]# openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
      [root@host ngrok]# openssl genrsa -out server.key 2048
      [root@host ngrok]# openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
      [root@host ngrok]# openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
      
    • 复制证书到指定位置

      [root@host ngrok]# cp base.pem assets/client/tls/ngrokroot.crt -i
      [root@host ngrok]# cp server.crt assets/server/tls/snakeoil.crt -i
      [root@host ngrok]# cp server.key assets/server/tls/snakeoil.key -i
      
    • 编译服务器端与客户端

      # 服务器端为linux-x86-64
      [root@host ngrok]# export GOOS=linux
      [root@host ngrok]# export GOARCH=386
      [root@host ngrok]# make release-server# 如果客户端也是x86架构,则直接生成客户端
      [root@host ngrok]# make release-client# 如果客户端为arm架构(比如树莓派)
      [root@host ngrok]# export GOARCH=arm
      [root@host ngrok]# make release-client# 编译完客户端位于:/root/ngrok/bin/linux_386
      
  • 添加域名解析

    • 到你的域名托管后台添加相应的域名解析到服务器ip(如:ngrok.test.com 和 *.ngrok.test.com)
  • 服务器端部署

    # 将编译好的可执行文件移至/usr/bin/下
    [root@host linux_386]# ln -s /root/ngrok/bin/linux_386/ngrokd /usr/bin/# 运行ngrokd
    [root@host linux_386]# ngrokd -domain="ngrok.test.com" -httpAddr=":10000" -httpsAddr=":443"
    

    屏幕会输出一连串日志信息,httpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,ngrokd 还会开一个 4443 端口用来跟客户端通讯,注意设置防火墙使端口开放。

  • 客户端部署

    # 将/root/ngrok/bin/linux_386/ngrok 移至本地服务器,并在同目录下新建配置文件:ngrok.cfg
    [xxx@host ~]# sudo mkdir /home/xxx/ngrok_client && cd /home/xxx/ngrok_client
    [xxx@host ngrok_client]# sudo vi ngrok.cfg
    server_addr: test.com:4443
    trust_host_root_certs: false
    inspect_addr: disabled
    tunnels:ssh:remote_port: 2200proto:tcp: 22ftp:remote_port: 2000proto:tcp: 20mysql:remote_port: 33060proto:tcp: 3306test:subdomain: testproto:http: 80ip:hostname: 12.34.56.78proto:http: 80www:hostname: www.test.comproto:http: 80https: 192.168.1.4:443
    • 部分参数说明

      server_addr: test.com:4443      # 远程服务器地址
      trust_host_root_certs: false    # 如使用自签名证书,则须添加此键且指定值为 `false`
      remote_port: 220                # 指定远程端口, proto==tcp时必须配置,且每个tunnel对应一个不同的端口,否则冲突。
      subdomain: test                 # 指定次级域名字段,通过该字段+远程服务器域名访问该tunnel
      hostname: www.test.com          # 指定一个完整域名,该域名必须不与其它tunnel指定过的重复,必须唯一。指定该参数以后就可以通过该域名访问了。该参数与subdomain参数不可同时生效。
      inspect_addr: disabled          # 关闭web观察器。1.7版本存在内存泄露,在使用期间会将客户端内存耗尽,关闭web观察器可使其保持稳定,具体内容参考此链接:https://github.com/inconshreveable/ngrok/issues/109
      
  • 开启客户端

    [root@host ngrok_client]# screen -S ngrok
    [root@host ngrok_client]# ./ngrok  -config=ngrok.cfg start-all
    # Ctr+A+D 后台运行
    

2. 创建服务

  • 服务端(CentOS7)

    • 为了所有次级域名全部开启HTTPS,需要注册通配符域名(Let’s Encrypt)

      • 申请下来证书位于:"/etc/letsencrypt/",会在live目录下创建软连接,以实现自动更新。
      • 使用的时候直接引用"/etc/letsencrypt/live/xxx.com/*.pem"即可。
    • 制作脚本 /my_sh/ngrokd.sh 和 /my_sh/kill_ngrokd.sh

      # vi /my_sh/ngrokd.sh
      # nohup /usr/bin/ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":443" -log=stdout >/dev/null &nohup /usr/bin/ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":443" -tlsKey="/etc/letsencrypt/live/xxx.com-0001/privkey.pem" -tlsCrt="/etc/letsencrypt/live/xxx.com-0001/fullchain.pem" -log=stdout >/dev/null &# vi /my_sh/kill_ngrokd.sh
      /usr/bin/killall /usr/bin/ngrokd
      
    • 加入服务 /etc/rc.d/init.d/ngrokd

      #!/bin/sh
      #chkconfig:2345 70 30
      #description:ngrokdngrokd_path=/my_sh/ngrokd.sh
      kill_ngrokd_path=/my_sh/kill_ngrokd.shcase "$1" instart)echo "start ngrokd server..."sh ${ngrokd_path}echo "done.";;stop)echo "stop ngrokd server..."sh ${kill_ngrokd_path}echo "done.";;restart)echo "restart ngrokd server..."sh ${kill_ngrokd_path}sh ${ngrokd_path}echo "done.";;*)
      exit 1
      ;;
      esac
    • 赋予可执行权限

      [root@host ~]# chmod a+x /etc/rc.d/init.d/ngrokd
      
    • 安装screen

    • 启动服务并在后台运行

      [root@host ~]# service ngrokd start
      
    • 设置开机自启动

      [root@host ~]# chkconfig --add ngrokd
      [root@host ~]# chkconfig ngrokd on
      
  • 客户端配置

    • 制作脚本 /home/xxx/my_sh/ngrok.sh 和 /home/xxx/my_sh/kill_ngrok.sh

      # sudo vi /home/xxx/my_sh/ngrok.sh
      nohup /home/xxx/ngrok_client/ngrok  -config=/home/xxx/ngrok_client/ngrok.cfg -log=stdout start-all >/dev/null &# sudo vi /home/xxx/my_sh/kill_ngrok.sh
      /usr/bin/killall /home/xxx/ngrok_client/ngrok
      
    • 加入服务 /etc/rc.d/init.d/ngrok

      #!/bin/sh
      #chkconfig:2345 70 30
      #description:ngrokngrok_path=/home/xxx/my_sh/ngrok.sh
      kill_ngrok_path=/home/xxx/my_sh/kill_ngrok.shcase "$1" instart)echo "start ngrok client..."sh ${ngrok_path}echo "done.";;stop)echo "stop ngrok client..."sh ${kill_ngrok_path}echo "done.";;restart)echo "restart ngrok client..."sh ${kill_ngrok_path}sleep 1  sh ${ngrok_path}echo "done.";;*)
      exit 1
      ;;
      esac
    • 赋予可执行权限

      [root@host ~]# chmod a+x /etc/rc.d/init.d/ngrok
      
    • 安装screen

    • 启动服务并在后台运行

      [root@host ~]# service ngrok start
      
    • 设置开机自启动

      [root@host ~]# chkconfig --add ngrok
      [root@host ~]# chkconfig ngrok on
      

Linux-Ngrok内网穿透相关推荐

  1. ngrok内网穿透工具搭建,方便微信公众号,小程序、钉钉等开发【已投入使用】

    前言:微信公众号,小程序.钉钉等开发需要内网穿透工具. 1.经过不断的摸索和调试,完成ngrok内网穿透的工具的搭建,对于微信公众号,小程序.钉钉等开发提供便利性. 2.搭建环境Linux cento ...

  2. ngrok 内网穿透

    ngrok 内网穿透 下载客户端 根据你的个人电脑系统下载匹配的客户端. 下载地址: https://ngrok.com/download 启动 打开ngrok.exe 输入命令,开放端口 ngrok ...

  3. 华硕老毛子(Padavan)——Ngrok内网穿透解决方案

    基本概念 Ngrok:ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.Ngrok是外国发布的一个开源项目,也有一个公开的运行服务,但被国内墙掉了.国内一 ...

  4. 小米球ngrok内网穿透

    小米球ngrok内网穿透 目录 小米球ngrok内网穿透 背景 操作步骤 小米球官网,先注册,登陆 下载对应版本 系统管理-商品管理-商品列表开通 实名认证,注册版服务器两服务. 系统管理-账户管理- ...

  5. 记录linux的内网穿透frp操作

    记录linux的内网穿透frp操作 由于本人在宿舍偶尔需要查看实验室内电脑程序结果及传输一些文件,不得不利用frp内网穿透,需要准备以下三台电脑,如果有多个客户端,也可以进行配置: 一.一台具有公网i ...

  6. ngrok内网穿透原理分析和实现

    转载: ngrok内网穿透原理分析和实现 在互联网终端急剧增长的今天,公网ip已经成为稀缺资源,对于国内垄断的电信运营商来讲,更是不可能随便免费给你一个公网ip,许多家庭宽带都无法分配到 公网ip,又 ...

  7. 搭建解析内网 linux_Linux 搭建ngrok内网穿透

    准备工作,需要有一台公网IP的服务器用来部署内网穿透的服务端 1.下载源码到GOPATH工作目录的src文件目录下 我的GOPATH是 /root/go/src/ cd /root/go/src/gi ...

  8. 如何让你的本地上的项目不用部署到服务器也能让外网看到?使用ngrok内网穿透实现

    目录 前言 一.准备工作 二.安装ngrok运行环境 (liunx) 三.安装ngrok (liunx) 四.配置ngrok (liunx) 五.生成客户端和服务端并运行ngrok (liunx) 六 ...

  9. 笔记 ngrok 内网穿透及其身份认证 authtoken 配置

    0. 系统环境 腾讯云(带公网 IP) centos 7.6 参考网址: https://www.vediotalk.com/archives/336 参考网址: https://studygolan ...

  10. ngrok内网穿透服务器和客户端

    一.概要 1.名称解释: 内网穿透即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透. 就是说映射端口,能让外网的电脑找到处于内网的电脑, ...

最新文章

  1. linux 内核 时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
  2. 辅助模式最终考验的是想象力,先来看看怎么用!| Accessibility
  3. esmini接入外部ego车控制
  4. 除了 Docker,我们还有哪些选择?
  5. c语言api函数写病毒,C语言病毒代码,及写病毒简单介绍
  6. 主键、聚集索引、非聚集索引区别
  7. 荣耀20 Pro三色渲染图曝光:后置潜望式镜头+3D ToF镜头
  8. pycharm运行pytorch版pix2pix学习笔记
  9. Swift3 中文手册.CHM版
  10. 硅谷的摇篮-斯坦福大学
  11. 推理和论证(证明)的区别
  12. React Toolkit使用
  13. Excel隔行插入空白行小技巧
  14. js后代选择器_jQuery后代选择器用法实例
  15. 使用百度API实现热点(WIFI)、GPS、基站定位
  16. 录制课件时,小米笔记本电脑,外接耳麦, 麦克风没那有声音,怎么办?
  17. BlueCms v1.6 本地文件包含漏洞代码审计
  18. T-SQL: DBCC CHECKALLOC
  19. 计蒜客-A1530 Abiyoyo
  20. 荣耀v30鸿蒙系统怎么升级,荣耀v30pro怎么升级鸿蒙系统

热门文章

  1. Android系统的应用开发与运行环境构建
  2. arduino 步进电机驱动库_Arduino第三方库_步进电机控制
  3. 打算打造一个最牛iOS培训品牌
  4. IM开发者的零基础通信技术入门(一):通信交换技术的百年发展史(上)
  5. mysql导入微信小程序云开发_微信小程序-云开发数据库上传json文件
  6. 餐馆(餐馆有n张桌子,每张桌子有一个参数a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 不允许拼桌的情况下,选择其中一部分客人,使得总预计消费金额最大)
  7. Karatsuba乘法--实现大数相乘
  8. php hiphop mysql_HipHop PHP实战(详解web运行模式)
  9. 虚拟货币盘点:微币,Q币,苹果平台,Facebook 的F币,Google会推G币么?
  10. 2022-2028年全球与中国射频开关产业市场前瞻与投资战略规划分析