Linux搭建ngrok内网穿透服务

一. 安装gcc
二.安装go环境
三.下载ngrok源码
1.解压
2.生成证书

cd ngrok
NGROK_DOMAIN="cutedou.com"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

注:
此处的"cutedou.com"需要替换成自己的域名, 我的这个顶级域名解析主机为ngrok安装服务器ip;

3.替换证书

cp base.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key

4.编译生成ngrokd服务端

#这里是交叉编译,linux系统GOOS=linux,64位系统GOARCH=amd64,32位系统GOARCH=386
#当前系统可用go env查看
GOOS=linux GOARCH=amd64
make release-server

5.前台启动服务, 若想后台启动,见附录脚本

./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="$NGROK_DOMAIN"  -httpAddr=":8888" -httpsAddr=":8889" -tunnelAddr=":9999"

6.出现下面信息,启动成功

[17:34:44 CST 2020/05/25] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
[17:34:44 CST 2020/05/25] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[17:34:44 CST 2020/05/25] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:8888
[17:34:44 CST 2020/05/25] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:8889
[17:34:44 CST 2020/05/25] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:9999

7.编译生成ngrok客户端
生成windows环境客户端如下:

#这里是交叉编译,linux系统GOOS=linux,64位系统GOARCH=amd64,32位系统GOARCH=386
#当前系统可用go env查看
GOOS=windows GOARCH=amd64 make release-client

生成的客户端在bin目录下:windows_amd64.

注意:
不同平台使用不同的GOOS和GOARCH
Linux平台32位系统:GOOS=linux GOARCH=386
Linux平台64位系统:GOOS=linux GOARCH=amd64

MAC平台32位系统:GOOS=darwin GOARCH=386
MAC平台64位系统:GOOS=darwin GOARCH=amd64

Windows平台32位系统:GOOS=windows GOARCH=386
Windows平台64位系统:GOOS=windows GOARCH=amd64

ARM平台:GOOS=linux GOARCH=arm

  1. 将生成的客户端windows_amd64拷贝到windows系统中
  2. 在ngrok.exe的同级目录下创建ngrok.cfg文件,配置如下:
server_addr: "cutedou.com:9999"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "www"
    proto:
      http: "80"
      
  https:
    subdomain: "www"
    proto:
      https: "80"
 
  ssh:
    remote_port: 2222
    proto:
      tcp: "22"

10.在ngrok.exe所在目录下打开DOS窗口, 执行以下命令:

ngrok.exe -config=ngrok.cfg start http https ssh

11.启动成功显示如下:
这里写图片描述

显示RECONNECTING,启动不来的原因可能:

①. ping 一下你的客户端cfg配置文件server_addr域名(此处的"cutedou.com")和带上subdomain的全域名, 确认可以访问(服务器设置禁Ping除外), 且响应IP是你ngrok所在服务器的IP. 我这里配置的是顶级域名, 所以两次ping是没有区别的, 但如果你server_addr配置的二级域名如aaa.cutedou.com, 而subdomain配置的"bbb", 则这两个域名(aaa.cutedou.com和bbb.aaa.cutedou.com)都需要ping一下;
②.确定ngrok服务端端口(tunnel端口,http端口和https端口)是开放的 .




附录:

1.后台启动服务端脚本start.sh:
#! /bin/bash
NGROK_PID=`ps -ef|grep ngrokd|grep -v 'grep'|awk '{print $2}'`
if [[ "${NGROK_PID[@]}" != "" ]];then
        # ngrok已启动
        echo "Ngrok already exist"
else
        # 启动ngrok
        cd /usr/local/soft/ngrok
        nohup ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="cutedou.com"  -httpAddr=":8888" -httpsAddr=":8889" -tunnelAddr=":9999" > start.logs 2>&1 &
fi

启动命令:

cd /usr/local/soft/ngrok
sh start.sh

完成!

如果执行脚本提示“syntax error: unexpected end of file”, 说明脚本换行风格什么的不正确, 执行以下命令即可:

vim start.sh
:set fileformat=unix
:wq
sh start.sh
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值