最新消息:重新回归WordPress,我要比较认真的开始更新我的博客了。

用ngrok部署类似花生壳的内网穿透

服务器相关 hanlei 2965浏览

做过网站的人对花生壳多少有些了解,但它的服务是收费的。用树莓派+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部署类似花生壳的内网穿透