centos下搭建ngrok服务器 内网穿透

最近经常需要做一些需要回调的接口, 本地服务不能收到回调,把服务发布到服务器又太麻烦了.

网上有些免费的ngrok服务用,比如Sunny-Ngrok 等, 但有时会掉线,就按照→大佬的博客←搭建了一个, 亲测贼好用.

首先你得有

一个备案的域名, 一个公网服务器, 之前一百多块买的腾讯一核两G服务器就派上用场了

ngrok 简介及作用

ngrok 是一款用 go 语言开发的开源软件,它是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可以做 TCP 端口转发,对于 Linux 可以将其映射到 22 端口进行 SSH 连接,Windows 的远程桌面可以将其映射到 3389 端口来实现.同理,如果要做 MySQL 的远程连接,只需映射 3306 端口即可. 最重要的是可以本地调试微信开发,极其方便

开发前注意事项

  1. 防火墙设置:服务器和客户端都要关闭对应端口的防火墙,否则无法通过连接使用.ngrok默认端口是4443.
  2. 编译客户端及服务器时要注意系统是32位和64位,不能编译错了,否则将无法使用.

安装前的准备

除了ngrok是需要git下来安装 其他都通过yum安装(方便管理)

域名设置

假设你的域名是xxx.com,服务器地址是123.123.123.123则你需要解析2条A记录值到服务器

  1. 第一条是 @.xxx.com 第二条是 *.xxx.com

     

  2. 这样就可以任意二级域名就是作为你ngrok客户端的地址了

如果想使用二级域名则解析以下2个A记录值到服务器,假设你想使用的二级域名是ngrok.xxx.com

  1. 第一条是 ngrok.xxx.com 第二条是 *.ngrok.xxx.com

     

  2. 这样 子域名.ngrok.xx.com的三级域名就是作为你ngrok客户端的地址了

  3. 说明:

  4. 主机记录就是域名前缀,常见用法有:

  5. www:解析后的域名为www.aliyun.com。

  6. @:直接解析主域名 aliyun.com。

  7. *:泛解析,匹配其他所有域名 *.aliyun.com。

  8. mail:将域名解析为mail.aliyun.com,通常用于解析邮箱服务器。

  9. 二级域名:如:abc.aliyun.com,填写abc。

  10. 手机网站:如:m.aliyun.com,填写m。

  11. 显性URL:不支持泛解析(泛解析:将所有子域名解析到同一地址)

我使用的是二级域名解析 也就是ngrok.xxx.com

下载常用依赖库

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++

安装go和git

yum -y install go git

我的是centos7.2 yum安装下来的git版本是1.8.3.1 go版本是1.8.3

要注意git版本必须大于1.7.9,go版本必须大于1.4,否则可能有意想不到的错误

开始安装ngrok

下载ngrok源码

个人习惯安装到/usr/local/目录下 如果你想安装到其他目录 则进入你想安装的目录

cd /usr/local/
git clone https://github.com/inconshreveable/ngrok.git ngrok

cd ngrok #进入ngrok目录,后面操作都是在ngrok目录下完成!

生成域名证书(确保在ngrok目录下)

#生成并替换源码里默认的证书,注意域名要修改为你自己的,这里是一个虚拟的测试域名
NGROK_DOMAIN="ngrok.xxx.com"

#测试一下有没有设置成功
echo $NGROK_DOMAIN #输出ngrok.xxx.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

之后会在 ngrok 目录下生成 root,device 等六个文件。 然后需要拷贝到配置的目录中,在编译的时候会使用这些文件。

cp -r rootCA.pem assets/client/tls/ngrokroot.crt
cp -r device.crt assets/server/tls/snakeoil.crt
cp -r device.key assets/server/tls/snakeoil.key

到这个地方,证书生成已经复制的准备工作就已经完成了。

生成服务器的ngrokd

make release-server

这样就会在bin目录下生成ngrokd 这个文件,就是我们ngrok的服务器程序

编译客户端ngrok(不同系统不同的命令如下)

  • 32位linux客户端: GOOS=linux GOARCH=386 make release-client

     

  • 64位linux客户端: GOOS=linux GOARCH=amd64 make release-client

  • 32位windows客户端: GOOS=windows GOARCH=386 make release-client

  • 64位windows客户端: GOOS=windows GOARCH=amd64 make release-client

  • 32位mac平台客户端:GOOS=darwin GOARCH=386 make release-client

  • 64位mac平台客户端:GOOS=darwin GOARCH=amd64 make release-client

  • ARM平台linux客户端: GOOS=linux GOARCH=arm make release-client

我这里是64位linux和64位windows客户端编译

GOOS=linux GOARCH=amd64 make release-client
GOOS=windows GOARCH=amd64 make release-client

依次执行这2个命令之后就会在bin目录里面生成所有的客户端文件,客户端平台是文件夹的名字,客户端放在对应的目录下,当前Linux平台客户端就直接在bin目录下一个ngrok的程序

配置启动服务器

  • httpAddr 是访问普通的http使用的端口号,用后面用 子域名.ngrok.xxx.com 来访问服务

     

  • httpsAddr 是访问的https使用的端口号,同上,只不过是需要https的服务访问才用这个端口(一般用不上)

  • tunnelAddr 是ngrok通道的端口号,这个端口是Ngrok用来通信的,所以这个端口在服务器上和客户端上设置必须要对应才可以正常的链接,默认端口是4443

完整命令

bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

我使用的

bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"

其中NGROK_DOMAIN对应的就是一开始设置过的域名地址。

要注意我这里使用的是80端口。要确保服务器上没有apachenginx占用80端口

配置windows客户端

首先先把bin目录下windows_amd64文件夹ftp或者sftp传到windows下并进入

然后新建一个 ngrok.cfg,在里面填写以下内容

server_addr: "ngrok.xxx.com:4443"
trust_host_root_certs: false

server_addr地址和服务器设置的 NGROK_DOMAIN=”ngrok.xxx.com” 中的地址保持一致,如果你服务器启动的时候设置了tunnelAddr端口则把4443也改成你设置的端口

启动客户端

完整命令

ngrok.exe -log=ngrok_log.txt -subdomain=test -config="ngrok.cfg" 80

我的命令

ngrok.exe -subdomain=test -config="ngrok.cfg" 80
  • 日志: -log=ngrok_log.txt 是记录ngrok的日志,如果前期调试的时候加上这个参数,如果不能访问就可以查看到底是什么问题

     

  • 子域名: -subdomain=test 是定义访问的时候的子域名,现在访问 test.ngrok.xxx.com 就可以访问到这一台机器上80端口的服务

ngrok

Tunnel Status online
Version 1.7/1.7
Forwarding https://test.ngrok.xxx.com -> 127.0.0.1:80
Forwarding http://test.ngrok.xxx.com -> 127.0.0.1:80
Web Interface 127.0.0.1:4040
# Conn 0
Avg Conn Time 0.00ms

online是绿色的 表示连接成功!

到这里不出意外的话就会启动成功了,访问test.ngrok.xxx.com的时候就是你本地的ip了.你可以通过apache或nginx配置test.ngrok.xxx.com域名指定你的目录开始使用啦~

你可以访问127.0.0.1:4040来看到所有对test.ngrok.xxx.com的请求~

代理本地的其他端口服务把本地启动客户端命令后的端口改掉就可以了

启动后

就能通过代理域名公网访问本地服务了

代理后所有通过ngrok的访问都会被代理转发到你的本地,再去访问你本机的服务,所以获取httpserverletrequest的ip永远都是127.0.0.1

启动客户端命令比较麻烦, 可以复制以下命令到客户端文件夹下新建.bat文件,双击输入端口号一键启动

@echo OFF
color 0a
Title Ngrok启动工具
Mode con cols=109 lines=30
:START
ECHO.
Echo                  ========================================================================
ECHO.
Echo                                         Ngrok客户端启动工具
ECHO.
========================================================================
Echo.
echo.
:TUNNEL
set /p port= 输入需要代理的端口号
echo.
ngrok.exe -log=logs/ngrok_log.txt -subdomain=test -config="ngrok.cfg" %port%

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值