在使用斐讯 FIR151M 路由器连接网络时,传输数据时频繁掉线。 官方固件刷了两个版本,问题未解决。 通过硬件通信方式刷入OpenWRT,解决掉线问题。
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; 第三步输入固件的文件名,就可以刷入了。