ngrok内网穿透服务器搭建及配置

前言

ngrok是一款基于go的开源的内网穿透工具,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道,是目前开发微信公众号、小程序时,可在内网调试微信服务的最佳利器之一。
官网:https://ngrok.com/
源码:https://github.com/inconshreveable/ngrok

先决条件及总体步骤

  • 先决条件

1)有1台公网服务器,如阿里云或腾讯云ECS;
2)有1个域名,且有备案;

  • 总体步骤

1)基础设施环境准备;
2)生成ngrok服务端与客户端应用程序;
3)部署ngrok到外网服务器;
4)启动ngrok客户端;
5)测试运行;

具体步骤

一、基础设施环境准备

(1)域名解析设置

1)假设你的域名:i668.top;
2)假设你的ngrok服务二级访问域名为:ngrok.i668.top;
3)添加如下解析(位置:阿里云=>域名管理=>解析)
ngrok.i668.top ==> A记录 your IP;
*.ngrok.i668.top ==> A记录 your IP;

(2)安装VMware虚拟机

VMware Workstation是一款功能强大的虚拟机软件,在不影响本机操作系统的情况下,用户可以在虚拟机中同时运行不同版本的操作系统,用于开发、测试以及部署工作。
下载:VMware Workstation 12
序列号:5A02H-AU243-TZJ49-GTC7K-3C61N(商业应用请购买正式版权,这里仅为学习使用)

(3)安装配置ubuntu系统

1)下载ubuntu操作系统桌面版镜像,ubuntu-16.04.6-desktop-amd64
2)在VMware虚拟机中安装ubuntu系统
20G硬盘,1.5G内存,虚拟磁盘存储为单个文件;
3)设置网络连接(NAT模式,用于共享主机的IP地址)
4)设置以root超级管理员的身份登录
在文件50-unity-greeter.conf(位置:usr=>share=>lightdm=>lightdm.conf.d=>50-unity-greeter.conf)中添加如下信息:

[Seat:*]
greeter-session=unity-greeter
user-session=ubuntu
greeter-show-manual-login=true
all-guest=false
(4)安装VMware Tools工具(位置:虚拟机=>安装VMware Tools)

在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之间自由移动(不用再按ctrl+alt),且虚拟机屏幕也可实现全屏化。

二、生成ngrok服务端与客户端应用程序

以下所有命令均以root身份执行

(1)安装git
apt-get update #更新包管理器
apt-get install git  #安装git
(2)安装go
apt-get remove golang-go
mkdir /soft
cd /soft
wget https://dl.google.com/go/go1.12.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.12.2.linux-amd64.tar.gz 
#添加环境变量
echo 'export GOROOT=/usr/local/go #Go安装路径根路径
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=$HOME/goproj  #Go工程路径(工作区),多个工程中间用分号分割
export NGROK_DOMAIN="ngrok.i668.top"' | sudo tee -a /etc/profile
source /etc/profile #保存环境变量
go version #查看版本
(3)安装ngrok
git clone https://github.com/inconshreveable/ngrok.git ngrok
cd ngrok
(4)根据域名生成证书(自签)
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
penssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
(5)证书替换
cp rootCA.pem assets/client/tls/ngrokroot.crt  #复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt #复制server.crt到assets/server/tls/并更名为snakeoil.crt
cp server.key assets/server/tls/snakeoil.key #复制server.key到assets/server/tls/并更名为snakeoil.key
(5)编译server和client端
#win服务端
GOOS=windows GOARCH=amd64 make release-server 
#win客户端
GOOS=windows GOARCH=amd64 make release-client

如果编译报以下错,安装最新的go和配置GOPATH

package context: unrecognized import path "context" (import path does not begin with hostname)
package net/http/httptrace: unrecognized import path "net/http/httptrace" (import path does not begin with hostname)
Makefile:8: recipe for target 'deps' failed
make: *** [deps] Error 1

编译成功后在ngrok目录下的bin目录。
以编译windows平台为例,会产生“ngrok.exe”与“ngrokd.exe”这两个文件,前者客户端,后者需要运行在公网服务器上。

客户端版本说明

  • Linux 平台 32 位系统:GOOS=linux GOARCH=386
  • Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
  • Windows 平台 32 位系统:GOOS=windows GOARCH=386
  • Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
  • MAC 平台 32 位系统:GOOS=darwin GOARCH=386
  • MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64

三、部署ngrok到外网服务器

将生成的ngrokd.exe文件复制到windows服务器中,如将ngrokd.exe放在c:\ngrokeServer目录下:


ngrok服务端目录.jpg

为方便,编写批处理文件

  • 带自签证书,ngrokserver_selfcert.bat
ngrokd.exe -tlsKey="snakeoil.key" -tlsCrt="snakeoil.crt" -domain="ngrok.i668.top" -httpAddr=":801" -httpsAddr=":802"
  • 带CA签发证书,ngrokserver_outcert.bat
ngrokd.exe -tlsKey="2_ngrok.i668.top.key" -tlsCrt="1_ngrok.i668.top_bundle.crt" -domain="ngrok.i668.top" -httpAddr=":801" -httpsAddr=":802"

参数说明

-domain 访问ngrok是所设置的服务地址生成证书时那个
-httpAddr http协议端口 默认为80
-httpsAddr https协议端口 默认为443 (可配置https证书)
-tunnelAddr 通道端口 默认4443

为了安全许多服务器会将端口屏蔽,如阿里云的ECS服务器,默认801,802都是关闭的,需要手动开启,在阿里云的后台添加开放的端口就可以了。

四、启动ngrok客户端

客户端就是您的web应用程序所运行的主机,将ubuntu生成的ngrok.exe客户端应用复制到您的系统中。
添加配置文件ngrok.cfg

server_addr: "ngrok.i668.top:4443"
trust_host_root_certs: false

添加批处理start.bat

ngrok.exe  -subdomain pcd -proto=https -config=ngrok.cfg 8999

参数说明

trust_host_root_certs #是否信任系统根证书,如果是带自签名证书编译的 ngrok 客户端,这个值应该设置为 false;如果使用 CA 证书,或者用户添加了根证书,这个值应该设置为 true
-proto     #转发协议 不指定默认是 http+https
-subdomain #访问本地时的三级域名 不指定就会随机生成 tcp不支持此参数
8999       #本地服务的端口号
-config    #指定配置位置

如果想一次性转发多个端口或者想指定远程的对应端口,需要完善ngrok.cfg

server_addr: "ngrok.i668.top:4443"
trust_host_root_certs: true
tunnels:
  pcd:
    proto:
      http: "8999"
    remote_port: 801
  pcd2:
    proto:
      https: "8999"
    remote_port: 802
  tcp:
    proto:
      tcp: "3022"
    remote_port: 4444
  tcp2:
    proto:
      tcp: "22"
    remote_port: 4445

启动单个服务

ngrok.exe -config=ngrok.cfg start pcd #启动pcd服务 使用的前缀域名为pcd

启动多个服务

ngrok.exe -config=ngrok.cfg start pcd pcd2  #同时启动两个服务
ngrok.exe -config=ngrok.cfg start -all  #启动所有服务
ngrok客户端启动界面.jpg

五、测试运行

打开浏览器,输入http://pcd.ngrok.i668.top:801就可以穿透内网访问您的web服务器了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容