搭建内网映射服务
一、ngrok介绍及场景应用
1、介绍
ngrok是非常流行的反向代理服务,可以进行内网穿透,支持80端口以及自定义tcp端口转发。这样你就可以运行本地的程序,而让别人通过公网访问了
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放
2、场景使用
因为做开发很多程度需要不断同步git服务器或者什么来做一些外部对接的测试
每次更新都要push到远端,而且有时候代码还未必正式写完,不仅影响git提交不美观,而且麻烦,所以ngrok的内网穿透就显神威了!
网上有ngrok的国内服务了,不过有时候不稳定,下面跟我一起来架设自己的ngrok服务吧
二、环境准备
1、需要的材料
解析到云服务器或vps的ip (如: ngrok.along.top)
2、安装git
(1)安装git,我安装的是2.9版本,防止会出现另一个错误,安装git所需要的依赖包
yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++
wget https://www.kernel.org/pub/software/scm/git/git-2.9.0.tar.gz
./configure --prefix=/usr/local/git
ln -s /usr/local/git/bin/* /usr/bin/
3、安装go环境
ngrok 是一个使用go语言编写的反向代理软件,准备go环境,系统是32位的centos,就下载386的包;系统是64位的centos,就下载amd64的包
wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz
tar -zxvf go1.9.2.linux-386.tar.gz
ln -s /usr/local/go/bin/* /usr/bin/
三、服务器端安装ngrok
1、安装前准备
[root@along local]# git clone https://github.com/inconshreveable/ngrok.git
[root@along local]# export GOPATH=/usr/local/go
[root@along local]# export NGROK_DOMAIN="ngrok.along.top"
export GOROOT=/usr/local/go export NGROK_DOMAIN=ngrok.yanlongfei.top export GOARCH=amd64 export GOOS=linux
2、生成证书
[root@along ngrok]# openssl genrsa -out rootCA.key 2048
[root@along ngrok]# openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
[root@along ngrok]# openssl genrsa -out server.key 2048
[root@along ngrok]# openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
[root@along ngrok]# openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
3、把证书放好位置,覆盖原本证书
[root@along ngrok]# cp rootCA.pem assets/client/tls/ngrokroot.crt
cp: overwrite 'assets/client/tls/ngrokroot.crt'? y
[root@along ngrok]# cp server.crt assets/server/tls/snakeoil.crt
cp: overwrite 'assets/server/tls/snakeoil.crt'? y
[root@along ngrok]# cp server.key assets/server/tls/snakeoil.key
cp: overwrite 'assets/server/tls/snakeoil.key'? y
4、编译安装ngrok
[root@along app]# cd /usr/local/ngrok/
[root@along app]# make release-server //如下显示,编译安装成功
bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/client/assets/assets_release.go \ assets/client/… bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/server/assets/assets_release.go \ assets/server/… go get -tags 'release' -d -v ngrok/… code.google.com/p/log4go (download) go install -tags 'release' ngrok/main/ngrokd
提示:中间可能会出现错误,我是直接成功的
注意:此次编译,生成了ngrokd 的执行脚本,通过这个脚本开启ngrok 服务端的服务
5、运行测试
/usr/local/ngrok/bin/ngrokd -domain="ngrok.along.top" -httpAddr=":8000" -httpsAddr=":443" -tunnelAddr=":4443"
setsid /usr/local/ngrok/bin/ngrokd -domain="ngrok.along.top" -httpAddr=":8000" -httpsAddr=":443" -tunnelAddr=":4443"
(2)参数说明:3个端口可随意配置(不能和现有服务端口冲突,阿里云服务器需打开对应端口)
#-domain 访问ngrok是所设置的服务地址生成证书时那个域名
#-httpsAddr https协议端口 默认为443 (可配置https证书)
四、客户端配置 和 使用证书认证连接ngrok
1、在服务器端生成客户端开启ngrok 服务的脚本
[root@along ]# cd /usr/local/ngrok/
[root@along ngrok]# make release-client
bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/client/assets/assets_release.go \ assets/client/… bin/go-bindata -nomemcopy -pkg=assets -tags=release \ -debug=false \ -o=src/ngrok/server/assets/assets_release.go \ assets/server/… go get -tags 'release' -d -v ngrok/… go install -tags 'release' ngrok/main/ngrok
注意:生成了ngrok 的脚本,在/usr/local/ngrok/bin/ngrok,把脚本拷到客户端
2、准备配置文件
vim ngrok.cfg //注意格式,前面都有2个空格,: 后有一个空格
server_addr: "ngrok.yanlongfei.top:4443" //注意域名一定要和服务器端一致 trust_host_root_certs: false tunnels: http: //名字自己定义 subdomain: "ngrok" //映射的域名前缀,根据自己喜好设置,注意需把域名解析到服务器上 proto: http: 80 https: subdomain: "ssl" proto: https: 443 openvpn: remote_port: 5555 //映射的端口 proto: tcp: 1194 ssh: remote_port: 2222 proto: tcp: 22
3、启动ngrok,连接服务器端
./ngrok -config=ngrok.cfg start http #启动web服务 ./ngrok -config=ngrok.cfg start tcp #启动tcp服务 ./ngrok -config=ngrok.cfg start http tcp #同时启动两个服务 ./ngrok -config=ngrok.cfg start-all #启动所有服务
4、测试
五、问题总结
1、问题1
GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata
bin/go-bindata -nomemcopy -pkg=assets -tags=release \
-o=src/ngrok/client/assets/assets_release.go \
make: bin/go-bindata: Command not found
make: * [client-assets] Error 127
前往go安装目录的bin目录下找到go-bindata,将他移动到ngrok/bin下 (没有bin,可新建一个)
2、问题2
客户端ngrok.cfg中server_addr后的值必须严格与-domain以及证书中的NGROK_BASE_DOMAIN相同,否则Server端就会出现如下错误日志:
[03/13/15 09:55:46] [INFO] [tun:15dd7522] New connection from 54.149.100.42:38252
[03/13/15 09:55:46] [DEBG] [tun:15dd7522] Waiting to read message
[03/13/15 09:55:46] [WARN] [tun:15dd7522] Failed to read message: remote error: bad certificate
[03/13/15 09:55:46] [DEBG] [tun:15dd7522] Closing
① 确保生成证书时的NGROK_BASE_DOMAIN和ngrok.cfg填写的domian 域名一致。
② 在使用自签证书时ngrok.cfg中的 trust_host_root_certs为false
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【赞】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!
作者:along阿龙
出处:http://www.cnblogs.com/along21/
简介:每天都在进步,每周都在总结,你的一个点赞,一句留言,就可以让博主开心一笑,充满动力!
版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
已将所有赞助者统一放到单独页面!签名处只保留最近10条赞助记录!查看赞助者列表
衷心感谢打赏者的厚爱与支持!也感谢点赞和评论的园友的支持! | ||
---|---|---|
打赏者 | 打赏金额 | 打赏日期 |
微信:*光 | 10.00 | 2019-04-14 |
微信:小罗 | 10.00 | 2019-03-25 |
微信:*光 | 5.00 | 2019-03-24 |
微信:*子 | 10.00 | 2019-03-21 |
微信:云 | 5.00 | 2019-03-19 |
支付宝:马伏硅 | 5.00 | 2019-03-08 |
支付宝:唯一 | 10.00 | 2019-02-02 |
微信:*亮 | 5.00 | 2018-12-28 |
微信:流金岁月1978 | 10.00 | 2018-11-16 |
微信:,别输给自己, | 20.00 | 2018-11-06 |