要想实现ngrok的内网穿透,需要准备一台外网可以访问的linux服务器,还需要一个注册域名解析到你的服务器ip地址,保证输入域名可以访问你的服务器是准备工作的第一步,我是使用的阿里云的服务器和域名

首先找到你注册的域名,注意要想解析域名一定要进行邮箱认证和实名认证

centos 好用稳定的内网穿透 linux内网穿透ngrok_linux

点击添加记录,这里需要添加两条记录,主机记录就是你的域名,一条记录主机记录不用填,另一条记录主机记录填写www(此处是为了以后可以直接使用www.你申请的域名来穿透到你的本地项目),解析线路默认即可,记录值填写你的服务器公网ip地址

centos 好用稳定的内网穿透 linux内网穿透ngrok_HTTP_02

centos 好用稳定的内网穿透 linux内网穿透ngrok_linux_03

两条记录添加完毕就可以开始配置你的ngrok内网穿透了,步骤如下(此处已CentOS为例,其他系统安装命令可能有差别,请自行寻找自己系统的安装方式)

1.ngrok需要依赖gcc 和 golang    安装完毕的请忽略

# 安装 gcc
 
yum -y install gcc
 
yum -y install gcc-c++
 
# 安装 golang , 下载地址在https://studygolang.com/dl中找的,想换版本可以在这里找
 
wget https://studygolang.com/dl/golang/go1.8.linux-amd64.tar.gz
 
tar -zxvf go1.8.linux-amd64.tar.gz
 
vi /etc/profile   #文件中加上环境变量
 
export GOROOT=你的go解压地址
 
export PATH=$PATH:$GOROOT/bin
 
source /etc/profile   #是环境生效
 
go version   #查看go是否安装成功   如果出现版本则证明安装成功

2.下载ngrok

#安装git 用于下载ngrok代码
 
yum -y install git
 
#克隆代码,文件夹命名为 ngrok-server,也可以填写,默认就是ngrok  可以放在任意位置
 
git clone https://github.com/inconshreveable/ngrok.git ngrok-server

3.ngrok配置

执行一下命令。使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。
证书生成过程需要一个NGROK_BASE_DOMAIN。 填写我们的域名地址

cd ngrok-server      #进入安装根目录
 
NGROK_DOMAIN="ngrok.xxxx.com"    #此处替换为注册的原域名  注意使用的是不加www的原域名
 
openssl genrsa -out rootCA.key 2048
 
openssl req -new -x509 -nodes -key rootCA.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -days 10000 -out server.crt

4.经过以上步骤,证书已经生成,下面复制证书到默认读取目录下

#复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt
#复制server.crt到assets/server/tls/并更名为snakeoil.crt
#复制server.key到assets/server/tls/并更名为snakeoil.key
 
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key

如果让你提示是否覆盖,输入y即可

5.生成客户端和服务器端

GOOS是系统类型  GOARCH是系统位数

  • Linux 平台 32 位系统:GOOS=linux GOARCH=386
  • Linux 平台 64 位系统:GOOS=linux GOARCH=amd64
  • Windows 平台 32 位系统:GOOS=windows GOARCH=386
  • Windows 平台 64 位系统:GOOS=windows GOARCH=amd64
  • MAC 平台 32 位系统:GOOS=darwin GOARCH=386
  • MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64
  • ARM 平台:GOOS=linux GOARCH=arm

此处我使用的是linux的服务端,windows的客户端

#win客户端
 
GOOS=windows GOARCH=386 make release-client
 
#linux服务端
 
GOOS=linux GOARCH=386 make release-server

第一次生成需要点时间,因为golang编译需要下载一些插件。

编译后的软件在bin目录下

centos 好用稳定的内网穿透 linux内网穿透ngrok_服务器部署_04

进入 linux_386服务器端文件夹配置启动服务器,启动linux服务端

domain为你上边 生成证书时填写的域名(此处重点注意 )

httpAddr,httpsAddr为访问服务端端口,这里设置为8090和8091(可自行设置)

tunnelAddr为给客户端提供的连接端口默认4443可自行修改,这里设置为8092(可自行设置)

此处设置的端口好需要在你的服务器添加规则允许入网访问,否则会无法链接

centos 好用稳定的内网穿透 linux内网穿透ngrok_服务器部署_05

添加安全组规则(端口范围是你上边设置的端口),输入惦记确认即可

centos 好用稳定的内网穿透 linux内网穿透ngrok_客户端_06

设置完毕启动linux的ngrok服务端

#前台运行
 
./ngrokd -domain="ngrok.xxxx.com"  -httpAddr=":8090" -httpsAddr=":8091" -tunnelAddr=":8092"
 
#后台运行
 
nohup ./ngrokd -domain="ngrok.xxxx.com"  -httpAddr=":8090" -httpsAddr=":8091" -tunnelAddr=":8092" &

6.客户端连接

拷贝上一步生成的window客户端到要映射的电脑,并手动创建配置文件和启动文件(三个文件一定要放在同一目录,否则需要改变文件内容修改到指定目录)

centos 好用稳定的内网穿透 linux内网穿透ngrok_HTTP_07

ngrok.cfg是配置文件

server_addr: ngrok.xxxx.com:8092   #此处是你生成证书时的域名和上一步启动时选择的链接端口号
trust_host_root_certs: false
 
tunnels:
 http-example:
  subdomain: www     #此处换成www  后期可以直接用www.你的域名访问项目
  proto:
   http: 8080      #服务器转发http请求到你本地的端口号
   https: 8081       #服务器转发https请求到你本地的端口号

proto

需要

所有

隧道协议名称,中的一个httptcptls

addr

需要

所有

将流量转发到此本地端口号或网络地址

inspect

所有

启用http请求检查

auth

HTTP

HTTP基本身份验证凭据以强制执行隧道请求

host_header

HTTP

将HTTP Host标头重写为此值,或preserve保持不变

bind_tls

HTTP

性结合的HTTPS或HTTP端点或两者truefalseboth

subdomain

HTTP

TLS

要请求的子域名。如果未指定,则使用隧道名称

hostname

HTTP

TLS

要求的主机名(需要保留名称和DNS CNAME)

crt

TLS

此路径上的PEM TLS证书可在本地转发之前终止TLS流量

key

TLS

PEM TLS此路径上的私钥,用于在本地转发之前终止TLS流量

client_cas

TLS

此路径上的PEM TLS证书颁发机构将验证传入的TLS客户端连接证书。

remote_addr

TCP

绑定给定地址上的远程TCP端口

 

启动文件start.bat内容 

#启动所有隧道
 
ngrok -config=ngrok.cfg start-all

 

启动成功显示如下,

centos 好用稳定的内网穿透 linux内网穿透ngrok_HTTP_08

此时输入网址访问测试

centos 好用稳定的内网穿透 linux内网穿透ngrok_centos 好用稳定的内网穿透_09

7.优化ngrok服务-设置开机启动

在ngrok程序目录下新建一个启动脚本,例如:start.sh

#path为当前目录的路径,启动脚本要写后台启动的脚本,后面的启动项目根据自己需要来写
 
path=/usr/local/ngrok

$path

./bin/linux_386/ngrokd -domain="ngrok.xxxx.com" -httpAddr=":8090" -httpsAddr=":8091" -tunnelAddr=":8092"

把ngrok程序制作成系统服务

在 /etc/rc.d/init.d目录下新建一个服务项目(ngrok),如下:

[plain] view plain copy
 
    #!/bin/sh  
    #chkconfig:2345 70 30  
    #description:ngrok  
      
    ngrok_path=/usr/local/ngrok
    case "$1" in
        start)
            echo "start ngrok service.."
            sh ${ngrok_path}/start.sh
            ;;
        *)
        exit 1
        ;;
    esac

给该文件赋权限755   

chmod 755 ngrok

 三,注册ngrok服务自启动

chkconfig --add  ngrok

测试服务是否能启动成功

service ngrok start

检查自启动的服务

chkconfig