本文永久链接: https://www.xtplayer.cn/xiaomi-router-ac2100-sets-up-static-routes/

结合上一篇文章 https://www.xtplayer.cn/raspberry-pi-is-configured-as-an-openvpn-client-to-set-up-an-external-route/ ,当配置好旁路由之后,可以在每个 pc 添加静态路由来实习正常访问 vpn 网络。但是有的设备可能不支持配置静态路由,这种情况下将无法访问 vpn 网络。

为了满足所有设备都可以访问 vpn 网络,我们可以在主路由器上添加一条静态路由,把 vpn 网络的下一跳地址设置为旁路由器 ip。

以下以小米路由器 AC2100 为例,因为 AC2100 通过 UI 界面不支持配置静态路由功能,因此我们需要先破解 ssh 登录,然后通过命令行添加静态路由。

获取 stok

浏览器访问路由器管理 ip 并登录,然后在浏览器地址栏中可以看到 stok 代码,stok= 之后 /web 之前的那一段。

⚠️ STOK 在每次登录时都会变化,拿到后尽快使用,不要关闭浏览器。

开启 SSH

将上面获取的 STOK 替换到下面链接中的 <STOK> 位置,然后完整复制到浏览器地址栏中打开。

http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B

打开后,浏览器页面应返回 {"code":0},表示命令执行成功

修改 root 密码

将上面获取的 STOK 替换到下面链接中的 <STOK> 位置,然后完整复制到浏览器地址栏中打开。

http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B

返回 {"code":0} 即成功,此时 SSH 密码已被设置为 admin

验证并连接 SSH

  1. 路由器自动重启:建议手动拔电重启一次,确保 SSH 服务完全启动

  2. 使用 SSH 客户端连接

    • Windows:推荐 PuTTY、MobaXterm、或直接用 PowerShell

    • Mac/Linux:终端直接执行

连接参数:

地址:192.168.31.1
端口:22
用户名:root
密码:admin(或上一步获取的密码)

测试命令 ssh root@192.168.31.1,输入密码后看到如下提示说明成功:

BusyBox v1.25.1 () built-in shell (ash)
root@XiaoQiang:~#

修改 root 用户密码

登录之后建议执行 passwd 命令修改 root 用户密码,输入 passwd 命令后,两次输入密码即可。

常见问题

问题 解决方法
返回 {"code":401}{"code":1523} STOK 过期或无效,重新登录获取新的 STOK;也可能是固件版本不兼容,尝试降级
返回 404 链接复制不完整,检查是否有缺失
执行后 22 端口仍不通 重启路由器后再试;部分固件可能需要降级到 2.0.7
忘记密码 重新执行第三步的密码修改链接即可覆盖

操作提醒

  • 整个过程不会清除已有配置,WiFi 名称和密码会保留
  • 路由器重启后 SSH 权限不会丢失,可以长期使用

添加静态路由

执行 vi /etc/rc.local,添加如下配置

/sbin/route add -net <vpn-net> netmask <vpn-subnet> gw <gw-ip>
# vpn-net: vpn 网段,比如 10.201.136.0
# vpn-subnet: vpn 网段对应的子网掩码,比如 255.255.255.0
# gw-ip: 下一跳地址,这里为旁路由 ip

修改防火墙配置

执行 vi /etc/config/firewall ,在最开始的 config defaults 中,将 REJECT 改为 ACCEPT,并且把 option drop_invalid 地址为 0,修改完成后重启路由器。

config defaults
option syn_flood '0'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option drop_invalid '0'
option disable_ipv6 '1'