利用ngrok和阿里云访问内网主机端口

       手头上有一台电脑,装的ubuntu18.04,配置还可以,而我的阿里云服务器内存较小,跑不了太多服务,于是便想到通过ngrok将本地主机的端口映射出去。

        在配置内网映射前,首先我们要有一台云主机,如阿里云或者腾讯云,还要有一个属于自己的域名(最好是经过备案的)。

        step1:  dns泛域名解析

                所谓泛域名解析,就是在正常的域名前加上*. 如下图中的 *.ngrok

    setp2: 配置防火墙 

          ngrok默认使用4443端口,   在运行ngrok服务端时还需要一个监听监听端口,如8888, 在防火墙中要放开这两个端口。

    setp3: 下载安装ngrok和go语言

        ngrok需要go语言进行编译,首先安装go:

            sudo apt install go

        通过go version 查看go版本,如果版本小鱼1.7,可能会报错,这是要手动升级. 现将已有的go卸载,

              apt purge golang-go

        去官网下载最新的安装包 https://studygolang.com/dl, tar -xzvf  *.tar.gz 命令解压 并通过 export PATH=$PATH: /*/go/bin  添加环境变量

        接下来下载ngrok:

                git clone https://github.com/inconshreveable/ngrok.git     

         生成自签名证书:

                使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自建ngrokd服务,如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。证书生成过程需要一个NGROK_BASE_DOMAIN。 以ngrok官方随机生成的地址693c358d.ngrok.com为例,其NGROK_BASE_DOMAIN就是“ngrok.com”,如果你要 提供服务的地址为“example.ngrok.xxx.com”,那NGROK_BASE_DOMAIN就应该 是“ngrok.xxx.com”。这里呢,我替换成自己的域名 “ngrok.xxx.fun”.

                首先进入刚刚下载的ngrok目录

 cd ngrok

NGROK_DOMAIN="ngrok.xxx.com"

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

                cp server.crt assets/server/tls/snakeoil.crt

                cp server.key assets/server/tls/snakeoil.key

          接下来进行编译:

                make release-server release-client  

           编译完成后,会在bin目录下出现ngrok(客户端)和ngrokd(服务端)两个文件,代表编译成功。

       step4 运行服务端:

             ./ngrokd -tlsKey="../assets/server/tls/snakeoil.key" -tlsCrt="../assets/server/tls/snakeoil.crt" -domain="ngrok.yourdomain.com" -httpAddr=":8888" -httpsAddr=":444"> /home/logs/ngrok.log &        

               tips:在运行命令的最后加上 & 可以让程序在后台运行

                这时我们在浏览器访问ngrok.xxx.com:8888 访问,如果看到 Tunnel ngrok.xxx.com:8888 not found 说明服务端已经正常启动 了。

        step5 启动客户端:

            使用scp命令将阿里云上的ngrok客户端文件拷贝到本地主机

                    scp root@**.***.**.**:/*/ngrok/bin/ngrok /home/**/ngrok/

            接下来进入与客户端同一级目录添加一个名为ngrok.cfg的配置文件, 并输入:

                    server_addr: ngrok.***.com:4443

                    trust_host_root_certs: false

                    tunnels:

                        tunnel1:

                            subdomain: test1  # 次一级域名

                            proto:

                                    http: 80   #监听本地的80端口

                        tunnel2:

                               subdomain: test2

                               proto:

                                        http: 8080   

            tips: yaml文件不可以使用tab,只能用空格,否则会报错

            运行客户端:

                    ./ngrok -config ngrok.cfg start tunnel1 tunnel2       

        现在,我们已经完成了内网的端口映射。

参考博文:https://my.oschina.net/djsoft/blog/1786635

https://blog.csdn.net/qq_34292044/article/details/78559128

https://free-e.net/112

你可能感兴趣的:(利用ngrok和阿里云访问内网主机端口)