centos7安装ngrok内网穿透

1 篇文章 0 订阅

一、环境要求:

1、有公网ip(云服务器)

2、有域名

二、搭建golang环境

wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz
tar -C /usr/local/ -zxvf go1.13.4.linux-amd64.tar.gz 
#配置系统变量
echo 'export PATH=$PATH:/usr/local/go/bin'>>/etc/profile
source /etc/profile 
go version 
//修改go代理环境
go env -w GOPROXY=https://goproxy.cn 

必须下载13版本golang,否则报错:
go get ngrok/...: malformed module path "ngrok": missing dot in first path element

三、搭建git环境

# 卸载自带的git,重新编译安装2.17版git
yum remove git 
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 
wget https://github.com/git/git/archive/v2.17.0.tar.gz 
tar -zxvf git-2.17.0.tar.gz 
cd git-2.17.0 
make prefix=/usr/local/git all 
make prefix=/usr/local/git install 
echo "export PATH=$PATH:/usr/local/git/bin" >> ~/.bashrc
source ~/.bashrc  
git --version

四、生成ssl证书

为域名sumengnan.com生成证书

openssl genrsa -out rootCA.key 2048 
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=sumengnan.com" -days 5000 -out rootCA.pem 
openssl genrsa -out server.key 2048 
openssl req -new -key server.key -subj "/CN=sumengnan.com" -out server.csr openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

此时目录下生成几个文件

server.crt(之后会用)、server.csrserver.key(之后会用)、rootCA.keyrootCA.pem(之后会用)、rootCA.srl

五、下载ngrok

git clone https://github.com/inconshreveable/ngrok.git
如果拉不下来直接下载解压也行
https://github.com/inconshreveable/ngrok/archive/refs/tags/1.7.1.tar.gz

替换密钥:把上一步生成的ssl证书和密钥替换原有ngrok的
cp rootCA.pem ngrok/assets/client/tls/ngrokroot.crt 
cp server.crt ngrok/assets/server/tls/snakeoil.crt  
cp server.key ngrok/assets/server/tls/snakeoil.key

六、生成ngrokd服务端和ngrok客户端

编译前说明:如果生成过程中存在git下载不下来,你有两种方法:

1、切换golang代理:

go env -w GOPROXY=https://goproxy.io,direct

下载可能会失败多次,多试几次也能拉下来

2、可以先下载到本地,然后上传到对应的报错的目录下

如:src/http://github.com

附网盘链接: https://pan.baidu.com/s/1nHtjnbO3UslYhNzxvm5cCg?pwd=oijv 提取码: oijv(解压替换整个src文件夹即可)

自己操作系统对应哪个,就执行如下的哪条命令(在ngrok文件夹下,此文件夹下必须有Makefile)。
386表示32位系统
amd64表示64位系统

cd ngrok
#linux服务端
GOOS=linux GOARCH=386 make release-server (32位) 
GOOS=linux GOARCH=amd64 make release-server(64位) 

#linux客户端
GOOS=linux GOARCH=386 make release-client (32位) 
GOOS=linux GOARCH=amd64 make release-client(64位)

Mac OS服务端
GOOS=darwin GOARCH=386 make release-server 
GOOS=darwin GOARCH=amd64 make release-server 

#Mac OS客户端
GOOS=darwin GOARCH=386 make release-client 
GOOS=darwin GOARCH=amd64 make release-client 

#windows服务端
GOOS=windows GOARCH=386 make release-server 
GOOS=windows GOARCH=amd64 make release-server 

#windows客户端
GOOS=windows GOARCH=386 make release-client 
GOOS=windows GOARCH=amd64 make release-client

生成成功后就可以在bin目录下发现生成的程序

[root@localhost bin]# ls 
go-bindata  ngrok  ngrokd 

ngrokd为服务端(云端)程序

ngrok为客户端程序

七、服务器(云端)启动

可以把ngrokd放到/usr/local/bin下,就可以直接使用ngrokd命令了

  • 把server.key放到/etc/ssl/keys下:cp -rf servcer.key /etc/ssl/certsngrok-server.key
  • 把servcer.crt放到/etc/ssl/certs下:cp -rf servcer.crt /etc/ssl/certsngrok-server.crt
ngrokd -tlsKey=/etc/ssl/keys/ngrok-server.key -tlsCrt=/etc/ssl/certs/ngrok-server.crt -domain="sumengnan.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

参数解释:

  • #-domain 为主域名
  • #-httpAddr 监听http请求的端口,再把请求转发到客户端
  • #-httpsAddr 监听https 请求的端口 ,再把请求转发到客户端
  • #-tunnerlAddr 客户端连接的端口,默认4443
  • #-tlsKey 服务端私钥文件
  • #-tlsCrt 服务端证书文件

最好把服务端(云端)制作成linux服务(方便守护ngrokd进程及开机自启),方法为:

1、把下面命令放到脚本中:vim /usr/local/bin/ngrok_start

#!/bin/bash
ngrokd -tlsKey=/etc/ssl/keys/ngrok-server.key -tlsCrt=/etc/ssl/certs/ngrok-server.crt -domain="sumengnan.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" -log=/var/log/ngrok.log -log-level=DEBUG

chmod 777 /usr/local/bin/ngrok_start

2、编辑服务文件:vim /lib/systemd/system/ngrokd.service

[Unit]
Description=ngrokd service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ngrokd_start
RestartSec=1s
Restart=always

[Install]
Alias=ngrokd
WantedBy=multi-user.target

3、启动服务

systemctl daemon-reload 重新加载unit配置

systemctl start ngrokd 启动服务

ctrl+c

ps -ef|grep ngrokd 查看一下是否有进程

systemctl enable ngrokd 设置开机自启

八、客户端启动

1、把ngrok文件传到客户端的/usr/local/bin下

2、在客户端新建ngrok配置文件

vim /etc/ngrok.cfg

server_addr: sumengnan.com:4443
trust_host_root_certs: false
tunnels:
 weixin:
  subdomain: weixin
  proto:
   http: 8002
 mysql:
  remote_port: 3306
  proto:
   tcp: 3306
 ssh:
  remote_port: 222
  proto:
   tcp: 22

配置说明:

server_addr为ngrok服务端的地址,4443对应服务端的-tunnerlAddr参数

trust_host_root_certs

tunnels表示要穿透的隧道,有3个名称分别为weixin、mysql、ssh

  1. weixin表示当http访问weixin.sumengnan.com时,服务端会把请求转发到客户端的8002端口上。
  2. mysql表示在服务端监听3306端口,并把tcp请求转发到客户端的3306端口上
  3. ssh表示在服务端监听222端口,并把tcp请求转发到客户端的22端口上

3、两种启动方式(前台启动):

  • ngrok -config /etc/ngrok.cfg start weixin #可以启动特定转发,如weixin
  • ngrok -config /etc/ngrok.cfg start-all 启动所有转发

服务端注意把防火墙端口打开,如果使用了http,注意添加域名解析

4、后台启动

由于ngrok客户端不能后台运行,所以需要安装screen

yum install screen

添加启动脚本

vim /usr/local/bin/ngrok_start

#!/bin/bash
screen -dmS ngrok
screen -x -S ngrok -p 0 -X stuff "ngrok -config=/etc/ngrok.cfg -log=/var/log/ngrok.log start-all"
screen -x -S ngrok -p 0 -X stuff $'\n'

chmod 777 /usr/local/bin/ngrok_start

5、添加开机启动

(1)、脚本添加开机启动文件中

vim /etc/rc.d/rc.local

# 文件尾增加一行

/usr/local/bin/ngrok_start

chmod +x /etc/rc.d/rc.local

重启客户端机器试下

(2)、做成linux服务(推荐)

vim /lib/systemd/system/ngrok.service

[Unit]
Description=ngrok service
After=network.target

[Service]
#Type=forking
ExecStart=/usr/local/bin/ngrok_start
RestartSec=10s
Restart=always
Group=root
User=root
[Install]
Alias=ngrok
WantedBy=multi-user.target

systemctl daemon-reload 重新加载unit配置

systemctl start ngrok 启动服务

systemctl enable ngrok 设置开机自启

九、完毕

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值