你需要具备一下知识:
1. 懂得linux命令行下的操作
2. 熟悉ssh连接
3. 熟悉scp命令
4. 对外网环境和内网环境有一定理解
准备材料:
1. 内网环境需要被外网访问的计算机一台,linux和windows都支持
2. 能被公网访问,且已绑定域名的linux服务器一台
下载git命令的go语言环境
yum install gcc git go
通过git命令下载ngrouk源码
git clone https://github.com/inconshreveable/ngrok.git
进入下载的源码目录
cd ngrok
生成密钥文件
注意,下列命令中的域名换成你服务器绑定的域名
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=linhongzhao.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=linhongzhao.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
yes|cp rootCA.pem assets/client/tls/ngrokroot.crt
yes|cp device.crt assets/server/tls/snakeoil.crt
yes|cp device.key assets/server/tls/snakeoil.key
编译生成服务器端
编译成功后,在ngrouk的bin目录下会产生ngroukd程序
GOOS=linux GOARCH=amd64
make release-server
编译生成客户端
windows下将GOOS后面的linux换成windows即可
GOOS=linux GOARCH=amd64
make release-client
编译成功后,在ngrouk的bin目录下会产生ngrouk程序(注意和服务器程序ngroukd区分)
接下来我们需要将客户端程序下载到本地,可以在本地使用scp命令
scp <用户名>@<你的服务器ip>:<你的服务器上ngrouk所在目录> <你希望下载到本地的路径>
下载下来以后,新建一个config文件,名字随便取。
这里我直接在ngrouk同级目录下新建ngrouk.conf
注意server_addr后的域名必须与你上面编译时候使用的域名完全一致
# 必须是 域名:隧道端口 的格式
server_addr: "linhongzhao.com.com:4443"
# 自行编译无需验证ngrok官网证书
trust_host_root_certs: false
接下来我们首先需要启动ngrouk服务器程序
回到你刚刚编译ngrouk的外网服务器,启动ngrouk/bin下的ngroukd
注意domain后面的域名必须与你上面编译时的域名一致。httpAddr后面的内容表示你要监听http协议访问的端口
./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="linhongzhao.com" -httpAddr=":80"
如果喜欢关闭终端退出远程后,服务程序依然能够运行,可以使用nohup+&
nohup ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="zhangfengrui.com" -httpAddr=":80" &
接下来就可以启动客户端程序了
subdomain后面是你要接受转发的子域名
后面的数字是你要转发到本机的端口
比如我下面这条命令的意思就是连接到服务器后,接受test.linhongzhao.com,转发到本地的9501端口
./ngrok -config=ngrok.conf -subdomain=test 9501
启动后,如果有一行绿色的 Tunnel Status online
则内网穿透成功啦