京东云无线宝(OpenWrt)控制终端定时断网

最近将家里的路由器从 小米 换成了 京东云无线宝 。换完后发现新路由器不支持设备的定时断网了。对于有小朋友的家庭,定时断网可以很好的帮助小朋友控制上网时间。好在新入的这款路由器基于 OpenWrt 开发,经过几天的研究,顺利的搞定了定时断网功能。

开启路由器的SSH

注:2023-10 近期路由器被自动升级了。网上的开门方法全部失效,只能尝试TTL开门了。

开始折腾的第一步是搞定路由器的SSH。SSH登录到路由器后就可以随意折腾了。

由于京东云官方的封堵,不同版本固件的SSH开启方式有所不同。

  1. 1.5.40r2181<= 郑羊羊咩的窝-京东云
  2. r2262< 京东云无线宝r2262之前固件版本开SSH
  3. r2279< 京东云无线宝升级r2262固件后打开SSH

我拿到的这台路由器的固件版本很老,直接采用第一个方法开启SSH。具体方法如下:

登录京东云,打开f12控制台,将下面的代码贴入浏览器控制台并运行。

$.ajax({
    url: "/jdcapi",
    async: false,
    data: JSON.stringify({
        jsonrpc: "2.0",
        id: 1,
        method: "call",
        params: [
            $.cookie("sessionid"),
            "service",
            "set",
            {
                "name": "dropbear",
                "instances": {"instance1": {"command": ["/usr/sbin/dropbear"]}}
            }
        ]
    }),
    dataType: "json",
    type: "POST"
})

设备定时断网方案

OpenWrt系统通常自带 web 管理界面 LuCI ,即使没带也可自行安装。如果有 LuCI ,通过 LuCI 丰富的插件系统,可以轻松的实现上网时间的管控。

京东的这款路由器毕竟不是完整的OpenWrt系统,无法直接安装 LuCI 。为了设备的稳定性,保险起见没有继续折腾 LuCI 。研究后发现京东云路由器的自带的黑明单功能是通过修改设备 /etc/config/wireless 配置文件实现,于是有了下面的方案。

  1. 使用 uci 命令修改 wireless 配置文件,将需要管控的设备加入/移出 Wi-Fi 黑明单。
  2. 使用 crontab 创建定时任务,实现定时控制。
  3. 在路由器的黑明单中无法查看到通过修改 wireless 加入黑明单的设备。但可以通过将设备加入黑名单再移除的方式对设备进行临时解禁。

具体操作步骤

登录路由器

开始路由器的 SSH 登录功能,使用 SSH 客户端登录路由器。用户名为 root ,密码为路由器的管理密码。

ssh root@jdcloudwifi.com

创建将设备加入黑明单的相关脚本

1. 创建目录 /scripts 。我们自己的脚本都将放到该目录。

mkdir -p /scripts 
cd /scripts

2. 将下列脚本复制到 /scripts 目录,并使用命令 chmod +x /scripts/*.sh 为脚本添加可执行权限。

disable-wifi.sh

#!/bin/sh
# 禁止设备连接 Wi-Fi
# 使用 `cat /etc/config/wireless` 查看无线配置。通过 `option ssid` 找到对应的 Wi-Fi 配置项名称。注: 2.4G 和 5G 两个热点都需要配置。 
uci add_list wireless.ath0.maclist="$1"
uci add_list wireless.ath1.maclist="$1"
uci commit wireless
wifi reload

enable-wifi.sh

#!/bin/sh
# 允许设备连接 Wi-Fi
uci del_list wireless.ath0.maclist="$1"
uci del_list wireless.ath1.maclist="$1"
uci commit wireless
wifi reload

disable-tv.sh

#!/bin/sh
# 将 dd:dd:dd:dd:dd:dd 换成需要加入黑名单的设备的 MAC 地址
/scripts/disable-wifi.sh dd:dd:dd:dd:dd:dd

enable-tv.sh

#!/bin/sh
/scripts/enable-wifi.sh dd:dd:dd:dd:dd:dd

3. 执行 crontab -e 编辑系统定时任务。

# 周一到周五,8点关闭电视网络
0 8 * * 1-5 /scripts/disable-tv.sh
# 周一到周五,18点开启电视网络
0 18 * * 1-5 /scripts/enable-tv.sh