小米路由器3G刷原生OpenWrt

路由器参数:

  • 处理器:MT7621A MIPS双核880MHz
  • ROM :128MB SLC Nand Flash
  • 内存:256MB DDR3-1200
  • 2.4G:2X2(支持IEEE 802.11N协议,最高速率可达300Mbps)
  • 5G :2X2(支持IEEE 802.11AC协议,最高速率可达867Mbps)
  • 天线:外置全向高增益天线4根(2.4G最大增益5dBi 2根 5G最大增益6dBi 2根)
  • 散热:鳍片式大面积铝材散热器
  • USB: 1个 3.0接口(DC output:5V/1A)
  • LAN:2个 10/100/1000M自适应LAN口(Auto MDI/MDIX)
  • WAN:1个 10/100/1000M自适应WAN口(Auto MDI/MDIX)
https://www.mi.com/miwifi3g/s...

刷机大致步骤

  • 将路由器固件升级到开发版;
  • 开启路由器 ssh 登录功能;
  • ssh 登录路由器并从命令刷入第三方固件;
  • 或者,ssh登录路由器刷入第三方引导 Breed,再通过 Breed 网页界面刷入三方固件;

这里的 Breed 也是一种 bootloader,类似于 Android 刷机时用到的 Recovery TWRP.

注意事项

这个放在前面,不然容易踩坑(针对 OpenWrt)。

目前(2020/02/23),Breed 还不能直接刷入原生的 OpenWrt,原因是:

Breed固件升级界面一次只能选择一个固件,而 OpenWrt 的固件是分开的两个文件(见下方),单刷1个无法正常开机;

解决方法:

  • 路由器开启 ssh 后,上传 OpenWrt原生固件使用命令行刷入;
  • 使用 Breed 刷入将OpenWrt整合过后的固件,比如:
    小米R3G固件OpenWrt R20.1.24 by Lean支持4G,独家支持从Breed刷入
    不过我试过这个固件,OpenWrt 20的开发版,刷完后在命令行安装软件时,提示 /overlay 空间不足,然后崩溃了,固件丢失并且回到了 bread 界面

其他固件,如 潘多拉和华硕的,都是单文件,没有这个问题。

文件准备

  • OpenWrt镜像站

  • 官方固件开发版
    地址:http://miwifi.com/miwifi_down...
    文件:miwifi_r3g_firmware_12f97_2.25.124.bin
  • 下载 OpenWrt
    当前版本:19.07.1

    • openwrt-19.07.1-ramips-mt7621-xiaomi_mir3g-squashfs-kernel1.bin
    • openwrt-19.07.1-ramips-mt7621-xiaomi_mir3g-squashfs-rootfs0.bin
  • 下载 ssh 工具包并使用U盘刷入
    地址:https://d.miwifi.com/rom/ssh
    文件:miwifi_ssh.bin
    登录上面的地址,在对应的路由器后面下载工具包,文件名固定为miwifi_ssh.bin,将其放入一个 FAT32 的U盘根目录,U盘不能是启动盘;
    同时记下生成的root账号和密码;
  • 下载 Breed 这个不死 bootloader
    地址:https://breed.hackpascal.net
    文件:breed-mt7621-xiaomi-r3g.bin

    Breed 还有个WEB控制台助手,我们可以下载它,打开后配置路由器ssh信息,选择对应的型号,远程刷入 breed。
    当前版本为:路由器breed_Web控制台助手v5.9版本.7z,自行百度。

  • 下载潘多拉固件(固件第二选择)
    地址:http://opt.cn2qq.com/padavan
    文件:MI-R3G_3.4.3.9-099.trx (当前版本)

刷机过程

  • 升级 ROM 为开发版
    a. 打开 http://miwifi.com/miwifi_down...,在下载中心点击右侧的 ROM,找到 小米路由器3G 开发版,下载对应固件;
    b. 登录 http://192.168.31.1, 在高级中完成固件升级;
  • 开启路由器 SSH
    开启了ssh 才可以通过远程把文件上传到路由器上,所有刷机都要经历这一步。

    按照小米官网页面的说明执行,即可顺利完成ssh开启。简单步骤为:
    插U盘 - 断电 - 按住reset - 通电 - 等待指示灯闪烁(全程大约10秒)。

    开启后,待路由器重启成功,使用 ssh 工具登录看能否成功:

    ssh [email protected]

    成功拔掉U盘,进入下一步。

  • 安装 breed
    使用 ssh 工具将 breed-mt7621-xiaomi-r3g.bin 上传到 /tmp 目录,并执行下面的命令刷入:

    mtd -r write /tmp/breed-mt7621-xiaomi-r3g.bin Bootloader

    没问题的话,bootloader 就刷好了。这时候我们就可以重置路由器,这样开机后就进入到了 Breed 的刷机页面。
    重置路由器:断电 - 按住Reset不放 - 通电,等待大约5秒,指示灯有规律闪烁即可。

  • 使用 Breed 刷机

    • 在 Breed 页面中,先备份所有的数据,固件备份选项里能点的都点一下;
    • 小米 R3G 设置中,找到并删除 normal_firmware_md5 这个键值,因为刷新刷的固件 md5 值与原来的不一致会导致无法开机;
    • 环境变量编辑中,添加一个环境变量,变量名为xiaomi.r3g.bootfw,值为2。这个操作的解释如下:
      breed的启动流程如下:
      a. 如果 kernel0 存在,那么启动 kernel0
      b. 如果 kernel0 不存在,kernel1 存在,那么启动 kernel1
      c. 如果 kernel0 和 kernel1 都存在,则检查环境变量 xiaomi.r3g.bootfw 的值,如果存在且值为2,那么启动 kernel1,否则启动 kernel0
    • 固件更新中的固件后,上传需要刷入的固件(只能是单一固件),确定后点击更新,完成刷机;
    • 根据不同的固件类型,登录路由器的管理页面地址也有不同,目前已知:
      a. padavan: http://192.168.123.1 admin/admin
      b. 华硕:
  • ssh 刷入原生 OpenWrt
    如果你觉得三方的固件集成东西太多,也可以自己手动刷入原生的 OpenWrt,我就是这是干的。

    • 使用breed 刷入官方的开发版固件;
    • 将上面准备的2个OpenWrt文件上传到 /tmp 目录下,执行下面的命令写入固件:

      mtd write openwrt-ramips-mt7621-mir3g-squashfs-kernel1.bin kernel1
      mtd write openwrt-ramips-mt7621-mir3g-squashfs-rootfs0.bin rootfs0
      reboot

      也许你在其它地方看见还有下面这条:

      mtd write openwrt-ramips-mt7621-mir3g-squashfs-kernel1.bin kernel0

      即将同一个 OpenWrt kernel 固件刷写到 kernel0 和 kernel1 上,这样也可以避免 Breed 启动到了 kernel0 上别的固件里面去了;
      但是我们设置了环境变量 xiaomi.r3g.bootfw 为 2, 就没必要多刷一个 kernel0 了。

    • 重启成功就可以进入管理页面了,OpenWrt 为:http://192.168.1.1,初始账户密码为空,需要设置;

从 OpenWrt Breed 适配版刷回官方ROM

在 breed 恢复界面中,选择官方的开发版ROM上传并刷入即可;

使用 privoxy 将 socks5转换为http

这里遇到了一个坑,使用了 openert privoxy 插件生成的配置不能访问国外网站,但国内的可以,很奇怪;

已知 privoxy 3.0.22 版本以后默认使用了新的配置文件路径和格式,但还是没能用新的方式使用代理google,因此改为老的方式,后面又根据老的方式修改了新的方式,现在两种配置文件都可用。

  • 旧的配置文件
confdir                      /etc/privoxy
logdir                       /var/log
filterfile                   default.filter
logfile                      privoxy.log
actionsfile                  match-all.action  # Actions that are applied to all sites and maybe overruled later on.
actionsfile                  default.action    # Main actions file
listen-address               192.168.100.1:9446
forward-socks5                 / 192.168.100.1:9440 .
toggle                       0
enable-remote-toggle         1
enable-remote-http-toggle    0
enable-edit-actions          1
enforce-blocks               0
buffer-limit                 4096
forwarded-connect-retries    0
accept-intercepted-requests  0
allow-cgi-request-crunching  0
split-large-forms            0
keep-alive-timeout           300
socket-timeout               300
permit-access                192.168.0.0/16
debug                        1     # show each GET/POST/CONNECT request
debug                        4096  # or Startup banner and warnings
debug                        8192  # or Errors - *we highly recommended enabling this*
  • 新的配置文件
config system 'system'
        option boot_delay '10'

config  privoxy 'privoxy'
        option  confdir         '/etc/privoxy'
        option  logdir          '/var/log'
        option  logfile         'privoxy.log'
        list    filterfile      'default.filter'
        list    actionsfile     'match-all.action'
        list    actionsfile     'default.action'
        list    forward_socks5  '/ 192.168.100.1:9440 .'
        list    listen_address  '192.168.100.1:9446'
        list    permit_access   '192.168.0.0/16'
        option  toggle          '0'
        option  enable_remote_toggle    '1'
        option  enable_remote_http_toggle       '0'
        option  enable_edit_actions     '1'
        option  enforce_blocks          '0'
        option  buffer_limit            '4096'
        option  forwarded_connect_retries       '0'
        option  accept_intercepted_requests     '0'
        option  allow_cgi_request_crunching     '0'
        option  split_large_forms       '0'
        option  keep_alive_timeout      '300'
        option  socket_timeout          '300'
        option  debug_1         '0'
        option  debug_512       '1'
        option  debug_1024      '0'
        option  debug_4096      '1'
        option  debug_8192      '1'

两者的差异化:

  • 新配置文件使用 privoxy 插件生成,短横线改成了下划线;
  • 转发配置由 forward_socks5 '192.168.100.1:9440 改为forward_socks5 '/ 192.168.100.1:9440 .'

参考文档

你可能感兴趣的:(openwrt,路由器)