安装相关依赖

1
yum install -y git golang openssl

下载ngrok项目到本地

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

生成证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 设置环境变量,替换为自己的独立域名,也可不设置把后面$NGROK_DOMAIN替换称自己的域名
export NGROK_DOMAIN="xxx.jixian.io"

#进入到ngrok目录生成证书
cd /usr/local/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

# 将我们生成的证书替换ngrok默认的证书
mv rootCA.pem assets/client/tls/ngrokroot.crt
mv device.crt assets/server/tls/snakeoil.crt
mv device.key assets/server/tls/snakeoil.key

编译不同平台的服务端和客户端

1
2
3
4
5
6
7
8
9
# 编译服务端,根据服务端所需系统编译架构编译
# GOOS为系统 windows填windows,linux填linux,macOS填darwin !!!
# GOARCH为CPU架构 X86填386,X64填amd64 !!!
GOOS=linux GOARCH=amd64 make release-server

# 编译客户端,根据客户端所需系统编译架构编译
GOOS=linux GOARCH=amd64 make release-client

编译成功后会在`/usr/local/ngrok/bin`下生成服务端 `ngrokd` 和客户端 `ngrok`

启动服务端

1
2
3
4
5
6
# 在ngrok目录下执行
# 指定我们刚才设置的域名,指定http, https, tcp端口号,端口号不要跟其他程序冲突
./bin/ngrokd -domain="xxx.jixian.io" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8899"

# 如需后台运行则执行
nohup ./bin/ngrokd -domain="xxx.jixian.io" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8899" &

启动客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 直接在客户端所在同级目录下创建ngrok.cfg配置文件

# server_addr 为域名加服务端指定的tunnelAddr端口
# 我是把xxx.jixian.io服务器的2222、3333端口分别映射到客户端的22和3306端口

server_addr: xxx.jixian.io:8899
trust_host_root_certs: false
tunnels:
ssh:
remote_port: 2222
proto:
tcp: 22
mysql:
remote_port: 3333
proto:
tcp: 3306

如果我在外网需要ssh连接内网的客户端,相关命令为:

1
2
3
4
5
# ssh (p小写)
ssh -p 2222 root@xxx.jixian.io

# scp (P大写,必须放在文件命令前面)
scp -P 2222 a.txt root@xxx.jixian.io:~/