Centos7搭建Ngrok内网穿透

一、安装gcc和git(用于下载ngrok源码)

yum install gcc -y
yum install git -y

二、安装go语言环境

yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386

三、检查环境安装

git --version //( >= 1.7 )
go version

四、在服务器上搭建Ngrok服务

1)、下载源码

cd /usr/local/

git clone https://github.com/inconshreveable/ngrok.git

2)、生成证书

cd ngrok    

export NGROK_DOMAIN="ngrok.zhqwfj.xyz"    //记得域名换成自己的

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

3)、替换证书

//一行一行执行,然后会提示是否覆盖,输入 “y” 回车就可以了
cp rootCA.pem assets/client/tls/ngrokroot.crt

cp device.crt assets/server/tls/snakeoil.crt

cp device.key assets/server/tls/snakeoil.key

4)、生成服务端

GOOS=linux GOARCH=amd64 make release-server

5)、生成客户端

我的是window 64位,所以我生成的window版本,其他版本不知道对不对。

GOOS=windows GOARCH=amd64 make release-client    //windows 64位
GOOS=windows GOARCH=amd64 make release-client    //windows 32位

GOOS=darwin GOARCH=386 make release-client        //Mac OS 32位
GOOS=darwin GOARCH=amd64 make release-client      //Mac OS 64位

GOOS=linux GOARCH=amd64 make release-client       //Linux  64位

GOOS=linux GOARCH=arm  make release-client        //ARM 平台

服务端和客户端会在/usr/local/ngrok/bin文件夹中生成如下文件

6)、启动服务端

cd /usr/local/ngrok

./bin/ngrokd -domain="ngrok.zhqwfj.xyz"  -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

//或者

./bin/ngrokd -domain="ngrok.zhqwfj.xyz"
  • -domain : 域名
  • -httpAddr : ngrok 用来转发http服务的端口,默认80端口
  • -httpsAddr : ngrok 用来转发https服务的端口,默认443端口
  • -tunnelAddr :ngrok用来跟客户端通讯的端口,默认4443端口

7)、启动客户端

/usr/local/ngrok/bin/windows_amd64里面的文件下载到本地来,我放在了本地E:\Ngrok文件夹里面。

然后在同级目录中创建ngrok.cfgstart.bat文件。

ngrok.cfg文件内容

server_addr: "ngrok.zhqwfj.xyz:4443"
trust_host_root_certs: false

start.bat文件内容

ngrok -config=ngrok.cfg -subdomain zhq 8080
// haiyang就是你想要访问域名的前缀
// 80表示本地需要穿透的端口

创建完成后双击start.bat文件运行

这就表示已经成功了。

注意:前置条件配置域名解析和安全组策略

域名:按自己实际情况,如果想多用户可以*.ngrok

安全组:允许80 443 4443(安自己实际配置的为准)

8)、测试

五、将Ngrok(服务端)添加到系统服务

每次关闭Xshell,服务就关掉了,总不能一直开着窗口吧,怎么才能后台运行呢或者安装成服务设置开机启动?

1)、新建ngrok.service文件

cd /usr/lib/systemd/system   //进入目录

cat >>ngrok.service   //创建文件夹,回车后直接按`ctrl+d`

vim ngrok.service  //编辑文件

输入一下信息:

[Unit]
Description=Share local port(s) with ngrok
After=syslog.target network.target

[Service]
PrivateTmp=true
Type=simple
Restart=always
RestartSec=1min
StandardOutput=null
StandardError=null
ExecStart=/usr/local/ngrok/bin/ngrokd -domain=ngrok.intolearn.com -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443 %i
ExecStop=/usr/bin/killall ngrok

[Install]
WantedBy=multi-user.target
  • [Unit]部分主要是对这个服务的说明
  1. Description 用于描述服务
  2. After 用于描述服务类别
  • [Service]部分是服务的关键,是服务的一些具体运行参数的设置
  1. Type=forking是后台运行的形式;
  2. User=users是设置服务运行的用户;
  3. Group=users是设置服务运行的用户组;
  4. PIDFile为存放PID的文件路径;
  5. ExecStart为服务的具体运行命令;
  6. ExecReload为重启命令;
  7. ExecStop为停止命令;
  8. PrivateTmp=True表示给服务分配独立的临时空间
    [Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
  • [Install]部分是服务安装的相关设置,可设置为多用户的

  • systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体。

systemctl enable ngrok.service              #加入开机启动
systemctl daemon-reload                     #重新载入 systemd,扫描新的或有变动的单元
systemctl is-enabled iptables.service
systemctl is-enabled ngrok.service       #查询服务是否开机启动
systemctl enable ngrok.service           #开机运行服务
systemctl disable ngrok.service          #取消开机运行
systemctl start ngrok.service            #启动服务
systemctl stop ngrok.service             #停止服务
systemctl restart ngrok.service          #重启服务
systemctl reload ngrok.service           #重新加载服务配置文件
systemctl status ngrok.service           #查询服务运行状态
systemctl --failed                       #显示启动失败的服务

然后运行:

systemctl daemon-reload 

systemctl start ngrok.service

猜你喜欢

转载自blog.csdn.net/xm393392625/article/details/130038459