0. 現象與前言
在使用斐訊 FIR151M 路由器連接網絡時,傳輸數據時頻繁掉線。
官方固件刷了兩個版本,問題未解決。 建議高級用戶看本教程,要做好不能使用 Web 管理界面的心理准備。
1. 准備
沒有打開telnet和ssh服務,因此考慮直接在硬件上下手,在板子上找到了串口。
上排針、電烙鐵、焊錫,引出了四個點,方便使用模塊進行通訊,見下圖。
之后拿PL2303模塊連上計算機,使用超級終端通訊。(PuTTY也是可以串口通訊的)
2. 初步探究
a. 啟動
打開超級終端,連上了串口,重開路由器,發現是通過UBoot引導的,信息如下:
U-Boot 1.1.3 (Aug 9 2013 - 20:53:34) Board: Ralink APSoC DRAM: 16 MB rt2880 uboot v0.00e04 05/25/2006 SERIAL_CLOCK_DIVISOR =16 kaiker,,CONFIG_BAUDRATE =57600 SDRAM SIZE:01000000 Top of RAM usable for U-Boot at: 81000000 Reserving 302k for U-Boot at: 80fb4000 Reserving 260k for malloc() at: 80f73000 Reserving 44 Bytes for Board Info at: 80f72fd4 Reserving 36 Bytes for Global Data at: 80f72fb0 Reserving 128k for boot params() at: 80f52fb0 Stack Pointer at: 80f52f98 relocate_code Pointer at: 80fb4000 ... // 省略若干行 Please choose the operation: 1: Load system code to SDRAM via TFTP. 2: Load system code then write to Flash via TFTP. 3: Boot system code via Flash (default). 4: Entr boot command line interface. 7: Load Boot Loader code then write to Flash via Serial. 9: Load Boot Loader code then write to Flash via TFTP.
FIR151M的性價比還是不錯的,硬件配置相比於同價位產品要給力許多,並且也帶了UBoot,這樣某種意義上也方便了OpenWRT的刷入。
先不管,我們先讓其繼續啟動官方固件。
b. 原因剖析
經過半小時折騰,發現頻繁掉線的原因是因為
- 運行過程中ip_conntrack_count超出ip_conntrack_max的限制
- nf_conntract的hashsize也不夠
似乎是固件本身的問題,我就眼看着ip_conntrack_count漲漲漲,然后就丟包了。
嘗試過使用內嵌的nvram更改相關參數來解決,結果發現根本不會用這個玩意兒……相關的資料也是挺少的,覺得花力氣在這上面不如刷個OpenWRT。
3. 解決方案
a. OpenWRT 前期工作——下載
我用了另外一台運行着Arch Linux的機器作為編譯機。
前往 https://dev.openwrt.org/wiki/GetSource 使用 Git 獲取對應的版本分支。 我使用的是14.07 branch (Barrier Breaker)
git clone -b barrier_breaker git://github.com/openwrt/openwrt.git
切換到該目錄,並進行feeds的更新和安裝
cd /openwrt ./scripts/feeds update -a ./scripts/feeds install -a
我這邊feeds全部都裝了,實際上完全可以選擇性的安裝(甚至不需要feeds),具體可以見 OpenWRT 官方文檔之feeds篇
b. OpenWRT 編譯
OpenWRT 需要進行配置,在 OpenWRT 的目錄下使用此命令進入配置界面
make menuconfig
回車進入子菜單,依次進入前三項子菜單尋找選項,確保前三項如圖所示。
后面就與其它 OpenWRT 教程雷同了,推薦查看其它教程,在此略去。 給予一些注意事項:
- 不要妄想使用luci,硬件配置相比於同價位產品雖然給力許多,但是也只是達到了OpenWRT的低配……個人嘗試過luci,發現進入luci界面后稍微動幾下,路由器RAM就不夠了,於是報Out of Memory的錯,結果就是重啟。
- 想要無線中繼的可以在上方菜單的 Network -> Routing and Redirection 下選中relayd,后續根據該教程進行配置(教程第一步在選完relayd后已經完成)。
在此分享一個自己編譯的帶relayd的固件
openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.zip
c. OpenWRT 刷入(粗略概述)
計算機上准備好tftpd32程序,打開后將目錄定位到固件所在位置。 網線連接計算機和路由器(LAN口),將IP為192.168.1.2,子網掩碼255.255.255.0,網關192.168.1.1 超級終端保持打開並連接,重新插拔路由器電源。 在UBoot啟動階段,投機取巧地按一下2,應該會停止啟動,出現YES/NO的選項,輸入Y。 然后第一步是Input device IP,輸入192.168.1.1(一般默認就是這個,可直接回車); 第二步是Input server IP,輸入192.168.1.2; 第三步輸入固件的文件名,就可以刷入了。