Github仓库地址:https://github.com/silentwu/ngrok/blob/master/README.md
- 生成自签名证书
使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,我们需要生成自己的证书,并提供携带该证书的ngrok客户端。
证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址693c358d.ngrok.com为例,其NGROK_BASE_DOMAIN就是"ngrok.com",如果你要提供服务的地址为"example.tunnel.tonybai.com",那NGROK_BASE_DOMAIN就应该 是"tunnel.tonybai.com"。
我们这里以NGROK_BASE_DOMAIN="tunnel.tonybai.com"为例,生成证书的命令如下:
export NGROK_DOMAIN="tunnel.tonybai.com"
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
将新生成的证书,覆盖cert目录中的ca.cer、server.crt及server.key文件
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
将新生成的证书,覆盖cert目录中的ca.cer、server.crt及server.key文件
cp rootCA.pem ca.crt
cp device.crt server.crt
cp device.key server.key
- 生成客户端,生成完后下载到本地电脑
docker run --rm -it -e DOMAIN="tunnel.tonybai.com" -e HTTP_ADDR=3389 -e HTTPS_ADDR=8888 -e TUNNEL_ADDR=8083 -v /data/ngrokcert:/cert -v /data/ngrok:/wln monkeyk/ngrok /bin/sh /start.sh
- 启动服务器ngrok
docker run -d -p 8083:8083 -p 3389:3389 -p 8888:8888 -e DOMAIN="tunnel.tonybai.com" -e HTTP_ADDR=3389 -e HTTPS_ADDR=8888 -e TUNNEL_ADDR=8083 -v /data/ngrokcert:/cert -v /data/ngrok:/wln monkeyk/ngrok
- 启动客户端
ngrok.cfg文件
server_addr: "tunnel.tonybai.com:8083"
trust_host_root_certs: false
tunnels:
http:
proto:
http: "3389"
https:
proto:
https: "8888"
启动:
ngrok -config ngrok.cfg start http https