当前位置:网站首页>完整的搭建内网穿透ngrok详细教程(有图有真相)
完整的搭建内网穿透ngrok详细教程(有图有真相)
2022-08-03 16:58:00 【InfoQ】
如上 网上找到的都是不稳定的 还不如自己搭建一个。去问度娘了,发现了一堆。好吧,那就动手开干吧。
准备工作(其实也是硬性条件):
1.服务器一台
2.备案域名一个。(好多都说可以不备案,我也不知道真假,我的备了)
工具:
1.远程连接工具:xshell 或者 putty 。(甭管是啥 能连上好使就行 按照个人习惯选择)
2.下载工具:winscp(这是我最爱用的哈) 当然用命令也是可以的。
安装:
1.git安装
# 安装git
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++
这段命令是度娘告诉我的 那啥 要是不好使 就找个安装git的教程啥的 我这个执行完就ok了
由于ngrok是在go的基础上开发的所以先安装go(go语言完全不同 这不重要 安装好就可以)
2.安装go
我觉得服务器上下载go太慢了 所以我决定本地下载 在往服务器上传
下载地址:
Go下载 - Go语言中文网 - Golang中文社区
(我觉得这个挺好的)
下载linux版的 位数看好在下,这些细节问题一定要注意。
下载后 用winscp 上传到服务器下的 /usr/local/下

解压
tar -zxvf go1.12.4.linux-amd64.tar.gz /usr/local/
目录下即可看见 go 的目录
这时需要做一个软连接(为什么做 我也不知道啊 哪个大神可以指导一下)
# go的命令需要做软连接到/usr/bin
ln -s /usr/local/go/bin/* /usr/bin/
做完这些 最后设置全局的环境变量
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin
使环境生效
source /etc/profile
好了 到这 我们的go安装完了 检测安装是否安装成功
go version

go env

执行其中一个 出现对应的即可 代表安装成功
3.安装ngrok
为了查找方便 也安装到local目录下
cd /usr/local/
//ngrok下载地址
git clone https://github.com/inconshreveable/ngrok.git
这个地址可以git下载 再传上去 也可以fock到自己项目里
下载完成后可以看到一个 ngrok的文件夹

配置 ngrok的环境变量
export GOPATH=/usr/local/ngrok/
#这里写你自己的域名,不要前缀,比如www.abc.club 填写abc.club (域名已备案)
export NGROK_DOMAIN="abc.club"
4.生成ngrok证书并覆盖原有的证书
cd /usr/local/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
以上这个命令是拷来的 不必介意 就是生成证书的
覆盖证书 以下命令分着打 打完每一个 会让你确定 按 y 就可以
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
到此 安装配置结束
生成服务端
进入ngrok的目录
cd /usr/local/ngrok/
执行生成服务端 其中amd64代表64位的linux系统 如果是32位的 改为:GOARCH=386
GOOS=linux GOARCH=amd64 make release-server
生成成功后 会在ngrok的bin下有一个ngrokd文件夹 即代表成功

生成客户端
和服务端一样
cd /usr/local/ngrok/
GOOS=windows GOARCH=amd64 make release-client
会在ngrok的bin下有一个windows_amd64文件夹 即代表成功

下面是不同系统生成不同客户端的版本 替换GOODS 和GOARCH的值即可
#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
#ARM 平台:GOOS=linux GOARCH=arm
服务端的启动
在ngrock下执行
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="abc.club" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
参数说明:
#-domain 访问ngrok是所设置的服务地址生成证书时那个
#-httpAddr http协议端口 默认为80
#-httpsAddr https协议端口 默认为443
#-tunnelAddr 通道端口 默认4443
一定要注意 domain 代表 域名 那么这个域名就是之前你定义的环境变量的域名 千万不要错。
启动成功显示:

可以看出 监听80端口 443 端口 4443端口 并且30秒执行一次监听 启动成功
二级域名的映射设置
这个 跟简单 但很重要如下

用泛解析 解析一级域名 3级的还没研究 按照上面的解析就可以
客户端的启动
用winscp将生成的windows_amd64拉倒本地
里面只有一个ngrok.exe程序
同目录下新建ngrok.cfg文件 文件类型可自定义 但是执行时注意一致
ngrok.cfg内容
server_addr: "abc.club:4443"
trust_host_root_certs: false
server_addr: "abc.club:4443" 其中 abc.club还是你自己设置的那个域名 4443是服务区启动时的监听端口 保持一致 (改就都改 不改就不要动)
客户端有俩种启动方法:
1.cmd到windows_amd64根目录下
直接执行以下命令
ngrok -config=./ngrok.cfg -subdomain=test 8080
#参数说明
ngrok.cfg 刚才新建的文件
-subdomain=test test:穿透的域名前缀
8080 :穿透的域名映射端口
启动

代表成功 访问分配的域名即可
2.写一个.bat的脚本

boom.bat的内容
@echo OFF
color 0a
Title boom Ngrok启动工具
Mode con cols=109 lines=30
:START
set /p clientid= 请输入前缀:
echo.
set /p port= 请输入端口:
echo.
ngrok -config=ngrok.cfg -subdomain %clientid% %port%
PAUSE
goto TUNNEL
简单些 也可以弄一些图案什么的 根据个人喜好
访问分配的域名即可
图形界面
项目启动后 访问127.0.0.1:4040或者localhost:4040

将ngrok设置为系统服务 并且开机自启
编辑
vim /etc/rc.d/init.d/ngrok
ngrok内容
#!/bin/bash
#chkconfig: - 99 01
#description:ngrok
case "$1" in
start)
echo "start ngrok service.."
cd /usr/local/ngrok/
setsid ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="abc.club" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
;;
*)
exit 1
;;
esac
###参数说明:
### cd /usr/local/ngrok/:进入ngrok目录
### setsid:开始没有这个 结果关闭窗口 发现服务停掉了 加上目前好用
### setsid ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="abc.club" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" :启动ngrok服务端命令
给该配置文件权限
chmod 755 ngrok
注册为系统服务
chkconfig --add ngrok
然后查看是否添加成功
chkconfig

启动
service ngrok start
若能出现和之前直接打命令出现的监听30s界面 则添加成功
设置为开机自启
再添加为系统服务后 ngrok状态都是off 所以需要设置为开机自启
systemctl enable ngrok.service //加入开机启动
systemctl daemon-reload //重新加载配置文件
重启服务器 直接开启客户端检测
注意事项
服务端 启动成功 客户端连不上:
是因为 防火墙 端口没有开放443 4443 8080 等 都开放一下
开放后可以关闭防火墙 没什么大用
开了之后 还是连不上 这就需要去云服务器端设置安全组的入站规则:

设置好就好了 搭建的还算可以 没有太多的问题 一路很顺
码字码图不易 且看且珍惜
如有问题 欢迎提出指导 谢谢
边栏推荐
- 大型企业数据治理的现状和解决方案有哪些参考?_光点科技
- 出海,是泡泡玛特的“解药”吗?
- 组件通信-父传子组件通信
- leetcode:189. 轮转数组
- Detailed explanation of setting HiSilicon MMZ memory and OS memory
- SwinIR实战:详细记录SwinIR的训练过程
- leetcode:202. 快乐数
- 如何直击固定资产管理的难题?
- 兄弟组件通信context
- Huawei, Lenovo, BAIC, etc. were selected as the first batch of training bases for "Enterprise Digital Transformation and Security Capability Improvement" by the Ministry of Industry and Information Te
猜你喜欢
随机推荐
11. Container With Most Water
Description of the functional scenario of "collective storage and general governance" in the data center
新特性解读 | MySQL 8.0 在线调整 REDO
【目标检测】Focal Loss for Dense Object Detection
C专家编程 第3章 分析C语言的声明 3.5 typedef可以成为你的朋友
LeetCode·72.编辑距离·动态规划
Web3的开源为何会如此受到人们喜爱?
九种方法!教你如何读取resources目录下的文件路径
deepstresam的插件配置说明,通过配置osd,设置字体的背景为透明
组件通信-父传子组件通信
【Metaverse系列一】元宇宙的奥秘
掌握Redis的Sentinel哨兵原理,可助你拿到25k的offer
关于oracle表空间在线碎片整理
C# 构造函数如人之影子
TypeScript的配置文件tsconfig.json
为何微博又双叒叕崩溃了?
使用uniapp 封装一个request 请求
【无标题】
【There is no tracking information for the current branch. Please specify which branch you want to 】
102. 最佳牛围栏









