搭建Ngrok实现树莓派内网穿透

来源:互联网 发布:印象笔记 for mac 编辑:程序博客网 时间:2024/05/18 00:34

文章内容结合以下文章:
http://www.jianshu.com/p/91f01e30a9b0
http://www.sunnyos.com/article-show-48.html

Ngrok编译部署条件

  • 域名
  • 独立IP的VPS/云主机

编译Ngrok客户端时会使用openssl生成证书来加密通讯,保证了安全性,使用时必须和签署证书时的域名吻合。

一个拥有独立IP的VPS或云主机,地区的话推荐选择 香港或 国外的,配置可以参考 搭建ss服务的标准,其对 延迟, 带宽和 速度的要求高于内存和CPU。(这里我用的只是hosthatch的vps,当然这个配置还不是最低价的)

使用国内云主机的话第一个是要考虑域名备案,因为一般反向代理网页时使用了服务器的80端口。第二个是国内符合配置条件的vps比较少,因为没人直接拿国内的服务器番茄,市场的需求催生了国外VPS低内存高带宽而且非常优惠的配置。

部署环境:香港VPS CentOS 7.2+Raspberry raspbian

也可以选择在本地编译好客户端然后部署在服务器上

编译Ngrok

记得配置一个科学的上网环境(香港或国外主机不用)

由于编译过程中会导入包的网址,而这些网址基本都被墙了。

方法不用多说了

安装go环境

先安装必要的依赖包

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++ build-essential mercurial

由于Go官方地址也被墙了,国内主机或者VPS的请找国内资源下载,由于我使用的香港的VPS,这里直接下载的Go官方的。

下载go安装包

wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz 

解压

tar -zxvf go1.8.1.linux-amd64.tar.gz 

移动目录

mv go /usr/local/

软链到/usr/bin

ln -s /usr/local/go/bin/* /usr/bin/

安装成功后查看可Go编译环境

go env

升级Git版本

Go编译过程中要求高版本的git,而yum源里面默认只有1.8版本。

安装2.9.4版本的git

#下载wget https://www.kernel.org/pub/software/scm/git/git-2.9.4.tar.gz
#解压tar zxvf git-2.9.4.tar.gz cd git-2.9.4
#配置并编译./configure --prefix=/usr/local/git-2.9.4makemake install

取代yum安装的低版本git,然后软链接到/usr/bin

yum remove git*ln -s /usr/local/git-2.9.4/bin/* /usr/bin/

检查git版本是否为2.9.4

git --version

Ngrok源码配置

声明编译的路径和必要的域名(域名改成你自己的)

cd /usr/local/git clone https://github.com/inconshreveable/ngrok.gitexport GOPATH=/usr/local/ngrok/export NGROK_DOMAIN="ngrok.hibai.cn"cd ngrok

生成证书,Ngrok会使用此证书加密通讯

openssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pemopenssl genrsa -out server.key 2048openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csropenssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

将证书文件复制到指定位置

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

编译服务器端与客户端

因为我的服务器端版本为linux64位,此处GOARCH=amd64

cd /usr/local/go/srcGOOS=linux GOARCH=amd64 ./make.bashcd /usr/local/ngrok/GOOS=linux GOARCH=amd64 make release-server

编译完成过后ngrok/main/ngrokd即为服务端运行文件

树莓派为linux-arm架构,重新声明go env里的变量

cd /usr/local/go/srcGOOS=linux GOARCH=arm ./make.bashcd /usr/local/ngrok/GOOS=linux GOARCH=arm make release-client

编译完成过后/ngrok/bin/linux_arm/ngrok即为树莓派客户端运行文件

注:这里测试时只编译了amd64的服务器端和arm的客户端,实际上可以通过改变GOOS与GOARCH来获取各个平台的客户端与服务端,GOOS可以指定为windows、linux 、 freebsd 、darwin (Mac OS X 10.5 or 10.6) 和 nacl (Chrome 的Native Client 接口) ,GOARCH可以指定为amd64 (64-bit x86) 、386 (32-bit x86) 、 和arm (32-bit ARM),可见Go语言的跨平台能力相当彪悍。

部署Ngrok

绑定域名

在编译配置时的域名ngrok.hibai.cn解析到服务器IP
注意:指定A记录时ngrok与*.ngrok都要填上,这样能方便地使用不同子域转发不同的本地服务。

服务器端部署

为ngrokd单独开一个screen

yum install -y screenscreen -S ngrokd

运行ngrokd

/usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"

屏幕会输出一连串日志信息,ttpAddr、httpsAddr 分别是 ngrok 用来转发 http、https 服务的端口,ngrokd 还会开一个 4443 端口用来跟客户端通讯,注意设置防火墙使端口开放。

客户端部署

将/ngrok/bin/linux_arm/ngrok移至树莓派下

新建配置文件ngrok.cfg

server_addr: "ngrok.hibai.cn:4443"trust_host_root_certs: false

运行客户端

PS:在执行前务必给ngrok和ngrok.cfg执行权限

chmod +x ngrokchmod +x ngrok.cfg./ngrok -config=./ngrok.cfg -subdomain="www.hibai.cn" 80

看见Tunnel Status变为online说明成功连接服务器端

访问测试

浏览器地址栏输入www.hibai.cn查看是否能打开

256M内存的香港VPS测试成功

设置开机启动ngrok穿透

创建启动脚本start.sh

#!/bin/sh./ngrok/ngrok -config=./ngrok/ngrok.cfg start tunnel1 tunnel2

然后加入开机启动中,修改/etc/rc.local

cd /root./start.sh#切记最后要有一句 exit 0

总结

从Ngrok强大的反向代理功能可以看出Go语言独特魅力,除了glibc的版本有一定要求,其跨平台编译为部署省去了不少时间,当然Go还有更多的优点,本文提到的也只是Ngrok的冰山一角,利用其TCP转发也可以远程SSH树莓派,更多玩法就自行百度了。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 药流出血特别多怎么办 新车刮擦了一点怎么办 自己的车撞墙了怎么办 新车被撞了个坑怎么办 车门被刮变形了怎么办 撞到别人的新车怎么办 新车掉了一点漆怎么办 新车擦了点漆怎么办 车挂了一点漆怎么办 第一天上班中途想走了怎么办 车子前脸裂开了怎么办 不想干了想辞职怎么办 药流期间老是吐怎么办 在工厂上班辞工后没发工资怎么办 培训期三天想走怎么办 药流吃了药吐了怎么办 工作3天不下去怎么办 在新公司融不进去怎么办 药流吃药吐了怎么办 药流期间发烧了怎么办 药流时第一天出现呕吐怎么办有事吗 药流第一天忘记第二次吃药了怎么办 药流吃药后吐了怎么办 药流只排血块不见孕囊怎么办 药流三天还有血怎么办 药流15天同房了怎么办 药流22天同房了怎么办 药流一直不排出怎么办 宝宝脸过敏红了怎么办 小孩湿疹脸上都是红红的怎么办 眼周刺痛红红的怎么办 脸敷面膜刺痛红红的怎么办 脸上有凹凸不平的坑怎么办 宝宝脸上角质层薄有红血丝怎么办 红衣军到决赛圈怎么办 宝宝湿疹留下的黑印怎么办 出牙宝宝很烦躁怎么办 法斗嘴唇破了怎么办 狗嘴巴周围红了怎么办 脸上起红包还痒怎么办 睾丸胀痛有下坠感怎么办