树莓派通过ngrok实现内网穿透
2017-09-16 21:38
246 查看
最近在折腾树莓派,想要实现远程对寝室内的监控和对部件的控制,即通过外网访问本地树莓派。自然而然想到使用内网穿透,百度了一下有花生壳和NATAPP之类的服务提供商。不过这种事情还是自己折腾有意思,而且手头也有一个没用的域名和两台VPS,就决定自己来做了。
一.内网穿透的简介
简单说就是内网中的一台计算机具有自己的内部IP,外网的计算机具有公共的IP,而内部IP是无法直接通过外网来访问的,这就需要一种方式来将外网的IP转化为内部的合法IP来进行合法访问。
二.ngrok
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。(来自百度百科)总之就是一个很厉害的东西,使用方便。
三.具体实现:
1.准备好域名和具有公网IP的VPS,之前租过一台bandwagon的VPS,就用它了。
使用的系统是Centos 6。
2.VPS安装go语言
下载tar包:
一.内网穿透的简介
简单说就是内网中的一台计算机具有自己的内部IP,外网的计算机具有公共的IP,而内部IP是无法直接通过外网来访问的,这就需要一种方式来将外网的IP转化为内部的合法IP来进行合法访问。
二.ngrok
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。(来自百度百科)总之就是一个很厉害的东西,使用方便。
三.具体实现:
1.准备好域名和具有公网IP的VPS,之前租过一台bandwagon的VPS,就用它了。
使用的系统是Centos 6。
2.VPS安装go语言
下载tar包:
wget https://storage.googleapis.com/golang/go1.9.linux-386.tar.gz[/code]
tar zxvf go1.9.linux-386.tar.gz -C /usr/local
环境变量配置:vi /etc/profile
文件的最后加入:export GOROOT=/usr/local/go export GOBIN=/home/N/ngrok export PATH=$GOROOT/bin:$PATH
编译文件:source /etc/profile
查看go语言状态:go env
3.树莓派安装go语言:
go语言官方二进制包
下载go1.9.linux-armv6l.tar.gz再用ftp传入树莓派
解压tar -C /usr/local -xzf go1.9.linux-armv6l.tar.gz
配置环境变量,偷懒直接和VPS下配置相同,编译文件。
4.安装ngrok
由于安装有linux的移动硬盘被我格式化了,所以想试试在树莓派上编译好客户端和服务器端。
在树莓派上执行:git clone https://github.com/inconshreveable/ngrok.git ngrok
然后在ngrok下执行:$ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=xxx.com" -days 5000 -out rootCA.pem $ openssl genrsa -out device.key 2048 $ openssl req -new -key device.key -subj "/CN=xxx.com" -out device.csr $ openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
这个xxx.com替换为自己的根域名。
我在这里执行到最后一个命令的时候报错了,发现是第一个命令中-out 后的文件名多打了个’-‘号,怪不得。。
接下来:cp rootCA.pem assets/client/tls/ngrokroot.crt cp device.crt assets/server/tls/snakeoil.crt cp device.key assets/server/tls/snakeoil.key
到这里证书就完成了。
编译服务器端:export GOOS=linux export GOARCH=386 make release-server
编译需要等待一段时间,完成后文件位于 ngrok/bin/linux_386/ngrokd
然后编译客户端:export GOOS=linux export GOARCH=arm make release-client
完成后文件位于ngrok/bin/ngrok
将编译后的ngrokd放到VPS的$GOROOT/bin下,然后使用命令nohup ngrokd -domain="xxx" -httpAddr=":aaaa" -httpsAddr=":bbbb" -log ./ngrokd.log &
如果出现permission denied的问题使用chmod+x增加权限
nohup … &表示SSH断开后服务仍然运行
aaaa和bbbb两个端口号自己选择
设置树莓派:
将ngrok复制到$GOROOT/bin下,并创建一个ngrok.cfg文件vim ngrok.cfg
写入以下内容server_addr: xxxx:4443 trust_host_root_certs: false
xxx是前面使用的域名, 在树莓派上使用如下命令:ngrok -log /usr/local/go/bin/ngrok.log -subdomain yyyy -config /usr/local/go/bin/ngrok.cfg 80
这个yyyy自己决定,最后就可以通过浏览器地址栏yyyy.xxxx:port 这样的形式访问树莓派的HTTP服务了。但是自己使用后还是没有办法通过外网来访问,后来给域名增加了一条CNAME,过一段时间就可以正常访问了。
成功后树莓派显示如下图:
后面需要再次更改cfg文件时一定要注意空格,不然会报错,自己粗心少了空格,一直出错。之后再添加一下自动启动就可以了。下一步打算远程通过flask来控制树莓派的GPIO,做一些应用。
参考:
http://www.vuln.cn/8634
LeeHDsniper的博客
相关文章推荐
- 搭建Ngrok实现树莓派内网穿透
- Ubuntu16.04下通过ngrok实现内网穿透
- 内网穿透技术详解 --- Java本地项目,可以让别人通过外网访问 (natapp、ngrok、nat123、花生壳等)
- ngrok内网穿透,ngrok服务器搭建,实现外网访问内网服务;树莓派外网访问内网的web服务及ssh外网登录
- ngrok+nginx 实现内网穿透 共用80端口
- 阿里云搭建ngrok实现内网穿透
- 简单搭建ngrok服务器,实现内网穿透
- 利用 Ngrok 穿透内网访问树莓派
- mac 系统中用 ngrok 内网穿透实现微信测试
- 搭建属于自己的ngrok服务器,实现内网穿透,外网访问内网,可本地开发微信不需要上传服务器
- ngrok,花生壳搭建内网穿透,实现外网地址访问本机
- 使用ngrok实现内网穿透
- 基于ngrok的内网穿透,将内网映射到公网上