让树莓派有点事做03--外网访问

Catalogue
  1. 1. 让树莓派有点事做03–外网访问
    1. 1.1. 前言
    2. 1.2. 准备阶段
    3. 1.3. 废话几句
    4. 1.4. 内网穿透:从外网访问树莓派
      1. 1.4.1. 服务端安装配置
      2. 1.4.2. 客户端安装配置
    5. 1.5. 遇到的两个坑
    6. 1.6. 最后说几句
    7. 1.7. 参考资料

让树莓派有点事做03–外网访问

前言

经过前面我们对树莓派进行系统安装,架设私有云服务之后,我们发现这里存在一个问题:我们可以把树莓派当做个人网盘,但是却又只能在局域网里使用,这样一来,我们使用树莓派也只能在宿舍、家里或者办公室这样一个小范围区域,如果我们想要通过外网对树莓派进行访问,那有没有什么解决方案呢?当然是有的,接下来将向大家介绍一种外网访问树莓派的姿势。

准备阶段

废话几句

看到这里,你可能会想,我要是有公网IP的云服务器,我为啥还要用树莓派运行云盘服务呢?
如果你的云服务器是专门拿来做云盘服务的话,直接拿云服务器做就行了。
但是如果不是这样,云服务器还有其他的工作,那我们可以用云服务器进行代理转发,在尽量不占云服务器资源的前提下,让我们可以通过云服务器的转发访问我们内网里的树莓派。

接下来进入正题,内网穿透:外网访问树莓派

内网穿透:从外网访问树莓派

这里我们要介绍一个内网穿透的工具:FRP

FRP 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

在github上的官网文档里,有很多的使用示例,有兴趣的朋友可以自行了解,地址我放在文末参考链接里了

这里我们就我们当前关心的问题(如何通过外网访问树莓派的seafile私有云服务)进行演示

服务端安装配置

首先,我们需要准备一个有固定外网ip的云服务器,和一个域名
这里我用的是学生云服务器(10元/月),注册了一个域名

我们打开云服务器的终端
通过wget命令下载frp工具

1
2
3
#wget用法:

~$ wget uri

具体uri地址需要到FRP的release页面去找你安装的系统对应的工具(https://github.com/fatedier/frp/releases

img

找到后,右键你要下载的工具,选择复制链接地址后,黏贴到命令中

1
2
3
#例如我的云服务器是64位linux的,我就下载这个

~$ wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz

下载好之后,进行解压

1
tar xvf frp_0.27.0_linux_amd64.tar.gz

完成后,进入该目录

1
2
3
4
5
# 进入目录
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,修改成如下内容

1
2
3
[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,里面的默认配置如下

1
2
3
4
5
6
7
8
9
10
# 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]这几行全都注释掉,之后添加我们部署的私有云服务的相关配置,具体添加修改如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[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.xcustom_domains修改成云服务器的ip和域名
local_port指的是我们树莓派本地seafile的Web服务开放的端口

修改完成之后,保存,在当前frp目录执行命令
./frpc -c frpc.ini
即可连接到我们的服务器

当我们在服务端看到如下信息时,则说明连接成功

1
2019/05/24 11:00:54 [I] [control.go:398] [ea4809994462e7ef] new proxy [seafile] success

这时候,我们通过域名去访问我们内网的树莓派
img
即可访问成功


遇到的两个坑

在整个过程中,我遇到了两个坑,首先,我把服务端和客户端都配置好之后,发现客户端连接不上服务端,访问服务端的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/