Ngrok端口转发

问题描述:手机(或者其他设备)与开启抓包工具的机器不在同一个网关下,导致手机(或者其他设备)无法通过设置代理(局域网代理)来抓包。

Go编译环境

源码安装

  1. http://www.golangtc.com/download
  2. 将其解压到/usr/local目录下:tar -C /usr/local -xzf go1.7.linux-amd64.tar.gz
  3. 设置环境变量
mkdir $HOME/go
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
source  $HOME/.bashrc

包管理器安装

Go从1.5版本开始跨平台交叉编译变得简单,不再必须通过源码安装。

sudo apt-get install build-essential golang mercurial git subversion

准备Ngrok 1.x 的源码

git clone https://github.com/inconshreveable/ngrok.git ngrok
### 请使用下面的地址,修复了无法访问的包地址
git clone https://github.com/tutumcloud/ngrok.git ngrok
cd ngrok

域名

所用域名需要两条A记录,比如我们用域名tunnel.example.com

  • tunnel.example.com -> 服务器IP
  • *.tunnel.example.com -> 服务器IP (泛解析)

生成自签名证书

export NGROK_DOMAIN="tunnel.example.com",生成自签名ssl证书

cd ngrok

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

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

编译

生成服务端与客户端

make release-server release-client
GOOS=windows GOARCH=amd64 make release-server release-client
GOOS=darwin GOARCH=amd64 make release-server release-client

启动

服务端

将编译出来的ngrokd和生成的证书device.keydevice.crt上传至公网服务器。

./ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="tunnel.example.com" -tunnelAddr=":4443" -httpAddr=":9991" -httpsAddr=":9992"
  • tunnelAddr:ngrok通信端口
  • httpAddr:服务器上的http端口
  • httpsAddr:服务器上的https端口

后台运行:nohup your_command &

客户端

在编译出来的ngrok的同目录新建ngrok.cfg文件。

server_addr: tunnel.example.com:4443
trust_host_root_certs: false
tunnels:
   mitm: # 配置名称
    remote_port: 9999 # 远程端口
    proto:
      tcp: 8888 # 本地端口以及对应协议
   web:
    remote_port: 8080
    proto:
      http: 80
说明:上面的示例配置文件,server_addr填写的是服务器域名以及ngrok通信端口,tunnel下面的是具体的端口转发配置,比如说要启动mitm这个配置,如下。

ngrok -config=ngrok.cfg start mitm

如此,如果要访问本地的8888端口只需要访问tunnel.example.com9999端口即可。

More

反向SSH

ssh -N -f -g -R 9999:localhost:8888root@remote-server-example.com

9999为远程端口,8888为本地端口。

Published At
Tagged with
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Permissions beyond the scope of this license may be available at https://wayjam.me.