2019年11月

利用ngrok搭建内网穿透

需求:由于涉及到一个敏感的数据,所以公司有个后台系统没有放再公网上,平时这个系统大部分时间是再家里使用,但是回家的时候偶尔也需要访问。
实验环境ubuntu16.04

apt update -y
apt install git -y
wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
tar -C /usr/local/ -zxvf go1.8.linux-amd64.tar.gz

vi /etc/profile最后添加

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
source /etc/profile
go version

下载ngrok

cd /usr/local/src
git clone https://github.com/inconshreveable/ngrok.git

准备证书,这一步非常重要

NGROK_DOMAIN="ciika.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

cp base.pem assets/client/tls/ngrokroot.crt

生成服务端

make release-server

生成linux客户端

GOOS=linux GOARCH=amd64 make release-client

生成之后再bin目录下多出了几个可允许的程序
后台启动服务端,其中我直接使用了80,注意开放指定的防火墙httpsAddr,httpsAddr以及4443

nohup ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="maxads.xyz" -httpAddr=":80" -httpsAddr=":8082" &

把上面生成的bin/ngrok客户端程序复制到你需要穿透的内网环境
编写ngrok.cfg

server_addr: ciika.com:4443
trust_host_root_certs: false

做上面之前确保ciika.com这个指向了穿透的服务器
subdomain和代理的内网端口是对应的
后台启动

nohup ./ngrok -subdomain admin -proto=http -config=ngrok.cfg -log=stdout 80 &

常见错误:
go环境是否设置错误
证书设置错误(Failed to read message: remote error: tls: bad certificate)