树莓派放在自己家里,上网用的拨号上网,只能采用内网穿透的方式,进行公网访问。采用Ngrok进行内网穿透,采用的http://ngrok.cc网站提供的免费Ngrok服务。
第一步:建立隧道转发
注册账号,然后申请一个Ngrok的隧道。配置22端口进行映射,隧道配置教程:https://www.sunnyos.com/article-show-67.html ,如果你有自己的公网域名,你可以在配置完隧道后,再继续配置通过自己域名的方式,进行隧道访问。自定义域名的配置教程:https://www.sunnyos.com/article-show-68.html
第二步:安装Ngrok客户端
我这里采用的Python版本的客户端,不同类型的运行方式不同, 但是原理基本一致,这里只说明python版本的。
下载好python 版的客户端后,我们按教程启动Ngrok,发现一切正常,通过公网确实可以访问树莓派的22端口了(22端口用的是TCP协议)。
公网访问22端口的方式:ssh -p 端口号(ngrok注册时的端口号) pi@server.ngrok.cc
同理你可以配置你的80端口转发(80端口用的是Http协议)。
如果你要启动两个端口转发,你可以执行:python sunny.py --client=xxxxxxx,xxxxxxx ,这是直接启动两个转发端口的启动方法
第三步:配置开机自动启动
通过前两步,我们已经能够正常使用Ngrok的内网穿透的功能,在公网环境下,访问自己家里的树莓派。但是为了可用性, 我还是希望这个穿透服务能够开机自启,这样只要树莓派一启动就可以远程访问。
这里我们创建一个python 脚本auto_ngrok_port.py,脚本内容如下:
1
2
3
4
5
6
7
8
9
|
import
os
import
time
def
ngrok
(
)
:
print
"22 port is running!"
os
.
system
(
"python /home/pi/Rpi/sunny.py --client=xxxx,xxxx"
)
#调用执行python版本的Ngrok
time
.
sleep
(
60
)
#这里让程序暂停60s,再执行,因为开机自启时,网络服务没起来,会导致这个调用Ngrok失败
ngrok
(
)
|
然后把auto_ngrok_port.py加为开启自启的服务,配置方法链接教程: