前提:一台有外网IP的可提供服务的服务器(用来运行ngrok服务端)
Linux:
Golang:go1.18.10 linux/amd64
安装环境
安装gcc和git(用于下载ngrok源码)
# yum install gcc git -y
安装GO语言环境
# yum install golang
ngrok服务端,github地址: https://github.com/inconshreveable/ngrok
安装ngrok,进入自定义安装目录
# git clone https://github.com/inconshreveable/ngrok.git
# cd ngrok
配置证书信息,以生成专属的客户端(可写入shell脚本执行)
#!/bin/bash
NGROK_DOMAIN="ngrok.xxx.com"
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -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 -days 10000 -out device.crt
cp /usr/local/ngrok/keys/rootCA.pem /usr/local/ngrok/assets/client/tls/ngrokroot.crt
cp /usr/local/ngrok/keys/device.crt /usr/local/ngrok/assets/server/tls/snakeoil.crt
cp /usr/local/ngrok/keys/device.key /usr/local/ngrok/assets/server/tls/snakeoil.key
覆盖原本证书(一定要在编译生成客户端和服务端之前完成)
cp /usr/local/src/ngrok/certs/*.pem /usr/local/ngrok/assets/client/tls/ngrokroot.crt
cp /usr/local/src/ngrok/certs/*.pem /usr/local/ngrok/assets/server/tls/snakeoil.crt
cp /usr/local/src/ngrok/certs/*.key /usr/local/ngrok/assets/server/tls/snakeoil.key
编译生成客户端和服务端
编译生成ngrokd(服务端)
Linux服务端x86:
# GOOS=linux GOARCH=amd64 make release-server
编译生成ngrok(客户端)
Linux客户端x86:
# GOOS=linux GOARCH=386 make release-client
Linux客户端x64:
# GOOS=linux GOARCH=amd64 make release-client
MacOS客户端x86:
# GOOS=darwin GOARCH=386 make release-client
MacOS客户端x64:
# GOOS=darwin GOARCH=amd64 make release-client
windows客户端x86
# GOOS=windows GOARCH=386 make release-client
windows客户端x64
# GOOS=windows GOARCH=amd64 make release-client
编译生成的执行文件放在ngrok/bin下,ngrok为客户端,ngrokd为服务端。
ngrok-server参数说明: -httpAddr # http端口(通过外网IP或域名加上这个端口进行http访问内网) -httpsAddr # 同http,只是这个是https -tunnelAddr # 隧道端口,内网和外网建立的隧道端口,默认为4443(客户端配置连接的端口)
ngrokd启动命令:
# ./bin/ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443" -tlsKey=server.key -tlsCrt=server.crt &
查看进程端口状态
# netstat -tpln | grep ngrokd
查看进程状态
# ps -ef | grep ngrokd
ngrokd关掉命令:
# kill 进程ID
云环境记得开放服务器端口
客户端设置
以mac为例,新建配置文件ngrok.yml
server_addr: "xxx.com:4443" trust_host_root_certs: false tunnels: http: hostname: "www.xxx.com" proto: http: 80
启动ngrok客户端
# ./ngrok -config=ngrok.yml start-all