跨网段环境下,小米摄像机配置NAS存储
背景
我的网络结构是这样的:
我家,父母家,丈母娘家,三地通过 wg 异地组网,设置好路由表后,内网192.168.x.x之间可以互通。
不幸的是,小米摄像机默认只支持保存到本地局域网的NAS中,访问不到远程的群晖 。
分析
结合抓包分析了一下,米家App在设置NAS存储的流程是这样的:
用户第一次打开NAS存储的设置页,触发摄像机搜索局域网的NAS设备(局域网广播,NBNS协议)。
NAS设备在收到广播后,进行响应。
App出现NAS的设备列表,选择一个输入账号密码,选择存储路径,开始文件同步。
第一第二步是为了提升用户体验,避免手工输入ip地址进行的“用户体验优化”,实际上是非必要的。我印象中去年还是前年的时候,这个地方就是手工输入IP地址的,现在变了。
准备工作
经过一系列摸索,由于小米摄像头只支持SMB1,并且不支持传输加密(这个是网上很多文章没有提及的,坑了我很久),因此在配置前请先完成以下工作(下面以群晖为例):
打开「控制面板」->「文件服务」->「SMB」->「高级设置」的常规选项卡,「最小 SMB 协议」选择 SMB1,传输加密模式选择「由客户端定义」,保存,如下图。
解决方案
方案一:局域网广播转发
优点:是个普适性的解决方案,不仅仅是为了米家摄像头。利用此工具顺便可以把 mDNS、Bonjour、SSDP 转发一起给做了;这样 HomeKit、Airplay、打印机共享、局域网联机游戏等许多应用场景都可以一并解决。
缺点:对于 layer 3 vxn 例如 wg,配置略微复杂;并且需要对路由器有操作权限,如果其中一端是你的公司网络,而你又不是网管的话,建议方案二。
这里只对局域网广播进行转发。我用的是 udp-broadcast-relay-redux 这个工具,openwrt 下可以直接opkg安装现成的,也可以下载源码编译,或者构建docker容器,请在github自行搜索工具名称,这里不让发。
例子在README里也已经给出了,针对基于tun设备的vxn(wg),需要在两边路由开启两个进程,结合我的网络环境例子如下:
发起方:
udp-broadcast-relay-redux --id 1 --port 137 --dev br-lan --dev wg0 -t 192.168.253.3
(137为 NBNS 广播端口,192.168.253.2为接收方的wg节点IP)
接收方:
udp-broadcast-relay-redux --id 2 --port 137 --dev br-lan --dev wg0 -t 255.255.255.255
这只是单向的广播转发,如果想要双向广播的话,A、B网络还需要互换位置,再开两个进程。。
如果只是为了米家摄像头的NAS设置的话,只要单向转发就可以啦,并且在设置完毕之后就可以结束进程了。
方案二:通过 miiocli 直接写入配置
优点:视频储存时长相比App来说多了半年和一年两个选项(可能和摄像头型号有关)。另外还有其他功能可以探索。
缺点:需要在命令行工具里输入米家账号和密码,在意隐私的同学可以去检查下源代码,应该问题不大;另外因为设备原因,偶尔会出现无法连接的现象,并且出现之后必须重启设备才能恢复正常。
(写入SMB配置的功能刚提交PR,还未合入和发布,请耐心等待 )
需要有python3和pip,安装命令:pip3 install python-miio
初次使用时,先执行 miiocli cloud list 命令获取设备token,按照提示输入账号/密码/国家
查看NAS配置:
miiocli chuangmicamera --ip [摄像头IP地址] --token [摄像头Token] get_nas_config
写入NAS配置:
miiocli chuangmicamera --ip [摄像头IP地址] --token [摄像头Token] set_nas_config on "smb://user:pass@192.168.40.2/camera" realtime quarter
set_nas_config后面共4个参数,第一个on/off代表开关,第二个是smb的路径,按照标准的url格式填,第三个上传间隔realtime/hour/day,第四个储存时长week/month/quarter/halfyear/year。
方案三:SMB套娃(不推荐)
把远端的群晖文件夹挂载到本地路由器上,本地路由器再开启SMB服务共享此文件夹。
一开始我就是这么操作的,实测传输性能比较慢,十分不建议,陆陆续续同步了一个礼拜。
其他
设置永久储存
储存时长三个月也好,一年也好,都不是永久的。每次同步前摄像头都会把NAS里过期的录像给删了。如果你想存一辈子怎么办?
很简单,首先单独给小米摄像头创建一个群晖账户(具体不讲了),然后修改他的权限,让他只能读写,不能删除 。
在「控制面板」->「用户与群组」->「用户账号」页面选中这个账户,点击「编辑」->「权限」修改账户权限,对需要设置权限的文件夹勾选「自定义」,如图:
在接下来弹出的「权限编辑器」窗口,取消选中「删除子文件夹和文件」和「删除」这两项,保存,大功告成。
解决无法定期同步的Bug
不知道各位有没有遇到同样的问题,我的摄像头开启NAS存储后,只会把当前SD卡的视频进行同步,同步完毕后任务就结束了,上传时间间隔不管是实时、一小时、还是一天,都不生效,这还玩个啥呀 。好在有miiocli工具,我们可以设置一个定时任务,每天重新开启一下。周期建议不要太短,每次开启后摄像头会做许多前置工作(登录SMB,获取目录和文件信息,滚动删除过期的视频,然后才上传最新的视频),略耗时。
核心命令就是下面这句,至于定时任务怎么配置就不说啦,以及运行环境是在群晖里还是docker容器里各位自行决定:
miiocli chuangmicamera --ip [摄像头IP地址] --token [摄像头Token] set_nas_config on "" realtime quarter
参数介绍请回顾上文方案二,这里第二个参数可以留空,也就是""(两个双引号或者两个单引号),不能删掉,删掉就少了一个参数。留空表示不对NAS存储位置进行修改。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
猫头鹰二号
校验提示文案
哟陈总嘛
校验提示文案
啊笨猫
校验提示文案
美好未来11
我们两个网段这样可以互通
校验提示文案
188870716T
校验提示文案
熊本部长
校验提示文案
piku
话说我的网络环境中也有类似需求,目前是在三层vxn链路上做eoip桥,使特定的一个网口与对端二层相通,dhcp之类的也由对端提供。实测100M移动和100M联通,可以稳定的跑IPTV(消耗约20M带宽)。其实我也试过直接打eoipv6桥,由于不限速,效果可以更好
校验提示文案
xuanqc
校验提示文案
SM张达妈
校验提示文案
万事无忧
校验提示文案
灵KOYB
校验提示文案
purezhang
校验提示文案
我是星星呀-
校验提示文案
bjalex
校验提示文案
kkfishman
校验提示文案
东东得意
校验提示文案
sky300
miio.device:Found an unsupported model 'isa.camera.df3' for class 'ChuangmiCamera'. If this is working for you, please open an issue at 去看看
校验提示文案
fenca998
WARNING:miio.device:Found an unsupported model 'mijia.camera.v1' for class 'ChuangmiCamera'. 给了这个警告,然后nas设置页面就进不去了,恢复出厂升级固件版本都没用,查询nas配置
{'share': None, 'state': 4, 'error_code': 22, 'sync_interval': 300, 'video_retention_time': 7776000, 'last_sync_time': 0},不支持能否不改写啊,这样直接把我摄像头整废了啊
校验提示文案
mamoko09
校验提示文案
禾雀花
校验提示文案
枫叶飘落
校验提示文案
无事长相见
校验提示文案
夏天的冰箱
校验提示文案
贱贱大队长
设备不支持
校验提示文案
咖啡回味
校验提示文案
值友7839923738
校验提示文案
woshishui---
校验提示文案
去年初春
1. 米家app只能回放SD卡的视频,有没有办法回放NAS的备份。
2. 备份到NAS的视频太零碎,怎么直观显示查看呢?
校验提示文案
电机猫
校验提示文案
值友3078742754
校验提示文案
pmslrxe
校验提示文案
值友6110170074
校验提示文案
一只大灰灰
校验提示文案
搞机的老周
校验提示文案
POKO哑虎呸呸
校验提示文案
北京大人
校验提示文案
I57I
校验提示文案
darcylu
校验提示文案
莫得感情的考证人
校验提示文案
Wwong
校验提示文案