做过网站的人对花生壳多少有些了解,但它的服务是收费的。用树莓派+OMV做了一个家用的NAS,但家里没有公网IP,在外面的时候无法访问。因为有自己的服务器,于是就想会不会有像花生壳这样的,但可以自己部署的软件。搜索后就发现了ngrok。
ngrok简介
ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。ngrok是用GO语言编码的,下载源码后可以直接编译出各种平台的服务器端和客户端。
编译ngrok
ngrok的服务端和客户端都是纯绿色软件,只需要用源码编译生成执行文件就行了。我的服务器系统为centos,下面的命令为centos命令。
ngrok的源代码托管在github上,可以先在ubuntu下安装git再将ngrok的源代码克隆到本地。
git clone https://github.com/inconshreveable/ngrok.git ngrok #将ngrok源代码克隆回本地 yum install golang #安装go语言
现在编译环境就装好了,再生成证书,就可以编译了。
生成证书
export NGROK_DOMAIN="ngrok.yourdomain.com" #设置环境变量,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 server.key 2048 openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
拷贝证书到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt #复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt cp server.crt assets/server/tls/snakeoil.crt #复制server.crt到assets/server/tls/并更名为snakeoil.crt cp server.key assets/server/tls/snakeoil.key #复制server.key到assets/server/tls/并更名为snakeoil.key
编译
由于go语言的特性,在编译时直接生成机器码,所以在运行过程中并不需要go的环境(挺牛X呀)。在ngrok目录下,运行一下命令分别生成对应的客户端与服务端。
GOOS如下可填windows和linux,GOARCH可填368、amd64、arm,对应各种运行环境。
#win服务端 GOOS=windows GOARCH=386 make release-server #win客户端 GOOS=windows GOARCH=386 make release-client #linux服务端 GOOS=linux GOARCH=386 make release-server #linux客户端 GOOS=linux GOARCH=386 make release-client
编译生成的文件默认在bin文件夹中。
部署ngrok服务器
首先要将你的域名解析到你的服务器上,因为客户端不指定子域名话ngrok服务器会随机分配一个子域名,所以如果是多用户的话需要将*.ngrok.yourdomain.com解析到服务器。当然ngrok.yourdomain.com也得解析。
将生成的ngrokd文件和刚生成的证书文件复制到任意目录就可以运行了
./ngrokd -tlsKey="snakeoil.key" -tlsCrt="snakeoil.crt" -domain="ngrok.yourdomain.com" -httpAddr=":801" -httpsAddr=":802"
部署ngrok客户端
将生成的对应平台的ngrok客户端文件复制到主机内,新建一个配置文件ngrok.cfg如下:
server_addr: "ngrok.yourdomain.com:4443" trust_host_root_certs: false
然后执行命令
ngrok.exe -subdomain kyt -config=ngrok.cfg 8080
-subdomain指定子域名,-config指向刚建的配置文件,后面8080为本地的端口号
linux下可以新建默认配置文件~/.ngrok如下
server_addr: ngrok.yourdomain.com:4443 trust_host_root_certs: false tunnels: nas: subdomain: "sub1" proto: http: 80 shell: remote_port: 2221 proto: tcp: 22 webshell: subdomain: "sub2" proto: https: 4200
然后使用命令全部映射
ngrok start-all
启动客户端并测试
打开浏览器,输入您映射后的域名http://kyt.ngrok.yourdomain.com:801就可以穿透内网访问您的web服务器了。
总结
具体原理一知半解,使用起来很简单方便,生成了ARM的客户端在我的树莓派上也可以用,非常NICE
本文为服务自己精简记录,原文地址如下:https://blog.csdn.net/zhangguo5/article/details/77848658?utm_source=5ibc.net&utm_medium=referral
转载请注明:HANLEI'BLOG » 用ngrok部署类似花生壳的内网穿透