【硬创邦】跟hoowa学做智能路由(十一):实现网络存储与文件共享-阿里云开发者社区

开发者社区> 雷锋网> 正文

【硬创邦】跟hoowa学做智能路由(十一):实现网络存储与文件共享

简介:
  
  本章将介绍使用Samba实现Windows网上邻居以及使用FTP两种方式进行文件共享,这样你就可以把经常使用和需要交换的文件存放于你的智能路由存储器里了。

文件共享和传输的协议有很多种,但是hoowa为了让大家使用最常用的,hoowa选择了介绍Windows文件共享服务器和FTP文件传输服务器的实现方法。Windows文件共享服务器更适合局域网内部进行文件共享管理,简单方便容易。FTP文件服务器适合局域网及公网远程文件共享服务。

选择存储器

还记得我们之前讲解过如何加载外部存储器吗? 那么,如果你使用的是32G的TF卡又或者使用的是另外一块外置硬盘,也是可以顺利完成整个操作的。毕竟如果数据比较多使用一个外置硬盘是更适合的选择。

另外,各位也可以上网选购那些大容量存储设备,比如USB接口的磁盘阵列,实现中小企业的大容量存储。很划算的!

加载第二块USB外置磁盘

本节非必学,可以跳过!!!

只有需要加载第二块或更多的外置磁盘时才需要阅读本节。

在这里hoowa是使用他的U盘做演示的,如果你的/overlay挂载的外部存储器容量不够,就参考本节。这里hoowa采用EXT4文件系统(也可选择速度更快的EXT3文件系统,不过稳定性EXT4高一些)。
但是本文全部文章都不推荐选择NTFS文件系统,不是别的原因主要是因为没有经过优化在OpenWRT中性能很低且CPU占用高。而大文件操作FAT32又不支持,所以就EXT系列了。

第一步:插入第二块硬盘,并且查找设备符号

root@SmartRouter:/# fdisk -l

 

这个/dev/sdc1的容量是4G正好是hoowa的那个U盘。记住之前章节讲的看你自己的设备符号是什么,不能直接抄啊。

第二步:分区格式化

以前都学过,这里就不废话了。如果记不住,翻翻"扩充RAM和FLASH"再学习下。

开始分区

进入Command模式:Command (m for help)

p:查看当前磁盘状况
d:删除分区
n:新建分区
w:提交分区修改

开始格式化

第三步:设置自动挂载第二块外置硬盘

在这里因为我们已经使用了FLASH可写分区挂载了第一块外置磁盘,为了简化操作流程难度。我们就直接修改当前系统下的/etc/config/fstab即可。

取得外置磁盘的UUID编号(当前hoowa的是/dev/sdb1分区):

 

因为我们的盘是/dev/sdc1,所以UUID就是"61f4d556-c4c2-4603-bd72-7174a6782787"了。

修改当前系统下的fstab配置,使用VI或UCI修改fstab配置文件(以下UCI举例):

root@SmartRouter:/# uci add fstab mount
cfg084d78

上面这个cfg044d78是hoowa这台机器在创建mount时候产生的唯一值,因为mount是属于匿名段(还记得之前章节里介绍过UCI部分的匿名段吗)。

也就是说后续的增加参数操作使用这个cfg084d78代表当前mount操作就行,请注意啊各位,这个cfg开头的名字在每台机器上都不一样各位不要直接抄这部分的指令啊,要变通修改为自己的。

UUID填写刚才blkid取到的那个UUID,其他参数参考了"扩充RAM和FLASH"那章的写法:

root@SmartRouter:/# uci set fstab.cfg084d78.uuid=62d9ed48-02b2-47ea-a4f5-8e1adfc18b1e
root@SmartRouter:/# uci set fstab.cfg084d78.target=/mnt/extdisk
root@SmartRouter:/# uci set fstab.cfg084d78.fstype=ext4
root@SmartRouter:/# uci set fstab.cfg084d78.options=rw,sync
root@SmartRouter:/# uci set fstab.cfg084d78.enable=1
root@SmartRouter:/# uci set fstab.cfg084d78.enabled_fsck=0
root@SmartRouter:/# uci commit fstab

创建挂载点的文件夹:

root@SmartRouter:/# mkdir -p /mnt/extdisk

查看是否成功:

 

重新启动,确认挂载成功(重启后因为磁盘比较多所以挂载时间稍长):

root@SmartRouter:/# reboot
……

 

大家有看到吗?这里的挂载extdisk已经成功了,但是磁盘符号变成/dev/sdb2了.但是有UUID,所以没关系。

这就是因为内核启动的顺序发生变化。但是由于我们采用了uuid的挂载方法,所以设备符号不论怎么变化都能找到你要的那个磁盘和分区。

没有使用第二块外置磁盘的准备工作

如果你一个硬盘就够了,那么就按照本节操作下,创建一个/mnt/extdisk文件夹即可。

创建必要的文件夹:

root@SmartRouter:/# mkdir -p /mnt/extdisk

最好给文件夹设置权限为777,保证任何进程都具备写能力:

root@SmartRouter:/# chmod 777 /mnt/extdisk/

安装Windows文件共享

第一步: 安装samba-server服务包

root@SmartRouter:/home# opkg update
root@SmartRouter:/home# opkg install samba36-server

第二步: 设置samba的配置信息

/etc/config/samba配置结构:

#samba主配置
config 'samba'
......
#samba文件共享配置
config 'sambashare'
......

/etc/config/samba的config 'samba'段 可选参数:

键 值 必须设置 说明
charset 字符串 否 文件名编码类型,可选参数: UTF-8, cp936
name 字符串 是 服务器的名称,随意填写英文字符
workgroup 字符串 是 工作组,默认应为: WORKGROUP
description 字符串 否 该服务器的描述信息,随意填写英文字符
homes 数值 是 是否共享用户文件夹,默认为0,可选参数: 0 否, 1 是

/etc/config/samba的config 'sambashare'段 可选参数:

键 值 必须设置 说明
name 字符串 是 共享的名称
path 字符串 是 共享的文件路径
users 字符串 否 如果包含这个参数将允许特定访客访问,比如: 'hoowa,jimmy'
read_only 字符串 是 是否只读共享,可选参数: yes/no
guest_ok 字符串 否 指定是否支持访客模式
create_mask 数值 否 设置被创建文件的权限, 默认为: 0744
dir_mask 数值 否 设置被创建的文件夹的权限,默认为: 0755

简单设置windows共享模式的配置举例(使用VI或UCI编辑):

 

第二步: 设置启动windows共享

如果要开机每次都启动需要如下设置:

root@SmartRouter:/etc/config# /etc/init.d/samba enable

如果要当前马上打开samba支持:

root@SmartRouter:/etc/config# /etc/init.d/samba start

第三步: 用你的系统连接

你的电脑一定要直接连接你的开发板,通过WiFi或通过LAN连接,因为Windows文件共享在Wan口上是被防火墙封闭的,这也是为了安全性考虑。

开始--->运行--->输入智能路由的文件共享访问地址"\\192.168.1.1\shares\"

 

点击确认后将弹出文件夹

这个时候你可以像操作本地硬盘一样对这个网络磁盘进行文件操作。

如果查看你的网上邻居你会发现(如下图):

第三步: 设置带账户管理的windows共享

可能有的朋友问了,那怎么实现复杂的根据帐号管理啊?哎呀,兄弟们那太复杂了,在家里用,在小公司用弄那么多帐号麻烦不麻烦。
如果大家真的想设置,我也不拦着,大家可以查看标准linux的samba配置。

这里hoowa跟大家讲下openwrt特别的地方,在openwrt下samba的配置是:

/etc/config/samba
/etc/samba/smb.conf.template

而服务启动时候的配置是/var/etc/smb.conf 这个文件是通过以上两个文件在服务启动时动态生成的。因此,修改上面任何一个文件的修改都要通过重启服务生效:

root@SmartRouter:/# /etc/init.d/samba restart

如果需要设置帐号和密码可以使用smbpasswd -a 增加用户,使用smbpasswd -x 删除用户。

关于带账户的部分就讲这么多了,也算给大家一个例题,看看你能不能搞定咯。

安装FTP文件服务器

有时候,可能你需要远程共享服务,因此使用ftp是最简易的方式。并且它也支持本地和网络。在这里我们使用Pure-FTPD,它是一个快速、高效、轻便、安全的FTP服务器,非常适合在OpenWRT下使用。

第一步:安装pure-ftpd软件包

root@SmartRouter:/# opkg update
root@SmartRouter:/# opkg install pure-ftpd

第二步: 设置Pure-FTPD配置信息

/etc/config/pure-ftpd配置结构:

config pure-ftpd
......

/etc/config/pure-ftpd的config 'pure-ftpd'段 可选参数:

键 值 必须设置 说明
port 数值 是 FTP服务器的端口,默认为21,值范围在: 10-65535
noanonymous 数值 是 禁止匿名访问,可选参数:0 不禁止, 1禁止
chrooteveryone 数值 否 是否允许FTP使用者访问整个服务器,可选参数:0 不允许, 1允许
maxclientsperip 数值 否 同一IP最大允许客户端数量,默认为: 10
maxclientsnumber 数值 否 最大允许客户端数量,默认为: 4
peruserlimits 字符串 否 单一用户最大量限制,格式为: "单一用户:单一匿名用户",默认为: 3:4
umask 字符串 否 设置创建文件和文件夹的权限,格式为: "文件:文件夹",默认为: 133:022,如果填写 000:000 表示完整权限
authentication 字符串 是 有效账户验证类型,设置为puredb:/etc/pureftpd.pdb 表示采用独立账户验证
enabled 字符串 是 是否启动pure-ftpd,可选参数:0 不启动, 1 启动
fortunesfile 字符串 否 欢迎词文件,默认可以不填
dontresolve 数值 否 不进行解析处理,可以提高速度,可选参数: 0 不禁止, 1禁止
passiveportrange 字符串 否 被动模式的端口范围,格式为: "开始:结束",数据范围为: 10-65535

开启Pure-ftpd服务并且关闭匿名访问,同时限制用户离开自己的主目录:

 

第三步: 创建Pure-FTPD的验证和用户体系

在上一步我们制定了验证用的账户文件为/etc/pureftpd.pdb,这个文件是由pure-pw指令生成的。可以通过该程序产生ftp账户,并且对应到一个系统账户上。

增加FTP新账户: pure-pw useradd [账户名称] -u [对应系统账户] -d [FTP服务器文件路径]
删除FTP账户: pure-pw userdel [账户名称]
修改FTP账户密码: pure-pw passwd [账户名称]
列表全部FTP账户: pure-pw list
生效数据: pure-pw mkdb

在这里创建一个账户hoowa 并且设置系统账户为nobody这样跟Samba就一致了,同时设置路径为/mnt/extdisk。创建过程中要输入两次该账户的密码:

root@SmartRouter:/etc# pure-pw useradd hoowa -u nobody -d /mnt/extdisk/
Password:
Enter it again:

生效数据:

root@SmartRouter:/etc# pure-pw mkdb

第四步: 启动服务

如果要开机每次都启动需要如下设置:

root@SmartRouter:/etc/config# /etc/init.d/pure-ftpd enable

如果要当前马上启动pure-ftpd服务:

root@SmartRouter:/etc/config# /etc/init.d/pure-ftpd start

如果修改了配置文件,所有FTP客户端都要重新连接所做修改才生效

穿越防火墙向外网开放FTP

如果你不需要外网访问FTP可以跳过这一节。

默认情况在防火墙中下WAN口是不能对外开放FTP服务的。如果要允许WAN口直接访问系统的FTP服务,需要设置路由规则。

在以上配置中FTP我们使用了21号端口,另外被动模式(目前使用最广泛的FTP传输模式)使用了50000到51000范围的端口,因此我们都要在防火墙规则上允许WAN口的访问进入。

通过UCI设置新的路由规则:

root@SmartRouter:/# uci add firewall rule
cfg1992bd

记录下来cfg1992bd那个值他代表当前的rule,请注意啊各位,这个cfg开头的名字在每台机器上都不一样各位不要直接抄这部分的指令啊,要变通修改为自己的啊:

root@SmartRouter:/# uci set firewall.cfg1992bd.name='wan-ftp'
root@SmartRouter:/# uci set firewall.cfg1992bd.src='wan'
root@SmartRouter:/# uci set firewall.cfg1992bd.dest_port='21 50000-51000'
root@SmartRouter:/# uci set firewall.cfg1992bd.target='ACCEPT'
root@SmartRouter:/# uci set firewall.cfg1992bd.proto='tcp'
root@SmartRouter:/# uci commit firewall

重新读取防火墙配置:

root@SmartRouter:/# /etc/init.d/firewall reload

使用WinSCP连接FTP服务器

WinSCP是一个强大的客户端软件,他支持SFTP,FTP,SCP三种模式,这里我们就使用他的FTP功能进行测试连接。

第一步: 创建连接

在你的电脑上打开WinSCP软件,点击新建。

输入主机名,用户名,密码,文件协议选择FTP。点击登入既可登入系统。主机名如果是wifi或lan连接到开发板上,那么一般填写开发板的lan ip就行,如果你在之前的章节没有修改过lan ip他就应该是192.168.1.1。

如不出意外现在你可以通过FTP上载和下载文件,并且可以跟samba一起工作了。如果公司或则家庭内部就直接用samba,如果是手机,或是远程连接就使用ftp就可以了。

用过的磁盘相关指令汇总

在文章最后,我们简单的回顾一下我们使用过的磁盘相关指令。

系统支持的格式化文件系统类型指令:

root@SmartRouter:/# mkfs.ext2 格式化EXT2文件系统
root@SmartRouter:/# mkfs.ext3 格式化EXT3文件系统
root@SmartRouter:/# mkfs.ext4 格式化EXT4文件系统

查看外置USB设备指令:

root@SmartRouter:/# lsusb

查看当前已经加载磁盘的情况:
root@SmartRouter:/# df

查看当前加载了什么东西:

root@SmartRouter:/# mount

查看当前系统的所有存储设备分区情况:

root@SmartRouter:/# fdisk -l

最后,大家现在可以开始提问,在雷锋网(公众号:雷锋网)文章评论、公众号「宅客」:letshome、QQ群:196302618、邮箱:DIYRouter#163.com都可以提交,问题我将会在下章的时候统一解答。需要提醒下,我并不是高手,我回答问题有三个原则:1、我会的我直接回答 2、我不太会的我看着回答 3、我不会的我瞎忽悠 所以我给的答案是否正确需要大家自行判断。

  
 
  本文作者:孙冰

本文转自雷锋网禁止二次转载,原文链接

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

秉承“关注智能与未来”的宗旨,持续对全球前沿技术趋势与产品动态进行深入调研与解读。

官网链接