【环境部署系列】十分钟建自己的ngrok服务器,文末附免费ngrok客户端资源

环境部署系列】十分钟建自己的ngrok服务器,文末附免费ngrok客户端资源
一、必要条件
首先要有一台服务器,用来搭建ngrok的服务器
申请域名【如demo.com】(必须实名认证,才可以解析到你自己的公网ip)
首先域名解析到你的公网ip上,ngrok.demo.com–> **
再添加一条泛解析到你的公网ip上,*.ngrok.luckylxh.top–>**
ps:必须有公网ip,并且可以正常访问【本次测试使用的是CentOS 7 64位】
ps:一般生效时间是10分钟,3和4都必须进行配置,后面的域名都要换成自己的

二、环境准备

2.1 安装git

安装git

yum install git

2.2 安装GO语言环境

安装Go语言环境

yum install golang
检查下go的env环境变量【如下信息显示环境安装成功】

检查Go语言环境

go env
GO111MODULE=""
GOARCH=“amd64”
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH=“amd64”
GOHOSTOS=“linux”
GONOPROXY=""
GONOSUMDB=""
GOOS=“linux”
GOPATH="/root/go"

三、配置ngrok

3.1 下载ngrok

github.com 下载 ngrok源码

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

3.2 证书设置

3.2.1 生成证书
域名【ngrok.demo.com】换成自己的【注意一条一条执行】

生成证书

cd /usr/local/ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj “/CN=ngrok.demo.com” -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj “/CN=ngrok.demo.com” -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

3.2.2 替换证书
过程会让你输入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

3.3 生成客户端和服务端

3.3.1 编译生成服务端
cd /usr/local/ngrok/
GOOS=linux GOARCH=amd64 make release-server

3.3.2 编译生成客户端

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
生成客户端文件位置

/usr/local/ngrok/bin
四、使用ngrok

4.1 启动服务器端
cd /usr/local/ngrok/bin
./ngrokd -domain=“ngrok.demo.com” -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443"

-httpsAddr=":8081" -tunnelAddr=":4443" 都可以省略

此方法启动服务器,推出ssh客户端会停止ngrok服务,解决方案请往后看

4.2 客户端使用

4.2.1 下载客户端
cd /usr/local/ngrok/bin/windows_amd64
sz ngrok.exe

4.2.2 创建客户端配置文件ngrok.cfg

新建ngrok.cfg

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

4.2.3 新建startup.bat

新建startup.bat文件,文件内容:

ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=test1 8083

保存双击启动

4.3 配置ngrok后台运行
ngrok 加入系统服务及开机启动

4.3.1 创建ngrok.service文件
vi /usr/lib/systemd/system/ngrok.service

4.3.2 写入服务文件内容

在CentOS 7上利用systemctl添加自定义系统服务

[Unit]
Description=ngrok
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=1min
ExecStart=/usr/local/ngrok/bin/ngrokd -domain=ngrok.demo.cn -httpAddr=:8080 -httpsAddr=:8081 -tunnelAddr=:4443 %i
ExecStop=/usr/bin/killall ngrok
PrivateTmp=true

[Install]
WantedBy=multi-user.target

4.3.3 启动服务

重载系统服务:

  1. systemctl daemon-reload

设置开机启动

  1. systemctl enable ngrok.service

启动服务

  1. systemctl start ngrok.service
    常用命令

重载系统服务:

systemctl daemon-reload

#设置开机启动:
systemctl enable ngrok.service

#启动服务:
systemctl start ngrok.service

#停止服务:
systemctl stop ngrok.service

4.4 ngnix配置

ngrok

upstream ngrok {
server 127.0.0.1:8080;
keepalive 64;
}

ngrok 穿透

server {
listen 80;
server_name *.ngrok.demo.com;
location / {
proxy_pass http://ngrok;
proxy_redirect off;
proxy_set_header Host $http_host:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
expires 5s;
}
}
此时客户端显示被映射的域名会带端口号:8080,不影响正常使用

5 和Nginx公用80端口的解决方案
通过查询资料,我注意到了一个地方,就是我们的服务器大部分是有公网和内网之分的,所以网卡也就有了两个,所以可不可以让nginx监听公网80端口,ngrok监听内网80端口不就完美解决这个问题了吗?

5.1 查看自己服务器的网卡数量
ifconfig -a

如上图所示:我只有一个内网的网卡,ip是 172.27.0.14 ,估计我的公网ip是别的服务器转发给我的,不过就算我只有一个网卡也是可以实现我刚才所说的方式

5.2:只有一个网卡,再配置一个网卡
172.27.0.15(如果你有两个网卡请忽略这一步)

ifconfig eth0:0 172.27.0.15/24 up
然后在通过ifconfig -a 命令查看网卡

如上图:现在我有了 172.27.0.14 (内网,但实际我的公网ip是别的服务器直接转发给这个ip的,所以这个ip对于我这个服务器来说,我的外网请求都来自这个ip) ,172.27.0.15(内网,自己添加的)

5.3 修改ngrok.service(让他监听 内网的80端口)
[Unit]
Description=ngrok
After=network.target

[Service]
ExecStart=/usr/local/src/ngrok/bin/ngrokd -tlsKey=/usr/local/src/ngrok/server.key -tlsCrt=/usr/local/src/ngrok/server.crt -domain=ngrok.luckylxh.top -httpAddr=172.27.0.15:80 -httpsAddr=172.27.0.15:443

[Install]
WantedBy=multi-user.target
保存然后重载,和启动

systemctl daemon-reload
systemctl start ngrok.service
5.4 修改nginx.conf(监听公网的80端口,并且对ngrok的请求转发给内网的80端口)
server {
listen 172.27.0.14:80;
server_name *.ngrok.sikacode.com;
location / {
proxy_pass http://172.27.0.15:80;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 1;
proxy_send_timeout 120;
proxy_read_timeout 120;
}
}:
重启nginx,然后启动客户端

到此,给你分配的域名上也没有讨厌的81端口了,后面你就可以愉快的玩耍了!!!

最后再补充一点:

ifconfig eth0:0 172.27.0.15/24 up
这个命令添加的假的网卡,在服务器重启后会失效的,要再次添加。这个大致有两个方案解决

第一个: 修改ip有关的配置文件(对我这种linux仅仅是能用的人太难了),

第二个: 在服务启动后自动执行一个脚本文件,把假的网卡自动的添加上。

  1. 提供免费ngrok代理【QQ群: 205260377进群可得客户端】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值