教你自己服务器搭建Ngrok

2022-11-29 16:55:38 浏览数 (1)

在前面写了有篇利用frp实现内网穿透,在此介绍另外一种,它的名字叫:Ngrok

官网:https://ngrok.com/ Github:https://github.com/inconshreveable/ngrok

一、为什么选择Ngrok? 1)提供免费内网穿透服务,免费服务器支持绑定自定义域名; 2)管理内网服务器,内网web进行演示; 3)本地WEB外网访问、本地开发微信、TCP端口转发; 4)无需任何配置,下载客户端之后直接一条命令让外网访问您的内网不再是距离. 5)更多功能等待你探索。

二、搭建所需: 1)VPS一台,作为中间服务器(推荐腾讯云、阿里云) 2)域名一个(最好是备案了的) 3)xshell、xftp类似远程服务器工具

三、服务端搭建: 1)演示系统为Centos7.2、主要防火墙开启后面所需要的端口,将域名解析到服务器IP、如:n.51it.wang,则需要把*.n.51it.wang和n.51it.wang都要解析到服务器IP。 远程登录服务器直接执行以下命令: yum install gcc git -y //按照依赖和git wget https://studygolang.com/dl/golang/go1.8.linux-amd64.tar.gz //下载Go源码包,或者直接yum install golang -y tar -zxvf go1.8.linux-amd64.tar.gz //解压Go源码包 vi /etc/profile //设置环境变量添加以下几行内容:

代码语言:javascript复制
export GOROOT=你的go解压地址
export PATH=$PATH:$GOROOT/bin

source /etc/profile //环境变量生效 go version //查看go是否安装成功 git clone https://github.com/inconshreveable/ngrok.git //克隆ngrok项目 //下面生成ssl证书,直接复制粘贴

代码语言:javascript复制
cd ngrok
NGROK_DOMAIN="n.51it.wang"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 5000 -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 5000 -out server.crt

//下面复制证书,若提示覆盖直接输入Y

代码语言:javascript复制
cp base.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目录下找到ngrokd和ngrok这两个文件。

nohup ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="n.51it.wang" -httpAddr=":82" -httpsAddr=":8082" -tunnelAddr=":4443" > /dev/null 2>&1 & //后台运行ngrok

GOOS=windows GOARCH=amd64 make release-client //windows系统(编译完成后在ngrok/bin/windows_amd64下) 注: 如果是32位系统,GOARCH=386; 如果是64为系统,GOARCH=amd64 如果要编译linux,GOOS=linux;如果要编译window,GOOS=windows

到此Ngrok服务端部署完成。

四、客户端配置: 将服务器端生成的windows_amd64文件下载到windows机器上。 在同一目录下新建一个ngrok.cfg文件,写入一下内容:

代码语言:javascript复制
server_addr: "你的域名:4443"
trust_host_root_certs: false
//若是要配置多个隧道可添加以下:
tunnels:
    www:
    proto: 
      http: "8080"
    mstsc:
        remote_port: 39001
        proto: 
        tcp: "127.0.0.1:3389"

启动客户端、cmd切换到目录下执行 ngrok.exe -config=./ngrok.cfg -subdomain aa 8080 //若是添加了多个配置启动为ngrok.exe -config=./ngrok.cfg start www mstsc 上面若需要在外网访问则是aa.n.51it.wang:82即可到内网的localhost:80

其他: http协议: ngrok.exe -config=./ngrok.cfg -subdomain aa -proto=http 8080 tcp协议: ngrok.exe -config=./ngrok.cfg -subdomain aa -proto=udp 8080

到此,客户端配置完成。

五、优化 1)若要使用服务器的80端口,但是服务器80端口已被其他业务端口占用,则可以才用nginx代理,下面提供一份nginx参考配置文件:

代码语言:javascript复制
upstream ngrok {
    server 127.0.0.1:82;
    keepalive 64;
}
server {
    listen 80;
    server_name n.51it.wang *.n.51it.wang;
    access_log  /www/wwwlogs/n.51it.wang.log;
    error_log  /www/wwwlogs/n.51it.wang.error.log;
    proxy_set_header "Host" $host:82;
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:82;
        proxy_pass_header Server;
        proxy_redirect off;
        proxy_pass  http://ngrok;

    }
    access_log off;
    log_not_found off;
}

记住修改完后重启nginx生效。

参考文章: https://blog.csdn.net/u010444106/article/details/80457985 https://www.javatang.com/archives/2018/04/17/05302345.html http://yangbingdong.com/2017/self-hosted-build-ngrok-server/index.html https://blog.csdn.net/thislirlu/article/details/53610418

0 人点赞