在前面写了有篇利用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
//设置环境变量添加以下几行内容:
export GOROOT=你的go解压地址
export PATH=$PATH:$GOROOT/bin
source /etc/profile
//环境变量生效
go version
//查看go是否安装成功
git clone https://github.com/inconshreveable/ngrok.git
//克隆ngrok项目
//下面生成ssl证书,直接复制粘贴
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