美文网首页NetSkill
利用ngrok和阿里云访问内网主机端口

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

作者: 飘飘梭 | 来源:发表于2019-04-13 15:16 被阅读0次

           手头上有一台电脑,装的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和阿里云访问内网主机端口

        本文链接:https://www.haomeiwen.com/subject/kbalwqtx.html