• 当前位置: 主页 > Linux安装教程 > 环境部署 >

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问

    时间:2022-06-03 21:21来源:网络整理 作者:Linux先生 举报 点击:
    湖南成人高考 成人高考 成人高考 成人高考  成人高考 成人高考 
    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问,服务器,linux,内网,server,windows

    如果本地的项目在没有服务器的情况下,需要让他人访问;

    在自己的电脑上搭建一个web服务器,实现本地的访问和外部的访问。我们就要做内网穿透了,内网穿透就是别人通过外网能够访问到我们本地的服务器。

    市面上一些主流的内网穿透工具有:

    Ngrok,Natapp,花生壳,Ssh、autossh,Frp,Lanproxy,Spike

    这里介绍使用Ngrok工具。

    二:使用官网自带的服务器

    官网提供免费的服务器可使用,但是域名是随机的,只能临时使用,但是作为开发测试,给远方的甲方看到自己的电脑上的项目,还是足够了。

    傻瓜式操作,5分钟完成。

    官方网站:https://ngrok.com/

    自己下载相应的版本即可,我这里是Linux,选择linux即可。

    官方提供个三种安装方式,都可以使用。

    第一种:下载解压得到一个脚本文件,执行即可。

    第二种:apt安装即可。

    第三种:用snap工具安装。

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    我这里用snap安装:

    sudo snap install ngrok

    添加authtoken,authtoken需要注册登录进去才可以看到,我用google邮箱默认登录即可。

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    添加authtoken

    sudo ngrok config add-authtoken 29xKUhVc76mfOyPp3IYrXk6KIe7_4modhP9oq1B3beAWRKCtC

    添加完成后,直接执行需要启动的端口即可。如这里是web网站,就使用80端口启动。

    sudo ngrok http 80

    启动后,会随机分配一个域名,用这个域名就可以实现外网访问自己电脑内网了,启动后界面:

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    这里分配的域名为https://1414-96-9-67-134.ap.ngrok.io/,如果是甲方,给他用这个域名,就可以访问自己的电脑的web网页了。

    浏览器打开测试就可以访问了。

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    三:自己搭建ngrok服务器

    虽然官方有自己的服务器,需要更多的功能还是需要付费,比如自定义域名。所以这里可以自己搭建服务器。

    目前只有版本1开源可搭建,版本2以上没有开源,毕竟人家也要吃饭的。代码也要2016年停止更新,所以现在基本都是用这套代码的。

    github地址:https://github.com/inconshreveable/ngrok

    官方示意图:

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    1:域名解析

    这里是我自己的域名ywbj.cc 为例子配置。

    打开域名管理页面,建立两个A记录,把域名解析到服务器上,用来关联ngrok服务。

    添加*.ngrok.ywbj.cc和ngrok.ywbj.cc两条记录

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    到时候将通过 xxx.ngrok.ywbj.cc:端口 来访问代理服务器。

    2:安装git

    git一般是默认安装的,没有的话直接安装即可

    #centos yum install git #或者ubuntu sudo apt install git

    3:安装、配置go语言环境

    ngrok是基于go语言开发的,所以需要先安装go语言开发环境。

    我这里是ubuntu,直接安装

    sudo apt install golang -y

    安装完成后go version可查看版本是否安装成功。

    ubuntu@ubuntu:~# go version go version go1.13.8 linux/amd64

    安装好后,需设置go环境变量。

    由于我是在线安装,只需要配置两个环境变量。

    cd ~ # 到主目录 vi .bashrc # 打开配置文件,在末尾添加如下 export GOPATH=/usr/local/ngrok/ # 这个目录是go的工作目录,即等下要编译ngrok的目录 export NGROK_DOMAIN="ngrok.ywbj.cc" #ngrok服务二级域名,后面生成证书时的$NGROK_DOMAIN

    如果是自己下载的golang版本,则还需要配置添加其他两个环境变量,这里例子为:下载版本放在安装 /usr/local 路径:

    export GOroot=/usr/local/go # 这个目录是go的解压目录 export PATH=$GOROOT/bin:$PATH:$GOPATH/bin # 设置bin目录

    更改完成后,刷新生效配置

    source .bashrc

    4:下载获取 Ngrok 源码

    下载源码

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

    进入目录

    cd ngrok

    5:根据自己的域名生成证书

    openssl具体参数,可以自行研究,比较复杂,下面$NGROK_DOMAIN变量,就是环境变量已经配置好了。如果没有配置DOMAIN环境变量,也可以,只需要在执行前加条命令。

    NGROK_DOMAIN="ngrok.ywbj.cc"

    然后生成证书

    openssl genrsa -out base.key 2048 openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.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 base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

    生成完成,替换原来的默认证书

    cp base.pem assets/client/tls/ngrokroot.crt cp server.crt assets/server/tls/snakeoil.crt cp server.key assets/server/tls/snakeoil.key

    6:编译生成服务端和客户端

    ngrokd 为服务端的执行文件,ngrok为客户端的执行文件。

    make release-server release-client

    注:我这里服务器和客户端都是同一平台,所以我同时编译即可。如果客户端不同,分开执行。

    以windows、arm、linux客户端版本编译,如下:

    GOOS=linux GOARCH=amd64 make release-client GOOS=windows GOARCH=amd64 make release-client GOOS=linux GOARCH=arm make release-client

    不同平台使用不同的 GOOS 和 GOARCH,GOOS为go编译出来的操作系统 (windows,linux,darwin),GOARCH, 对应的构架 (386,amd64,arm),对应如下:

    Linux 平台 32 位系统:GOOS=linux GOARCH=386 Linux 平台 64 位系统:GOOS=linux GOARCH=amd64 Windows 平台 32 位系统:GOOS=windows GOARCH=386 Windows 平台 64 位系统:GOOS=windows GOARCH=amd64 MAC 平台 32 位系统:GOOS=darwin GOARCH=386 MAC 平台 64 位系统:GOOS=darwin GOARCH=amd64 ARM 平台:GOOS=linux GOARCH=arm

    编译出的程序会放在ngrok/bin/下,ngrok为客户端程序,ngrokd为服务器程序。

    7:启动服务器端

    ngrokd为服务器端。

    cd ngrok/ sudo ./bin/ngrokd -domain="ngrok.ywbj.cc" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443"

    上面domain为自己的域名,设置默认http,https端口分别为8080,8081,连接的tunnel(隧道端口)为4443端口。端口可以随意设置,并不是唯一的。

    启动后浏览访问:8080/,可以看到提示,也是启动了隧道。

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    查看端口情况,也可以看到已经启动。

    netstat -lntup|grep ngrok

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    8:客户端启动

    将ngrok通过工具,传送到需要穿透的客户端机器。

    在同一文件夹中,创建ngrok.cfg配置文件,并写入基础配置。

    sudo vim ngrok.cfg

    添加内容如下:

    server_addr: "ngrok.ywbj.cc:4443" trust_host_root_cert: false

    此文件位YAML格式,缩进用空格。

    server_addr后填写你的域名,要和之前写的一模一样。

    4443是固定端口,一般不改,但也可以在服务端更改。

    web也可以改成其他,启动客户端80端口。

    ./ngrok -subdomain web -config=ngrok.cfg 80

    第一次启动有点慢,耐心一点,可能需要等待重连一会。连接成功后,显示:

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    浏览器访问:8080/即可穿透访问内网客户端80端口。

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    9:使用固定端口配置

    如果想一次性转发多个端口或者想指定远程的对应端口,需要完善ngrok.cfg,如:

    server_addr: ngrok.lanthy.com:4443 trust_host_root_certs: false tunnels: ssh: remote_port: 1122 proto: tcp: 22 ss: remote_port: 8388 proto: tcp: 8388 ftp: remote_port: 20 proto: tcp: 20 ftp2: remote_port: 21 proto: tcp: 21 http: subdomain: www proto: http: 80 https: 192.168.1.22:443

    使用方法,启动特定的转发tunnel

    ./ngrok -config=ngrok.cfg start http

    当然也可以将所有配置全部转发

    ./ngrok -config ngrok.cfg start-all

    Linux搭建ngrok服务器,内网穿透服务,实现外网到内网的在线访问



    10:后台启动

    服务端:

    nohup ./bin/ngrokd -domain="ngrok.ywbj.cc" -httpAddr=:8080 -httpsAddr=":8081" -tunnelAddr=":4443" > /var/log/ngrokd.log 2>&1 &

    客户端:

    必须加上参数 -log=stdout,否则是不行的

    nohup ./ngrok -config ngrok.cfg -log=stdout start-all > /var/log/ngrok.log 2>&1 &

    到此,ngrok服务器搭建完成。

    推荐内容