简介
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道,ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放
Ngrok版本
v1.7
安装 环境搭建 1 2 3 4 5 # 安装Go环境 $ sudo yum install golang $ go version # 设置环境变量 $ vi ~/.bash_profile
.bash_profile 编辑内容如下:
1 2 3 # GO环境 export GOPATH=$HOME/go PATH=$PATH:$HOME/.local/bin:$HOME/bin:$GOPATH/bin
编辑内容后执行source生效1 2 3 4 5 $ source ~/.bash_profile # 检查go环境是否安装成功 $ go env # 检查go版本 $ go version
配置 编译ngrok源码安装1 2 3 4 # 安装Git $ yum install -y git # 下载ngrok源码 $ git clone https://github.com/mamboer/ngrok.git
生成签名证书,假设使用域名为:domain.com
1 2 3 4 5 6 7 8 # 进入ngrok源码目录 $ cd ngrok # 生成签名证书 $ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=domain.com" -days 5000 -out rootCA.pem $ openssl genrsa -out device.key 2048 $ openssl req -new -key device.key -subj "/CN=domain.com" -out device.csr $ openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
查看当前目录文件
包含6个证书相关文件
1 2 3 4 5 6 -rw-r--r-- 1 root root 981 Dec 29 18:37 device.crt -rw-r--r-- 1 root root 895 Dec 29 18:37 device.csr -rw-r--r-- 1 root root 1679 Dec 29 18:37 device.key -rw-r--r-- 1 root root 1675 Dec 29 18:37 rootCA.key -rw-r--r-- 1 root root 1099 Dec 29 18:37 rootCA.pem -rw-r--r-- 1 root root 17 Dec 29 18:37 rootCA.srl
设置Ngrok默认证书
1 2 3 4 5 6 7 8 9 10 11 12 13 # 管理证书位置 cp rootCA.pem /root/ngrok/assets/client/tls/ngrokroot.crt cp device.crt /root/ngrok/assets/server/tls/snakeoil.crt cp device.key /root/ngrok/assets/server/tls/snakeoil.key # 编译 ## 编译服务端 $ make release-server ## 编译客户端 $ make release-client ## 编译所有 $ make release-all ## Window客户端编译 $ GOOS=windows GOARCH=386 make release-client
编译后可以在bin目录查看对应版本文件
1 2 3 4 -rwxr-xr-x 1 root root 2644407 Dec 28 22:26 go-bindata -rwxr-xr-x 1 root root 11097051 Dec 29 19:03 ngrok -rwxr-xr-x 1 root root 8618267 Dec 29 19:03 ngrokd drwxr-xr-x 2 root root 4096 Dec 29 19:04 windows_386
alias 命令名=”命令内容”
使用 服务端
当前是不使用SSL连接方式场景
配置DNS
将*.domain.com 域名解析到运行Ngrok的服务器IP
设置Ngrok全局变量 注意:为了更方便调用ngrokd命令,可以为其定义别名,操作如下:
.bash_profile 文件内容格式如下:
1 $ alias ngrokd=/root/ngrok/bin/ngrokd
执行source进行生效1 $ source ~/.bash_profile
运行Ngrok服务
ngrokd -tlsKey=”/root/ngrok/assets/server/tls/snakeoil.key” -tlsCrt=”/root/ngrok/assets/server/tls/snakeoil.crt” -domain=”domain.com”
正确运行显示内容:
1 2 3 4 5 [19:13:28 CST 2017/12/29] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified [19:13:28 CST 2017/12/29] [INFO] (ngrok/log.Info:112) Listening for public http connections on 0.0.0.0:80 [19:13:28 CST 2017/12/29] [INFO] (ngrok/log.Info:112) Listening for public https connections on 0.0.0.0:443 [19:13:28 CST 2017/12/29] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on 0.0.0.0:4443 [19:13:28 CST 2017/12/29] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
客户端(Window) 将在服务器编译好的Window客户端(ngrok.exe)下载到本地, 创建ngrok.cfg配置文件
配置内容如下:
1 2 server_addr: "domain.com:4443" trust_host_root_certs: false
打开cmd.exe运行本地ngrok.exe
1 2 3 4 $ cd ngrok.exe存放目录 # 运行window客户端,访问地址为:cotide.domain.com 对应本地的127.0.0.1:8080 $ ngrok.exe -proto=http -log=stdout -subdomain cotide -config=ngrok.cfg 8080
查看 http://127.0.0.1:4040 可以查看目前隧道情况
遇到的问题 问题1: /lib/lsb/init-functions: No such file or directory 解决方法:
1 $ yum install '/lib/lsb/init-functions'
问题2: Ngrok 后台运行 解决方法:
服务端后台运行 1 2 $ screen -S ngrokd $ ./ngrokd -tlsKey="/root/ngrok/assets/server/tls/snakeoil.key" -tlsCrt="/root/ngrok/assets/server/tls/snakeoil.crt" -domain="domain.com"
客户端后台运行 1 2 $ screen -S ngrok $ ./ngrok -subdomain code -config=/root/Ngrok/ngrok.cfg 80
问题3: TCP 穿透 解决方法:
1 2 3 4 # window系统 $ ngrok.exe -log=stdout -subdomain db -config=ngrok.cfg -proto=tcp 3306 # linux系统 $ ./ngrok -subdomain login -config=/root/ngrok/ngrok.cfg -proto=tcp 22
优化管理 1 2 # 定义start.sh脚本 $ vi start.sh
start.sh文件内容如下:
1 nohup /root/ngrok/bin/ngrokd -tlsKey="/root/ngrok/assets/server/tls/snakeoil.key" -tlsCrt="/root/ngrok/assets/server/tls/snakeoil.crt" -domain="domain.com" &
使用:
参考