# 安装 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是否安装成功
#安装git 用于下载ngrok代码
yum -y install git
#克隆代码,文件夹命名为 ngrok-server,也可以填写,默认就是ngrok
git clone https://github.com/inconshreveable/ngrok.git ngrok-server
完成之后(这里下载到usr/local下了)
执行一下命令。使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。
证书生成过程需要一个NGROK_BASE_DOMAIN。 填写我们的域名地址
cd ngrok-server #进入安装根目录
NGROK_DOMAIN="ngrok.xxxx.com"
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
完成之后
#复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt
cp rootCA.pem assets/client/tls/ngrokroot.crt
#复制server.crt到assets/server/tls/并更名为snakeoil.crt
cp server.crt assets/server/tls/snakeoil.crt
#复制server.key到assets/server/tls/并更名为snakeoil.key
cp server.key assets/server/tls/snakeoil.key
上面会让你提示是否覆盖,输入y即可。如果不想每次都提示,可以使用如下命令,这是一个骚操作。
cp前面加上一个\,然后加上-rf即可没有提示,直接覆盖。
\cp -rf rootCA.pem assets/client/tls/ngrokroot.crt
\cp -rf server.crt assets/server/tls/snakeoil.crt
\cp -rf server.key assets/server/tls/snakeoil.key
#win服务端
GOOS=windows GOARCH=386 make release-server
#win客户端
GOOS=windows GOARCH=386 make release-client
#linux服务端
GOOS=linux GOARCH=386 make release-server
#linux客户端
GOOS=linux GOARCH=386 make release-client
我只用到linux服务器端和win客户端,我只需要执行如下即可。
根据自己需要生成
#linux服务端
GOOS=linux GOARCH=386 make release-server
#win客户端
GOOS=windows GOARCH=386 make release-client
第一次生成需要点时间,因为golang编译需要下载一些插件。
编译后的软件在bin目录下
进入 linux_386服务器端文件夹配置启动服务器,启动linux服务端
httpAddr,httpsAddr为访问服务端端口,可以设置为80和443,访问的时候不用加端口号.
tunnelAddr为给客户端提供的连接端口默认4443可自行修改,这里改为8090
cd linux_386
#前台运行
./ngrokd -domain="ngrok.xxxx.com" -httpAddr=":8090" -httpsAddr=":8091" -tunnelAddr=":8092"
#后台运行
nohup ./ngrokd -domain="ngrok.xxxx.com" -httpAddr=":8090" -httpsAddr=":8091" -tunnelAddr=":8092" &
拷贝上一步生成的window客户端到要映射的电脑
并手动创建配置文件和启动文件
ngrok.cfg是配置文件
server_addr: ngrok.xxxx.com:8092
trust_host_root_certs: false
tunnels:
ssh-example:
remote_port: 8093
proto:
tcp: 22
sssh-example:
emote_port: 3389
proto:
tcp: 3389
ftp-example:
remote_port: 21
proto:
tcp: 21
http1-example:
subdomain: demo1
proto:
http: 8080
https: 8081
http2-example:
subdomain: demo2
proto:
http: 8083
proto |
需要 所有 |
隧道协议名称,中的一个http ,tcp ,tls |
---|---|---|
addr |
需要 所有 |
将流量转发到此本地端口号或网络地址 |
inspect |
所有 |
启用http请求检查 |
auth |
HTTP |
HTTP基本身份验证凭据以强制执行隧道请求 |
host_header |
HTTP |
将HTTP Host标头重写为此值,或preserve 保持不变 |
bind_tls |
HTTP |
性结合的HTTPS或HTTP端点或两者true ,false 或both |
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
pause
#启动指定隧道
ngrok -config=ngrok.cfg start ssh-example sssh-example
启动成功后
在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
reboot重启就实现自启后台运行了
注意:ngrok.xxxx.com 和 *.ngrok.xxxx.com要进行域名解析
详细文档请查看 http://www.ngrok.cn/