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