使用华为 MA5671A 猫棒替换运营商光猫

之前办了联通的千兆宽带, 因为受限于 1Gbps 的物理连接速度和 IP 包头等原因实际上只能够跑 930 Mbps 左右的速度. 然后某次看到了 MA5671A 这个 GPON Stick, 是一个 2.5G 的猫棒, 于是我也去闲鱼买了几个回来.

到手刷机

在开头先放上 需要用到的固件下载

到手之后外观成色还行, 然后就开始翻如何给这个玩意刷机

首先你需要有一个 SFP 的座子, 因为之前魔改过 CX341A 所以我这边正好多出几个备件.

然后你需要在 SFP 座子上焊出串口的线

TX      - #2 Pin
RX      - #7 Pin
GND     - #10 Pin
3.3V    - #15 以及 #16 Pin

引脚图

将线连接到串口模拟器上, 我在下面使用的是 macOS Monterey 进行的操作, 这个操作在 Linux 上应该也适用, Windows 用户请使用 TeraTerm 进行操作

首先先安装要用到的 brew 包

brew install c-kermit lrzsz screen
# 如果使用 CH34x 需要安装这个驱动
brew install wch-ch34x-usb-serial-driver

然后打开串口的会话

# wchusbserial14230 设备名可能会不一样
screen /dev/tty.wchusbserial14230 115200

然后你应该会看到类似的输出

U-Boot 2011.12-lantiq-gpon-1.2.24 (Nov 03 2014 - 22:46:28), Build: falcon_sfp_linux

Board: SFP
DRAM:  64 MiB
Now running in RAM - U-Boot at: 8dfc80000
SF: Detected S25FL129P_64K with page size 64 KiB, total 16 MiB

然后终端就没有输出了, 并且会一直重启, 同时因为 uboot 中 bootdalay 是 0, 所以我们无法获得一个 U-Boot 的命令行

这时候事实上是能进入到 UBoot Shell 的, 按住 Ctrl+C 的同时给猫棒上电就会发现猫棒停止重启, 这时候输入 写入 UBoot 信息 中的命令就可以打开串口的回显以及设定 bootdelay, 就可以不需要进行拆机了 (事实上我后面刷的几个棒子就是使用了这个方式)

拆机刷 UBoot

但是我们还是有办法继续下去, 我们只需要拆开外壳短接 Flash, U-Boot 就会让我们进入救援模式, 我们就可以在这个情况下传一个新的 U-Boot 进去并且执行命令

我们只需要拆开外壳就能看见 Flash 了

外壳

我们需要通过镊子之类的东西把这两个卡口中铁片往上翘, 就可以拿下猫棒的外壳, 并且看到下面的 Flash

拆开之后的样子

我们使用镊子或者任何能导电的物体短接 Flash 的脚位

Flash 脚位

我们就能进入 U-Boot 的救援模式了

你应该能看到类似的输出

ROM: CFG 0x00000006
ROM: SFLASH-4
ROM: CFG Ox00000006
ROM: SFLASH-4
ROM: CFG Ox00000006
ROM: SFLASH-4
ROM: CFG Ox00000006
ROM: SFLASH-4
ROM: CG Ox00000006
ROM: SFLASH-4
ROM: CFG Ox00000006
ROM: SFLASH-4
ROM: CFG Ox00000006
ROM: SFLASH-4
ROM: CFG Ox00000006
ROM: SFLASH-4
ROM: CFG Ox00000006
ROM: SFLASH-4
ROM: Boot? (0-9A-F<CR>)

如果没有看到这个输出的话, 你可能并没有成功短接 Flash 的脚位.

我们这时候在终端中输入 7 来选择下发 U-Boot 固件

你应该能看见以下输出

ROM: CFG Ox00000007
ROM: XMODEM
CCC

这时候我们使用以下命令来用 lrzsz 发送文件到猫棒中

把 1224ABORT.bin 换成文件的绝对路径

:exec !! sz -X 1224ABORT.bin

发送固件

等待十几秒发送完成固件之后我们就会启动到新的 U-Boot 当中, 在我们看到

Press SPACE to delay and Ctrl-C to abort autoboot in 5 seconds

这时候按下 Ctrl+C 就可以进入到 U-Boot cli 中了

在这时候断开 Flash 短接的两个引脚 (很重要, 不然无法将配置持久化到 Flash 当中)

写入 UBoot 信息

这时候输入以下命令

setenv bootdelay 5
setenv asc0 0
setenv preboot 'gpio set 3;gpio input 105;gpio input 106;gpio input 107;gpio input 108'

setenv image1_is_valid 1
setenv committed_image 0

saveenv

然后拔掉猫棒的 3.3V 电源重新插上, 我们就可以看到 U-Boot 启动前的五秒延时并且进入到 U-Boot cli 中去

同时这时候我们也可以把外壳装回去了

遇到疑难杂症

事实上我在做这一步的时候一直刷不过去, 总是刷到一半猫棒就掉线了, 然后我就拿万用表戳了好久. 最后我发现原来是 CH340 自带的 3.3V 输出带不动这个猫棒, 3.3V 都直接被拉到 2V 去了, 于是我给他单独拿 MINI560 转接了一个 5A 的 3.3V 出来才能刷进去

最后的走线

继续刷机

在 U-Boot cli 中输入

> loadb 0x80800000
## Ready for binary (kermit) download to 0x80800000 at 115200 bps...

这时候我们使用 Ctrl+A + K 断开 screen,进入下载的固件文件夹执行 (请使用 Bash / Zsh 执行以下命令)

# wchusbserial14230 设备名可能会不一样
kermit -i -l /dev/tty.wchusbserial14230 -b 115200 -s huawei-ma5671a_new-squashfs.image \
    && sleep 1 \
    && screen -d -m -S uart_con /dev/tty.wchusbserial14230 115200 \
    && sleep 1 \
    && screen -S uart_con -p 0 -X stuff $(echo -ne '\015') \
    && sleep 1 \
    && screen -S uart_con -p 0 -X stuff "sf probe 0"$(echo -ne '\015') \
    && sleep 5 \
    && screen -S uart_con -p 0 -X stuff 'sf erase C0000 800000'$(echo -ne '\015') \
    && sleep 20 \
    && screen -S uart_con -p 0 -X stuff 'sf write 80800000 C0000 800000'$(echo -ne '\015') \
    && screen -r uart_con

刷机

这时候就开始将固件发送到猫棒当中去了, 这个过程非常漫长 (大概需要十分钟左右), 请坐和放宽. 在发送完之后这一串命令会自动将固件写入到 Flash 当中去, 检查下猫棒的状态并且重启猫棒.

这时候我们的固件以及发送完成了, 这时候可以取下刷机的 SFP 座子并且将猫棒插到交换机 / 网卡上去了.

配置猫棒

首先我遇到最大的问题是猫棒他有兼容性问题, 在我家的 RB5009 上的 SFP+ 端口上会显示有 1G 的连接但是我实际上好像并不能连接到猫棒, 同时 CX341A 也无法连接到猫棒. 我的交换机 (Juniper EX4200-48T) 上的 1G 以及 10G 的 SFP 端口也认为不存在这个猫棒

这时候我只能去淘宝买了台光电转换器, 这样也能够利用我 RB5009 上 Ether1 的 2.5G 端口

等了几天之后我的转换器到货了, 据说这个转换器是专门为这个猫棒设计的?(

光电转换器

我们先将猫棒连接到电脑上, 设定静态 IP 为 192.168.1.20/24 (猫棒的 IP 为 192.168.1.1), 等待猫棒 up (可以 ICMP Ping) 之后访问 OpenWRT 的后台

OpenWRT 后台

刚刷完固件的 root 密码是空的, 可以直接回车登录

我们这时候就需要获取光猫的 SN 和 LOID 信息了

获取原光猫信息

因为我们是自己换的光猫, 也不太可能去找联通注册光猫, 我们需要获取到原来的验证参数然后写入猫棒当中去

这部分每个地区的每个运营商都有可能不同, 以具体情况为准, 不过基本上设定了 SN / LOID + LOID 密码就可以过鉴权了

我使用的是联通, 因此可能会比较方便获取这三个信息

联通的 SN 码就贴在光猫的背面, 同时使用 user 权限登录到光猫后台就可以看到 LOID 和 LOID 密码这三个信息了

需要注意的是 SN 码以光猫标签上的为准, 我一开始是使用 CUAdmin 后台的 SN 码结果死活鉴权不上, 一看后台和机器上的 SN 是不一样的(

同时我们还需要记录下原来的 VLAN 信息, 这也是联通的 user 权限能看的(user 的权限都这么大了)在我这里 internet 是 VLAN 12

将获取的信息填入猫棒的管理后台并且保存 重启 之后就可以生效了

管理后台

这时候插上光纤, 看到 后台的注册类型是 5 就是注册上了, 如果注册类型为 1 那么你大概是没有插好光纤, 2-4 的话就是认证信息有问题

注册信息

这时候我们可以使用猫棒自带的 VLAN 设定把我们发给猫棒的 Untagged 包打上 VLAN Tag, 不过如果你的路由器比较高级的话可以像我一样在路由器上设定接口的 VLAN (这样 IPTV 之类的也能用了, 不过我没这个需求也没测试过)

路由器设定 VLAN

截止到这里就差不多了, 我们已经能使用 2.5Gbps 的猫棒跑出超出 930 Mbps 的速度了 (事实上我能跑到 1300 Mbps)

成本计算

MA5671A 猫棒 - 68 (本体) + 10 (运费)
SFP 座子     - Free (事实上大概不到 2 元)
光收发器     - 168 (如果路由器支持的话可以不出这个钱)

TODO List

其实我买了不止一个猫棒, 这种直接焊线硬刷其实应该会有问题 (比较的灵车), 可以去画一个板子然后白嫖立创

参考文档

标题:使用华为 MA5671A 猫棒替换运营商光猫

许可协议:知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

作者: Indexyz