写点什么

完整的搭建内网穿透 ngrok 详细教程(有图有真相)

作者:Geek_32c728
  • 2022 年 8 月 03 日
  • 本文字数:3024 字

    阅读完需:约 10 分钟

如上 网上找到的都是不稳定的 还不如自己搭建一个。去问度娘了,发现了一堆。好吧,那就动手开干吧。

准备工作(其实也是硬性条件):

1.服务器一台


2.备案域名一个。(好多都说可以不备案,我也不知道真假,我的备了)

工具:

1.远程连接工具:xshell 或者 putty 。(甭管是啥 能连上好使就行 按照个人习惯选择)


2.下载工具:winscp(这是我最爱用的哈) 当然用命令也是可以的。

安装:

1.git 安装

# 安装gityum -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/goexport 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/ngrokopenssl 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 OFFcolor 0aTitle boom Ngrok启动工具Mode con cols=109 lines=30:STARTset /p clientid=   请输入前缀:echo.set /p port=   请输入端口:echo.ngrok -config=ngrok.cfg -subdomain %clientid% %port%PAUSEgoto 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 等 都开放一下


开放后可以关闭防火墙 没什么大用


开了之后 还是连不上 这就需要去云服务器端设置安全组的入站规则:




设置好就好了  搭建的还算可以 没有太多的问题 一路很顺


码字码图不易 且看且珍惜


如有问题 欢迎提出指导 谢谢


发布于: 刚刚阅读数: 5
用户头像

Geek_32c728

关注

还未添加个人签名 2022.08.02 加入

还未添加个人简介

评论

发布
暂无评论
完整的搭建内网穿透ngrok详细教程(有图有真相)_Geek_32c728_InfoQ写作社区