openwrt路由器型号:WNDR3800
一.实验背景
在pc机上通过xshell软件登录openwrt路由器,pc机通过网线与openwrt路由器的LAN接口相连。openwrt路由器自带两块无线网卡,且能通过自带的网卡发出wifi,pc机也可以通过连接此wifi登录到openwrt路由器,我将openwrt路由器发出的wifi全部关掉了。我通过有线连接的方式登录openwrt路由器。实验设备连接图如下
在上图中,pc机(cilent端)和路由器(server端)都连接第三方的wifi热点,处于一个局域网中,两者能进行http通信,但是pc机不能通过这种连接方式利用ssh协议登录到路由器。所以我采用有线连接的方式,利用ssh协议登录到路由器。
在实验中,有一个功能是要将网卡从monitor模式切换为managed模式,然后在managed模式下,系统作为client端向server端发起http请求。
网卡在切换模式的过程中,路由表会发生变化。导致以前通过无线wifi方式进行http通信的过程失败。我原先是想通过修改路由表指定到server端的特定路由,在没能实现此功能 的情况下,我想到开机启动时删除有线路由,这样系统中就只有一条无线路由了,即使执行了网卡的模式切换,由于路由表中只有一条无线路由,所以http通信可以成功。我在系统中加了一个定时任务,路由器(作为client端)每隔一分钟向pc机(作为server端)发起一次http请求。在系统重启后,我在server端观察到每一分钟收到了来自client的一个http请求。但是我发现不能通过有线连接的方式登录到路由器中了,因为有线路由在开机时被我写的脚本删掉了。
至此,我把路由器自身发出wifi的功能关了,也不能通过有线连接的方式登录路由器了。通过第三方机器发出wifi相连的方式只能实现http通信,不能通过ssh的方式登录路由器。是的,我现在登录不了路由器了。实验背景描述完毕。
二.实验过程
现在有两种方式可以让我重新登录到路由器。第一种:进入路由器的安全模式。第二中:刷机。
我采用的是第一种。路由器的背面有一个很隐蔽的开关,在下图中我用红方框圈的部分。
我查到的手册写到:“OpenWrt 的安全模式能帮你解决任何问题是因为 OpenWrt 使用 JFFS2 分区存储用户数据 (如果你用的是 SquashFS 固件)! 在你忘记密码, 或把你自己墙了, 或你弄坏了一个启动脚本的情况下, 你可以用安全模式恢复”。
第一次在没有查资料的情况下,我尝试恢复出厂设置失败了。我想当然的以为只用按住reset按钮就可以恢复出厂设置。我的做法是:系统开机之后,用细针(只要是能伸进红框中小孔的工具)按住reset按键10秒放开。但是我预先写在系统中的定时脚本还在向server端发起http请求。而且我仍然不能通过有线连接的方式登录到路由器中。系统没有进入安全模式。
第二次我查找资料后发现进入openwrt的安全模式,步骤如下:
1.关闭路由器电源,再打开路由器电源,路由器灯全会由全亮变为全暗,等待SYS灯再次亮起,用细针(只要是能伸进红框中小孔的工具)按住reset按键,直到SYS灯出现快速闪烁,松开reset按键,成功进入安全模式。
2.配置本地机器ip为192.168.1.2 子网255.255.255.0 路由:192.168.1.1。使用telnet直接登录路由器:telnet 192.168.1.1。
进入安全模式后,xshell界面如下:
然后我做了以下操作:进入后mount可以看到root是不给写的,运行命令mount_root,先映射root盘。
至此我能够将我写的crontab定时任务(导致我不能通过有线连接的方式登录路由器)删除。所以就解决了我的问题。
之后我进行了下述操作:passwd修改密码,uci get network.lan.ipaddr复位路由器的ip。此时我看到我写的代码和安装的软件都还在,说明 在安全模式下做的以上操作没有让系统恢复出厂模式。 然后我进行了代码的备份。如果不做后续操作,我可以继续以前的工作。但是我运行了命令mtd -r erase rootfs_data。这个命令会清除整个jfss2区的数据,相当于恢复工厂设置。运行这个命令后我写的代码和安装的软件,我做的配置全部没了。
3.重启系统。
系统恢复出厂设置完成。之后就能通过有线的方式登录到路由器了。
三.实验结论
我分析了我的错误。我的错误在于恢复出厂设置之前没能了解恢复之前和恢复之后分别是什么现象。没有遵照客观事实,而人为的判断是否恢复了出厂设置。
我开始做实验时,对失败的定义是错误的。失败不是不符合我的期待,而是不符合恢复出厂设置的定义,我并不知道出厂 设置的定义是什么。
参考链接:
https://openwrt.org/zh-cn/doc/howto/generic.failsafe
https://www.router-reset.com/reset-manuals/Netgear/WNDR3800#factory-reset-instructions