ngrok内网穿透工具服务器搭建
前言:
ngrok是一个内网穿透的解决方案,它使得你本地的服务器可以被局域网外的公网访问到。作为一个web 程序猿,使用ngrok可以使系统联调变的方便灵活
ngrok服务端会建立http和https服务,以及供客户端连接的服务,默认端口4443
它的工作流程如下:
访问端输入域名->DNS->ngrok服务端->请求映射到ngrok客户端->客户端返回响应到ngrok服务端->ngrok服务端返回响应到访问端
准备工作:
- 一台公网服务器
- 一个域名,*或二级均可(域名需要备案)
服务器环境:
aliyun ECS | 操作系统 CentOS7(amd64)
关于域名:一个是基础域名,可以是*或者二级,它用来为ngrok服务器本身提供外部访问。二就是基于基础域名的二级或者三级域名,用来映射到你的本地服务器。可以设置多个,取决于你的需要。例如 abc.com 和 ngrok.abc.com / ngrok2.abc.com,每个映射域名对应一个ngrok客户端
假设域名是 abc.com
如果你需要使用*域名作为基础域名,那么请将abc.com泛解析到服务器ip,然后将你需要使用的二级域名通过A记录解析到服务器ip,例如 ngrok.abc.com
如果你需要使用二级域名,那么先将你的二级域名(xxx.abc.com)通过A记录解析到服务器域名。然后将三级域名(比如 test.xxx)通过CNAME的方式解析到 xxx.abc.com,这次xxx.abc.com便成为了客户端与服务端的连接域名,test.xxx.abc.com则是映射域名
下面使用abc.com作为基础域名演示,如果你的基础域名是二级域名,替换即可
一,安装git和go
yum install gcc -y
yum install git -y
yum install mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y
二,下载源码
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok
mkdir cert
cd cert
export NGROK_DOMAIN="abc.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 device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
替换(提示overwrite输入y)
cp rootCA.pem ../assets/client/tls/ngrokroot.crt
cp device.crt ../assets/server/tls/snakeoil.crt
cp device.key ../assets/server/tls/snakeoil.key
四:生成服务端与客户端
切换回ngrok目录,以下命令按需生成,生成后的文件在bin目录下
linux服务端
GOOS=linux GOARCH=386 make release-server (32位)
GOOS=linux GOARCH=amd64 make release-server(64位)
#Mac OS客户端
GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client
#windows客户端
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
五、用SSH Secure Shell Client工具
将~/ngrok/bin/windows_amd64/里的文件下载到本地Windows下,如D:\ngrok
六、在D:\ngrok中新建ngrok.cfg配置文件
server_addr: "abc.com:8083"
trust_host_root_certs: false
tunnels:
http:
subdomain: "www"
proto:
http: "80"
https:
subdomain: "www"
proto:
https: "443"
ssh:
remote_port: 2222
proto:
tcp: "22"
mstsc:
remote_port: 52222
proto:
tcp: "192.168.0.107:3389"
以上 8083 80 443 与 远程开启的端口一致,
七、开启远程服务
注意:一定要根据自己的实际情况在服务器后台安全组规则中开启或删除
sudo ./bin/ngrokd -domain="abc.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":8083" &
-httpAddr=80 此配置用来指定映射域名http访问的端口 默认80
-httpsAddr=443 https的访问端口 默认443
-tunnelAddr=4443 客户端连接的端口 默认4443
以上端口,如若与系统其他服务有冲突,开启服务时请自行配置其他端口
八、启动客户端
在Windows中D:\ngrok新建文件 改名 start.bat:
ngrok -config=ngrok.cfg start http https ssh mstsc
直接双击运行
表示成功,
不成功的话看看自己的开启端口是否与config文件中对应
或查看服务器的远程端口是否在安全组中打开
【创建开机启动服务】
关于ngrok在远程开机自启问题
服务器后台开机启动运行ngrok服务端:
1.以下内容新建一个 start.sh 文件 放到 ~/ngrok/start.sh
~/ngrok/bin/ngrokd -domain="abc.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":8083" &
给权限:
chmod 755 ~/ngrok/start.sh
2.新建ngrok启动脚本文件
sudo vi /etc/init.d/ngrok
文件内容:
!/bin/sh
BEGIN INIT INFO
Provides: ngrok
Required-Start:
Required-Stop:
Default-Start: 2 3 4 5
Default-Stop: 0 1 6
Short-Description: Start or stop the ngrok Proxy.
END INIT INFO
ngrok_path=~/ngrok/
case "$1" in
start)
echo "start ngrok service.."
sh ${ngrok_path}/start.sh
;;
*)
exit 1
;;
esac
3.ngrok脚本文件 给权限
chmod 755
/etc/init.d/ngrok
4.添加启动服务 ngrok
chkconfig –add ngrok
5.测试服务是否能启动成功
service ngrok start
6.查看自启动的服务 是否有 nrgok !!
chkconfig
执行这个代码如果出现后面的就OK了!! ngrok 0:off 1:off 2:on 3:on 4:on 5:on 6:off
上一篇: SpringMVC执行流程图
下一篇: java 多线程