前言:
上一章讲到使用frp实现内网穿透达到远程访问树莓派的目的,这章在上一章的基础上接着实现外网下载树莓派内文件的功能。
准备:
1、移动硬盘一个(NTFS格式,扩展树莓派的存储容量)
2、安装FileZilla软件(主流FTP软件)
一、树莓派访问移动硬盘
1、移动硬盘通过USB口接入树莓派中(此处需要为移动硬盘购买一条有外置供电的USB线,树莓派USB口本身的供电带不起一个移动硬盘)。
2、因挂载NTFS格式的硬盘默认只有只读权限,所以需要安装以下工具才能实现写功能。
#安装所需软件包
sudo apt-get install fuse-utils ntfs-3g
#加载内核模块
modprobe fuse
3、执行以下命令挂载移动硬盘。
sudo mount -t ntfs-3g /dev/sda1 /home/mount_disk (设备符、具体挂载目录根据实际情况来填)
4、设置移动硬盘定时休眠
为了让硬盘寿命更长,需在不操作硬盘时让硬盘进入休眠模式。硬盘休眠的常用工具有hdparm, hd-idle 和 sdparm,此处使用hd-idle。(不同的硬盘会适合使用不同的工具)
获取hd-idle源代码
wget http://sourceforge.net/projects/hd-idle/files/hd-idle-1.05.tgz
解压目录并安装
tar -xvf hd-idle-1.05.tgz && cd hd-idle
dpkg-buildpackage -rfakeroot
sudo dpkg -i ../hd-idle_*.deb
编辑配置文件
sudo vim /etc/default/hd-idle
START_HD_IDLE=true
HD_IDLE_OPTS="-a sda -i 600 -l /var/log/hd-idle.log" # 调整空闲时间为10分钟 (60 秒 * 10)
重启hd-idle服务
sudo service hd-idle restart
至此树莓派已经能成功读写并能定时休眠移动硬盘了。
二、树莓派安装FTP服务器
1、执行命令安装FTP服务器。
sudo apt-get install vsftpd
2、打开FTP服务器配置文件
sudo vi /etc/vsftpd.conf
3、修改配置文件以下地方。
anonymous_enable=NO #表示:不允许匿名访问
local_enable=YES #设定本地用户可以访问。
write_enable=YES # 设定可以进行写操作
local_umask=022 #设定上传后文件的权限掩码。
4、配置FTP服务器支持被动模式
因在使用FRP内网穿透时,通过公网IP使用被动模式访问FTP服务器会报错“服务器发回了不可路由的地址”并且连接失败。
这个问题在百度和谷歌之后,找到一个解决方法:FTP服务器配置支持被动模式,FTP客户端使用主动模式连接。
故需在vsftpd.conf增加以下配置。
pasv_enable=YES #支持被动模式
pasv_min_port=50000
pasv_max_port=50002
5、启动FTP服务器
sudo service vsftpd restart
至此树莓派已配置完毕FTP服务器。
三、修改FRP支持远程FTP访问
1、执行命令pkill frpc结束正在运行的frpc进程。
2、修改frpc.ini文件,在文件结尾添加一下内容。
[ftp21]
type = tcp
local_ip = 127.0.0.1
local_port = 21 #FTP默认端口
remote_port = 2121 #远程访问端口
[ftp1]
type = tcp
local_ip = 127.0.0.1
local_port = 50000
remote_port = 50000
[ftp2]
type = tcp
local_ip = 127.0.0.1
local_port = 50001
remote_port= 50001
[ftp3]
type = tcp
local_ip = 127.0.0.1
local_port = 50002
remote_port = 50002
3、执行./frpc -c ./frpc.ini。
至此已成功修改frp工具支持ftp远程访问。
四、通过外网远程下载树莓派内的文件
1、打开FileZilla文件栏中的站点管理器,点击新站点,填写主机IP(VPS的公网IP)、端口(frpc.ini里FTP的远程端口 )、用户名密码(树莓派的用户名和密码) 。
2、进入传输设置栏,选择主动传输模式,并点击连接。
3、从树莓派的硬盘中下载文件
进入树莓派的移动硬盘中(此处挂载在/home/mount_disk目录),进入子目录选择一个文件右击下载。
文件下载成功!至此已成功实现通过外网远程下载树莓派内的文件!!!
遗留问题:
1、FileZilla使用GB2132编码连接树莓派后,中文名称的文件依然显示为乱码。
2、使用被动模式访问树莓派的FTP服务器会出现会报错 “服务器发回了不可路由的地址” 并且连接失败。
结语:
博文中虽然成功实现了功能,但本人对具体内部技术实现还是停留在一知半解的地步。希望各位发现博文有什么问题或存在疑问请留下评论,大家一起学习交流,谢谢!