Ngrok搭建内网穿透--Centos 7.x

说明

前两天买的内网穿透服务到期了,买的是natapp这个,虽然也有免费的,但是每次都会换域名,用着不爽,之前还用过Sunny-Ngrok小米求等等。

免费的用着始终觉得不爽,收费的我基本都是一个月一个月的开通,虽然钱不多,但是感觉时间过得特别快,还没怎么用就到期了。

于是就想自己动手搭建一套,反正域名是有的,就差一台服务器了,由于之前项目都是买的阿里云服务器,所以看了一下阿里云的服务器,但是最便宜的也要500大洋左右,本来就是打算买来玩一玩的,500大洋有点舍不得,然后又看了腾讯云、华为云、百度云等,其实价格也都差不多。

最后找到一个叫UCloud,这价格看下来还是可以的,准备是想买1C1G的,但是想着后面如果还要折腾点什么东西可能会卡,所以就买了一个1C2G的,因为我是新用户注册然后还送了50块钱,反正最后实付了150块。感觉还是挺值的,1年150块,一天也就5毛钱左右(少抽支烟就好了,啊哈哈,说这么多感觉像是在打广告似的,还特意的去搜索了一下UCloudUC浏览器是啥关系,好像没毛关系)

image.png

网上有很多关于Ngrok的搭建教程,但是在我实际操作的时候还是遇到了一些问题,所以这里记录一下。

1.前期准备

安装了XshellXftp这两个软件,然后就是破解,关于怎么安装、怎么使用、怎么破解百度就好了。

2.系统选择

在网上搜索了Ngrok的搭建,基本都是基于Linux的,加上最近也在试着逼着自己使用Linux,所以也没考虑直接买的Linux的服务器。【用了一天感觉还行,用XshellXftp连接的时候稍微有一点点慢,下载速度也还能接受,其他感觉都还行,毕竟一分钱一分货】

image.png

3.域名解析

域名是刚开始入行的时候就购买的【intolearn.com】,刚入行的时候总是想拥有一个属于自己的网站,搭建过各种开源的博客系统,后面由于懒都不了了之了(主要是懒得维护),虽然没有坚持下来,但是有的事情总得经历一下,去折腾一下,比如这次搭建Ngrok也是在折腾,满足一下好奇心。

域名是在阿里云上面解析的,由于一级域名intolearn.com解析到的是其他地方,所以我是用二级域名来搭建的。

  • ngrok.intolearn.com : 用来为ngrok服务器本身提供外部访问,解析到刚买的服务器上面
  • haiyang.ngrok.intolearn.com : 用来映射到我的笔记本,CNAME的方式解析到 ngrok.intolearn.com
    image.png

4.服务器环境

4.1.安装gcc

先检查一下系统是否已经默认安装了,如果没有安装就安装一下就好了,我买的这个服务器上面默认是已经安装了的,所以我就没有安装了。

yum install gcc -y    //安装
gcc -v 或者 gcc --version  //检查是否安装成功
image.png

4.2. 安装git

git是用来下载ngrok源码的,不是必选的,你可以先下载到本地然后上传到服务器也是可以的,我选择的是直接在服务器上下载。

yum install git -y  //安装
git --version  //检查是否安装成功
image.png

有几篇文章都说是版本要 >=1.7,不然会有问题,这个我没试过,反正执行安装命令后就是1.8了。

4.3. 安装go语言环境

yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386

这一串命令我也不知道是干嘛的,反正就是按照教程执行。然后就是检查是否安装成功。

go version  //检查是否安装成功

这一步反正我是没有成功,提示找不到go命令。
然后我又重新执行了一下 yum install golang,可是还是没有成功,提示No package golang available.
然后百度一番别人说要先安装epel这个东西,具体是啥我也不知道,yum install epel-release
再次执行 yum install golang还是没有成功,相同的提示,别人都应该已经成功,但是我也不知道为啥我的就不成功。

最后是安装官网教程安装成功成功的,https://golang.google.cn/dl/

image.png

可以直接下载到本地然后上传到服务器上面,也可以直接在服务器上面执行命令下载,我是直接执行命令下载的,我是下载到的/usr/local这个目录里面的。

cd /usr/local     //进入目录
wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz     //下载
tar -C /usr/local -xzf go1.12.5.linux-amd64.tar.gz    //解压

然后设置环境变量

vim /etc/profile
image.png
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/root/go

第一次使用这个vim,用着很别扭,可以直接把这个文件拉到本地用编辑器打开修改完成后在上传到服务器上面(虽然我很想这么干,但是还是强迫自己没有这么干,没有为什么就单纯的满足好奇心)。
然后执行检查命令终于成功了,这一步真的是卡了大半天,查各种资料加上对linux不熟耗费了很多时间,还好最终出来了。

image.png

5.安装Ngrok

5.1.下载Ngrok源码

cd /usr/local/

git clone https://github.com/inconshreveable/ngrok.git

会在当前目录生成ngrok文件夹

5.2. 生成证书

cd ngrok    

export NGROK_DOMAIN="ngrok.intolearn.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 device.key 2048

openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr

openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

5.3. 替换证书

//一行一行执行,然后会提示是否覆盖,输入 “y” 回车就可以了
cp rootCA.pem assets/client/tls/ngrokroot.crt

cp device.crt assets/server/tls/snakeoil.crt

cp device.key assets/server/tls/snakeoil.key

5.4. 生成服务端

GOOS=linux GOARCH=amd64 make release-server

5.5. 生成客户端

我的笔记本是window 64位,所以我生成的window版本,其他版本不知道对不对。

GOOS=windows GOARCH=amd64 make release-client    //windows 64位
GOOS=windows GOARCH=amd64 make release-client    //windows 32位

GOOS=darwin GOARCH=386 make release-client        //Mac OS 32位
GOOS=darwin GOARCH=amd64 make release-client      //Mac OS 64位

GOOS=linux GOARCH=amd64 make release-client       //Linux  64位

GOOS=linux GOARCH=arm  make release-client        //ARM 平台

服务端和客户端会在/usr/local/ngrok/bin文件夹中生成如下文件

image.png

6.启动服务端

cd /usr/local/ngrok

./bin/ngrokd -domain="ngrok.intolearn.com"  -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

//或者

./bin/ngrokd -domain="ngrok.intolearn.com"
  • -domain : 域名
  • -httpAddr : ngrok 用来转发http服务的端口,默认80端口
  • -httpsAddr : ngrok 用来转发https服务的端口,默认443端口
  • -tunnelAddr :ngrok用来跟客户端通讯的端口,默认4443端口

出现下图就表示成功了


image.png

tips: 第一次运行我是没有成功的,因为买的服务器防火墙并没有允许4443端口访问,自己添加上就可以了,阿里云是在安全组里面设置,ucloud里面是在外网防火墙里面设置。

image.png

7.启动客户端

在第5.5步中生成了客户端,具体位置在/usr/local/ngrok/bin/windows_amd64,把里面的文件下载到本地来,我放在了本地E:\Ngrok文件夹里面。

image.png

然后在同级目录中创建ngrok.cfgstart.bat文件。

  • ngrok.cfg文件内容
server_addr: "ngrok.intolearn.com:4443"
trust_host_root_certs: false
  • start.bat文件内容
ngrok -config=ngrok.cfg -subdomain haiyang 80
// haiyang就是你想要访问域名的前缀
// 80表示本地需要穿透的端口

创建完成后双击start.bat文件运行

image.png

这就表示已经成功了。

8.测试

在浏览器中输入http://haiyang.ngrok.intolearn.com

image.png

然后用手机开4G网络访问也能访问到,这样就已经搭建了。

9.将Ngrok(服务端)添加到服务

每次关闭Xshell,服务就关掉了,总不能一直开着窗口吧,怎么才能后台运行呢或者安装成服务设置开机启动?

9.1. 新建ngrok.service文件

cd /usr/lib/systemd/system   //进入目录

cat >>ngrok.service   //创建文件夹,回车后直接按`ctrl+d`

vim ngrok.service  //编辑文件

输入一下信息:

[Unit]
Description=Share local port(s) with ngrok
After=syslog.target network.target

[Service]
PrivateTmp=true
Type=simple
Restart=always
RestartSec=1min
StandardOutput=null
StandardError=null
ExecStart=/usr/local/ngrok/bin/ngrokd -domain=ngrok.intolearn.com -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443 %i
ExecStop=/usr/bin/killall ngrok

[Install]
WantedBy=multi-user.target

然后运行

systemctl daemon-reload 

systemctl start ngrok.service

9.2.文件参数说明

  • [Unit]部分主要是对这个服务的说明
  1. Description 用于描述服务
  2. After 用于描述服务类别
  • [Service]部分是服务的关键,是服务的一些具体运行参数的设置
  1. Type=forking是后台运行的形式;
  2. User=users是设置服务运行的用户;
  3. Group=users是设置服务运行的用户组;
  4. PIDFile为存放PID的文件路径;
  5. ExecStart为服务的具体运行命令;
  6. ExecReload为重启命令;
  7. ExecStop为停止命令;
  8. PrivateTmp=True表示给服务分配独立的临时空间
    [Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
  • [Install]部分是服务安装的相关设置,可设置为多用户的

  • systemctl 是管制服务的主要工具, 它整合了chkconfigservice功能于一体。

systemctl enable ngrok.service              #加入开机启动
systemctl daemon-reload                     #重新载入 systemd,扫描新的或有变动的单元
systemctl is-enabled iptables.service
systemctl is-enabled ngrok.service       #查询服务是否开机启动
systemctl enable ngrok.service           #开机运行服务
systemctl disable ngrok.service          #取消开机运行
systemctl start ngrok.service            #启动服务
systemctl stop ngrok.service             #停止服务
systemctl restart ngrok.service          #重启服务
systemctl reload ngrok.service           #重新加载服务配置文件
systemctl status ngrok.service           #查询服务运行状态
systemctl --failed                       #显示启动失败的服务

10.其他问题

10.1.问题1

现在有同事也需要用我这个域名,那么正常的方法就是在阿里云域名解析里面在解析一条记录就好了,但是这样感觉有点麻烦,要是客户端能随便定义名字就好了。

  • 解决方法
    在阿里云域名解析成*.ngrok
    image.png

    然后start.bat文件中就可以随便写名字了
ngrok -config=ngrok.cfg -subdomain 自定义域名前缀 自定义端口
// ngrok -config=ngrok.cfg -subdomain test2 8080

10.2. 问题

客户端每次启动都会打开窗口,并且要一直不关闭,关闭后就不行了,有的时候就会不小心关闭了,要是能安装成window服务就好了。

11.参考文章

Centos搭建Ngrok实现内网穿透
10分钟教你搭建自己的ngrok服务器
阿里云搭建自己的ngrok服务-实现内网穿透

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