现在有了良好的网络环境,开始搭建我的存储服务。
我没有用成熟的nas套件,绿联/群晖之类。使用的是arm64的ubuntu服务器,连接硬盘盒挂载大容量机械硬盘。
先挂载硬盘
- 用
blkid
查看硬盘的UUID
- 编辑
/etc/fstab
文件, 在其中增加对应的硬盘UUID
及其想要挂载到的目录
UUID=5FB5-3BE3 /mnts exfat defaults 0 0
UUID=24267054267028C6 /mnt ntfs defaults 0 0
请注意不同文件格式的硬盘:exfat、ntfs。 如果nas需要被不同系统读写,比如mac、win、linux,建议硬盘格式化为exfat格式。
- 执行
mount -a
即可挂载硬盘。
进行局域网访问
局域网访问nas,有很多种协议方案。
- SMB协议
- FTP协议
- WEBDAV协议
这里推荐使用一个叫chfs的方案,官网,github地址。它的优点是轻量、跨平台、支持webdav。
- 下载平台对应压缩包,解压二进制文件chfs到你想要的目录.
- 编写config.ini文件:
port=24613 #端口设置,不要与别的服务冲突,如需外网访问,避开常用服务端口
path=/mnts/set/ #共享的文件夹路径(第一步挂载的硬盘目录)
rule=:: #匿名用户禁止访问
rule=username:password:RW #可访问的用户及密码以及访问权限,RWD分别代表读取、写入、删除。
log=~/software/chfs/log #log文件放置位置
html.title=test // 随便写
html.notice=only test // 随便写
- 启动chfs
/path/to/chfs --file=/path/to/config.ini
至此,就可以在局域网内访问挂载的硬盘中的内容了,地址为192.168.x.x:24613
或者192.168.x.x:24613/webdav
。
请注意,如果用webdav,需要在客户端而非网页浏览器内访问,因为webdav需要用http的post方法,而浏览器地址是get方法,是无法访问的。
等等,上一篇提到的IPV6能用在这里吗?
当然!
外网访问存储硬盘
我们之前为了IPV6费了不少功夫,就是为了这里可以在外网利用IPV6访问我们的nas。
为什么不用ipv4? ipv4要么要申请公网ip,要么要内网穿透,麻烦不说,访问还很慢
- 确保你的终端确实是可以正常使用IPV6的,验证方法上一篇有提到。并关闭从nas设备到光猫之间所有路由的IPV6防火墙,为了安全,建议不要完全关闭,而是用ip6tables开放chfs服务端口24613的出入以及转发,我这里是H3C路由器示例:
- 使用telnet/ssh登录路由器
- 增加防火墙规则
ip6tables -I INPUT -p tcp --dport 24613 -j ACCEPT
ip6tables -I OUTPUT -p tcp --sport 24613 -j ACCEPT
ip6tables -I FORWARD -p tcp --dport 24613 -j ACCEPT
- 用以下命令获取你的nas主机的IPV6地址:
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.6.24 netmask 255.255.255.0 broadcast 192.168.6.255
inet6 2408:820c:8f48:8091:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x0<global>
inet6 2408:820c:xxxx:xxxx::3ce prefixlen 128 scopeid 0x0<global>
inet6 2408:820c:8f48:xxxx:7511:xxxx:c2e4:xxxx prefixlen 64 scopeid 0x0<global>
ether fc:7c:02:88:c7:c4 txqueuelen 1000 (Ethernet)
RX packets 26611171 bytes 33688492527 (33.6 GB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 8562653 bytes 3121262278 (3.1 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 21
找到eth0网卡的IPV6地址(inet6后面的),也许你的主机和我一样有多个公网IPV6地址(非fe80开头,这是内网地址),没关系每个都是可以使用的,因为里面有临时地址,我们一般取第一个即可。
-
可以用IPV6来访问nas了~访问地址:
[2408:820c:8f48:8091:xxxx:xxxx:xxxx]:24613
或者[2408:820c:8f48:8091:xxxx:xxxx:xxxx]:24613/webdav
(客户端访问)。 -
你可以使用手机连接4g、5g网络,在手机浏览器或者支持webdav的app中用上面的公网IPV6地址进行访问。
至此,我们就实现了用公网IPV6访问家庭存储, 有一点局限性就是访问时的网络环境必须支持IPV6,目前移动手机网络基本都支持,但单位网络不一定。
但,IPV6地址也太长了,我也记不住啊,怎么办?
是的,没人会去记这么长的地址,解决方案就是使用DDNS进行IPV6和域名的绑定。
DDNS绑定IPV6和域名进行访问
-
申请(购买)域名,我们去腾讯云、阿里云等云服务商都可以很轻松地买到便宜的域名,一年可能也就十几块。这里我用腾讯云的dnspod来进行,假设我买域名是halo.org。
-
登录dnspod控制台,找到我的域名,增加域名解析。
- 主机记录:填写nas,则代表访问域名为nas.halo.org。
- 记录类型:由于我们是IPV6, 所以选择AAAA。
- 记录值:nas所在主机设备的IPV6地址。
- 此时,我们就可以用域名
nas.halo.org:24613
或者nas.halo.org:24613/webdav
进行访问了。
因为IPV6地址虽然是公网的,但是它是可变的,也就是说你的NAS设备IPV6地址今天是这个,明天就可能变为另一个,你的域名解析对应的记录值就得跟着变,所以还得有个方案,当地址变化后,主动更新域名解析对应的记录值。
动态更新域名的记录值
这里使用开源方案ddns-watch-dog
- 下载自己设备平台对应的ddns-watch-dog二进制文件
-
./ddns-watchdog-client -i 01234
初始化所有配置文件并退出,文件所在目录会多一个conf文件夹,里面有client.json和各个云服务商的json文件 - 修改client.json
{
"api_url": {
"ipv4": "https://yzyweb.cn/ddns-watchdog",
"ipv6": "https://yzyweb.cn/ddns-watchdog6",
"version": "https://yzyweb.cn/ddns-watchdog"
},
"center": {
"enable": false,
"api_url": "",
"token": ""
},
"enable": {
"ipv4": false,
"ipv6": true
},
"network_card": {
"enable": true,
"ipv4": "",
"ipv6": "eth0 1"
},
"services": {
"dnspod": true,
"alidns": false,
"cloudflare": false,
"huawei_cloud": false
},
"check_cycle_minutes": 30
}
请注意network_card
这里需要用./ddns-watchdog-client -n
查看你自己的网卡id并填入。
- 修改dnspod.json
{
"id": "你的id",
"token": "你的token",
"domain": "halo.org",
"sub_domain": {
"aaaa": "nas"
}
}
- 启动
/path/to/ddns-watchdog-client
即可。
至此,就实现了nas主机IPV6地址与域名动态绑定,以后就只用域名访问即可~