跨网段环境下,小米摄像机配置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
校验提示文案