内网穿透 --- 搭建自己的ngork服务器及身份认证

内网穿透的目的是:让外网能访问局域网内本地的应用,例如在外网访问你本地http://127.0.0.1指向的Web站点。

ngrok简介

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

开源免费
官网:https://ngrok.com/
源码:https://github.com/inconshreveable/ngrok

ngrok.png

ngrok使用go语言开发,源代码分为客户端与服务器端。

本文需要配置有:

  1. 一台外网服务器A,windows或linux都行,我外网服务器是linux系统;
  2. 域名,如martin.com,并且解析到外网服务器A上;
  3. 内网本机,windows系统或linux系统都行,我本地是windows系统;
  4. 本机属于局域网,但可以上外网 。

开始安装ngrok服务端与客户端程序

本文外网服务器使用的是ubuntu系统,内网本机使用的是windows系统;

第一步 在外网服务器上安装必要的软件
apt-get update
sudo apt-get install make build-essential golang mercurial binutils bison gcc git

因为ngrok是Go编写的,所以需要安装Golang。

第二步 下载ngrok源码
ubuntu@ubuntu:~$ cd /tmp/
ubuntu@ubuntu:/tmp$ git clone https://github.com/inconshreveable/ngrok.git ngrok2
配置域名
image.png

需要将ngork指向你的公网ip, *.ngork执行你的二级域名ngork,也就是例子中的ngork.martin.com。

PS. ngrok名称可以任意,所以我就写了个ngork,哈哈哈

第三步 配置外网服务器
设置环境变量
ubuntu@ubuntu:/tmp/ngrok2$ export GOPATH=/usr/local/ngrok/  #设置环境变量,Go语言的安装位置
ubuntu@ubuntu:/tmp/ngrok2$  export NGROK_DOMAIN="ngork.martin.com"  #设置环境变量,ngrok域名
为域名生成证书
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

证书如下:

ubuntu@ubuntu:/tmp/ngrok2$ ls
assets  contrib       docs     Makefile  README.md   rootCA.pem  server.crt  server.key
bin     CONTRIBUTORS  LICENSE  pkg       rootCA.key  rootCA.srl  server.csr  src

拷贝证书到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt  #复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt
cp server.crt assets/server/tls/server.crt #复制server.crt到assets/server/tls/
cp server.key assets/server/tls/server.key #复制server.key到assets/server/tls/

编译服务端与客户端
# 在ngrok2目录下,编译会在ngrok2/bin目录下生成对应系统的文件夹和文件
# win x86服务端
GOOS=windows GOARCH=386 make release-server 
# win x86客户端
GOOS=windows GOARCH=386 make release-client
# win x64客户端
GOOS=windows GOARCH=amd64 make release-client
# linux服务端
GOOS=linux GOARCH=386 make release-server
# linux客户端
GOOS=linux GOARCH=386 make release-client

# 编译后bin目录下文件如下:进入文件夹就是所需要的应用程序
ubuntu@ubuntu:/tmp/ngrok2/bin$ ls
go-bindata  linux_386  windows_amd64  
ngrok服务端部署到ubuntu服务器上
# 80是http端口
# 443是https端口
# 默认隧道端口为4443
sudo /tmp/ngrok2/bin/linux_386/ngrokd -tlsKey=/tmp/ngrok2/server.key -tlsCrt=/tmp/ngrok2/server.crt -domain="ngork.martin.com" -httpAddr=":80" -httpsAddr=":443"

这样ngrok服务端就已经搭建好了

第四步 使用windows客户端

把bin目录下的windows_amd64目录下的ngrok.exe拷贝到windows系统的d:/ngork目录下(因为我是windows 64位系统 所以使用amd64)

在ngrok.exe同目录下,创建ngrok.cfg文件并写入:

server_addr: "ngork.martincom:4443"
trust_host_root_certs: false

启动客户端:

  ngrok.exe -config=ngrok.cfg -subdomain ljs 8089

运行成功会出现如下:

ngrok                                                                                                                                      (Ctrl+C to quit)

Tunnel Status                 online
Version                       1.7/1.7
Forwarding                    http://ljs.ngork.martin.com -> 127.0.0.1:8089
Forwarding                    https://ljs.ngork.martin.com -> 127.0.0.1:8089
Web Interface                 127.0.0.1:4040
# Conn                        2
Avg Conn Time                 25.00ms

但原始版本的ngrok的server是没有身份验证功能的,也就是说任何人都可以通过ngrok 1.x的client使用我们的服务器,毕竟是私人的服务器,所以我希望给ngrok加上身份验证的功能。 这时候可以参考大神写的身份验证文章,亲测有效 :给ngrok添加身份验证

参考链接:
https://github.com/inconshreveable/ngrok/blob/master/docs/SELFHOSTING.md
https://blog.csdn.net/zhangguo5/article/details/77848658
https://prikevs.github.io/2016/12/26/add-authentication-to-ngrok/
https://www.jianshu.com/p/4b03fb532145

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

推荐阅读更多精彩内容

  • 原文地址:https://blog.qjm253.cn/?p=395 包含依赖包的项目(可直接编译):https:...
    SunnyQjm阅读 3,317评论 2 12
  • 1. 前言 前段时间因为测试一些东西,嫌上传程序到服务器麻烦,就想在腾讯云上搭建一个Ngrok服务器用于内网穿透,...
    双流小二郎阅读 3,100评论 0 0
  • 闻乐(朋友) 我的观点:智能制造是实现工业X.0的手段,它包含着业务、组织、流程、工具的变革。业务上需要有输入,比...
    marcus2017阅读 712评论 0 49
  • 部门聚餐是工作中稀松平常的一件事,酒桌文化也潜移默化的渗透到我的骨子里,愈来愈深,愈来愈好,我知道家传身教...
    NF楠风阅读 199评论 0 1
  • 01 为了斩断坏习惯,在同欲望的战斗中必须赢得胜利。 刚刚进入4月的时候,朋友晓茹在朋友圈转...
    杨舒岚Anne阅读 326评论 0 2