前言
经过前面我们对树莓派进行系统安装,架设私有云服务之后,我们发现这里存在一个问题:我们可以把树莓派当做个人网盘,但是却又只能在局域网里使用,这样一来,我们使用树莓派也只能在宿舍、家里或者办公室这样一个小范围区域,如果我们想要通过外网对树莓派进行访问,那有没有什么解决方案呢?当然是有的,接下来将向大家介绍一种外网访问树莓派的姿势。
访问我的博客阅读体验更佳
准备阶段
- Raspberry Pi 3B+(安装系统请参考:https://kn0sky.github.io/2019/04/15/rpi/rpi-1/)
- 一台有公网IP的服务器(这里我用的10元/月的学生云)
- 一个域名(已备案)
- FRP工具( https://github.com/fatedier/frp/releases )
废话几句
看到这里,你可能会想,我要是有公网IP的云服务器,我为啥还要用树莓派运行云盘服务呢?
如果你的云服务器是专门拿来做云盘服务的话,直接拿云服务器做就行了。
但是如果不是这样,云服务器还有其他的工作,那我们可以用云服务器进行代理转发,在尽量不占云服务器资源的前提下,让我们可以通过云服务器的转发访问我们内网里的树莓派。
接下来进入正题,内网穿透:外网访问树莓派
内网穿透:从外网访问树莓派
这里我们要介绍一个内网穿透的工具:FRP
FRP 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
在github上的官网文档里,有很多的使用示例,有兴趣的朋友可以自行了解,地址我放在文末参考链接里了
这里我们就我们当前关心的问题(如何通过外网访问树莓派的seafile私有云服务)进行演示
服务端安装配置
首先,我们需要准备一个有固定外网ip的云服务器,和一个域名
这里我用的是学生云服务器(10元/月),注册了一个域名
我们打开云服务器的终端
通过wget命令下载frp工具
#wget用法:
~$ wget uri
具体uri地址需要到FRP的release页面去找你安装的系统对应的工具(https://github.com/fatedier/frp/releases )
找到后,右键你要下载的工具,选择复制链接地址后,黏贴到命令中
#例如我的云服务器是64位linux的,我就下载这个
~$ wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
下载好之后,进行解压
tar xvf frp_0.27.0_linux_amd64.tar.gz
完成后,进入该目录
# 进入目录
ubuntu@VM-0-17-ubuntu:~$ cd frp_0.27.0_linux_amd64/
# 查看文件列表
ubuntu@VM-0-17-ubuntu:~/frp_0.27.0_linux_amd64$ ls
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd
这里我们需要编辑一个配置文件frps.ini
,修改成如下内容
[common]
bind_port = 7000
vhost_http_port = 8000
这里的bind_port
是服务端和客户端连接用的端口
这里的vhost_http_port
是对外开放访问的端口
设置完之后,在当前frp目录执行命令
./frps -c frps.ini
即可启动服务端侦听
客户端安装配置
客户端同样从frp的github的release页面下载相应的工具,解压,进入工具的目录
(注意:树莓派需要下载的版本是linux_arm
)
客户端同样也需要进行配置文件的修改
打开配置文件frpc.ini
,里面的默认配置如下
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
我们需要将[common]
里的x.x.x.x
修改为我们自己的云服务器的ip
然后将[ssh]
这几行全都注释掉,之后添加我们部署的私有云服务的相关配置,具体添加修改如下
[common]
server_addr = x.x.x.x
server_port = 7000
#[ssh]
#type = tcp
#local_ip = 127.0.0.1
#local_port = 22
#remote_port = 6000
[seafile]
type = http
local_port = 8000
custom_domains = www.domain.com
这里需要将x.x.x.x
和custom_domains
修改成云服务器的ip和域名
local_port
指的是我们树莓派本地seafile的Web服务开放的端口
修改完成之后,保存,在当前frp目录执行命令
./frpc -c frpc.ini
即可连接到我们的服务器
当我们在服务端看到如下信息时,则说明连接成功
2019/05/24 11:00:54 [I] [control.go:398] [ea4809994462e7ef] new proxy [seafile] success
这时候,我们通过域名去访问我们内网的树莓派
即可访问成功
遇到的两个坑
在整个过程中,我遇到了两个坑,首先,我把服务端和客户端都配置好之后,发现客户端连接不上服务端,访问服务端的8000端口出现404,经过检查网络连接,发现这是云服务器的安全组设置的问题,在云服务器的控制台将7000端口
和8000端口
加入入站规则
,这样就能连接成功了,同时也能够从http://域名:8000
访问我的树莓派了。
其次是一个小问题,当我们从ssh连接linux终端的时候,当我们关掉ssh连接的窗口,正在执行的命令会被中断,这里可以用nohup
工具进行很好的解决,具体使用方法可以参考 https://www.cnblogs.com/baby123/p/6477429.html
最后说几句
seafile官网有提供各个平台的app,有需要可以去下载使用,手机app可以更方便的连接到我们的树莓派上,个人感觉挺方便的,有兴趣的同学可以去尝试体验体验
seafile出了一个增强版,seafileDocs,增加了包括在线 Markdown 所见即所得写作,文档评审流程,实时协同,维基视图等新功能。有兴趣的同学可以去官网了解下:https://www.seafile.com/seafile-docs/home/
本系列文章属于不定期更新,大家不要催更啦~
~有问题或者有好的想法,欢迎大家留言或者私信与我交流~
参考资料
FRP:https://github.com/fatedier/frp
nohup:https://www.cnblogs.com/baby123/p/6477429.html
seafile:https://www.seafile.com/home/
最后,欢迎大家关注我的微信订阅号,会不定期更新各种树莓派各种玩法,靶场攻略,漏洞挖掘、渗透经验分享等