共计 7626 个字符,预计需要花费 20 分钟才能阅读完成。
作者:我不及她温柔(公众号:九尾科技之家)
首先,要隆重地宣布一下:我,荣升换岗了!
终于,不再是天天数钱的工具人,灵魂也好像松了一口气。只是,岗位换了,地点也跟着换了,那些曾精心部署的路由环境,像落叶留在了原地——它们,终究不能随我漂泊。
踏入全新的办公生活,结识了一位靠谱又仗义的老哥。想着刚来,不打算再拉一条宽带,既费钱也费心,于是厚着脸皮蹭起了他的WiFi,借这束来自他处的无线信号,抚慰我孤苦漂泊的灵魂。
至少能让我继续上 Steam,登录google,查询我所想了解的信息,追点自由的浪。毕竟,光靠手机热点撑着,实在不靠谱——帧率飘忽,游戏掉线,眼看胜利却突然断网,那叫一个锥心。
直到某个夜晚,在 APEX 的决赛圈,我正准备一战封神,画面却骤然一黑,网络——死了。那一刻,我悟了:
台式机连 WiFi,终究不过是镜中月,水中花。
于是,一个念头悄然冒出:
“我能不能,把这无线的信号,转成一根实实在在的网线?”
开始查资料,看教程,读文档,一点点摸索,试图把这个灵感变成现实。设想很清晰:我用一台路由器连接老哥的WiFi,再把信号转换成本地的以太网输出,这样,既优雅又稳定,还能继续看世界、打胜仗。
当然,也有兄弟说:“你干嘛不拉根网线过去?”
我苦笑——
“我愿意啊!可天涯太远,墙壁太厚,电钻不在身边,命也不能拿来凿墙。”
于是,我开始挑路由器。可每当公文包下肚,荷包一看……啊,钱包空如人生低谷。买路由的念头,便一再打住。
直到某个夜黑风高的夜晚,酒意微醺,我在群里感慨了一句:
“真想搞个路由器,好写个无线中继的OpenWrt教程。”
没想到,一位神秘大哥直接回:
“我这有个闲置的,明天寄你。”
我:?????(惊喜到语塞)
如果不是这位大哥雪中送“网”,也许我那个文档早就胎死腹中,连世界都没机会看见。
我们常说,理想要落地,热爱要有支点。
但很多时候,技术不是从天而降的启示,而是你在柴米油盐的缝隙里,不死心地折腾、不放弃地追问:“还能不能再搞一搞?”
能走到这一步,靠的不只是教程和知识,还有一群愿意伸出手的兄弟、肯陪你折腾的时间,和那些深夜里,你仍不放下的念头。
愿你的每一次掉线,
都能换来下一次更稳的连接;
愿你的人生,不只在线,
更能打通——世界与自由之间的那一根以太网。
生命不息,网络不断;
技术有光,折腾即诗。
前提条件
1、一个能支持刷Openwrt系统的路由器
2、路由器的无线网卡支持客户端模式(Client Mode)和 AP 模式(双频更稳定)
3、有可连接的上级无线网络(主路由)
一、路由器刷入Openwrt系统
路由器是CMCC RAX3000M是中国移动定制的一款路由器,分为两个版本,EMMC版本(算力版),NAND版本(普通版),区别是算力版有64GB的emmc,移动准备跑PCDN,普通版是128MB的闪存。我的是EMMC版本(伟大的群友给的)
CMCC RAX3000M性价比很高,是搭载联发科MT7981B芯片目前最高的配置了,主要参数如下:
- 处理器:联发科MT7981B 双核1.3GHz
- 运行内存:512MB
- eMMC存储:64GB
- FEM功放:集成5路
- 无线协议:Wi-Fi 6 (802.11ax)
- 2.4G WiFi 2×2 574Mbps
- 5G WiFi 2×2 2402Mbps
- 网络接口:千兆网口 × 4
- USB接口:USB 3.0 × 1
- eMMC存储:64GB
一、给路由器刷入Openwrt系统
1、开启SHH
原理是通过修改配置的方式来开启ssh,由于后面生产的固件,配置文件可能会被加密,因此我们需要解密后才能修改配置文件,然后按照同样的加密方式生成新的配置文件。
注意:不要随便导入别人的配置文件,有的人版本和你不一样,导入了可能出错!最好就是自己导出配置文件,自己修改,自己打包再导入。
官方固件的系统完全没有可玩性、还有可能会被锁机,发挥不出这个硬件的性能必须刷机
EMMC 和 NAND的开启ssh步骤完全相同,都是导出配置->解密->修改配置->加密->导入配置 参考教程: https://blog.codee.top/rax3000m%E6%90%9E%E6%9C%BA%E7%9B%AE%E5%BD%95/
参考1: https://blog.csdn.net/weixin_45357522/article/details/135342315
参考2: https://blog.iplayloli.com/rax3000m-router-flashing-explanation-nanny-tutorial-easy-to-get-started.html
1.1、开启ssh流程图
1.2导出配置
配置管理->导出配置文件
首先在系统的:配置管理->导出配置文件得到一个cfg_export_config_file.conf的配置文件。
代码:openssl aes-256-cbc -d -pbkdf2 -k $CmDc#RaX30O0M@\!$ -in cfg_export_config_file.conf -out – | tar -zxvf –
如果你是6月份生产的,解密可能会报错,因为早期的版本是没有对配置文件进行加密的。
代码:tar -xvzf cfg_export_config_file.conf
1.3、修改配置
把cfg_export_config_file.conf下载后上传到 Linux系统中,或者使用 WSL子系统,我这里使用的是Ubuntu系统。
解密配置文件:
openssl aes-256-cbc -d -pbkdf2 -k $CmDc#RaX30O0M@\!$ -in cfg_export_config_file.conf -out – | tar -zxvf –
用编辑器修改etc/config/dropbear文件:
vim etc/config/dropbear
按i键进入插入模式把option enable ‘0’改为option enable ‘1’开启ssh服务,按esc然后:wq保存退出。
用编辑器修改/etc/shadow文件,清除root用户密码:
vim /etc/shadow
将root两个冒号间的密码删除然后:wq保存。
使用加密打包命令:
tar -zcvf – etc | openssl aes-256-cbc -pbkdf2 -k $CmDc#RaX30O0M@\!$ -out cfg_export_config_file_new.conf
这里出现权限不够的报错,不用理会,实际已经加密打包好了
1.4、导入新配置文件
进入系统后台配置管理->导入配置文件,选择我们刚修改好的cfg_export_config_file_new.conf,重启路由器后就能使用root用户通过ssh访问了,默认地址:192.168.10.1
2、刷入uboot
uboot是用来刷入固件的,如果你uboot都刷错了那路由器就成砖了,因此以下步骤需要谨慎!这个机子的uboot有3种,总的来说immortalwrt的uboot用的比较多,兼容性更好一点,采用这个。
参考: openwrt RAX3000M官方教程 https://github.com/openwrt/openwrt/pull/13513
参考: immortalwrt刷入教程
https://github.com/AngelaCooljx/Actions-rax3000m-emmc
https://www.right.com.cn/forum/thread-8306986-1-1.html
uboot地址: Developer drive of ImmortalWrt – /uboot/mediatek
备用地址: https://wwi.lanzoup.com/iW3FT1pj2mpa
(没刷过这个链接的)immortalwrt官网连接: Index of /releases/23.05.0/targets/mediatek/filogic/ (immortalwrt.org)
2.1、下载uboot
下载后,把uboot上传到路由器的/tmp/uboot目录下,ssh进去后,执行cd /tmp/uboot该目录,对三个文件分别输入输入md5sum xxx.bin确保文件的md5一致,以免刷入损坏的文件,如果md5不一致,请停止操作,重新下载
代码:md5sum mt7981-cmcc_rax3000m-emmc-gpt.bin
md5sum mt7981-cmcc_rax3000m-emmc-bl2.bin
md5sum mt7981-cmcc_rax3000m-emmc-fip.bin
对比你的md5结果是否和以下结果相同
下载的文件时间与版本不一样,MD5不一样的
2.2 刷入uboot
请注意,下面命令是刷入的emmc版本的uboot,nand版本请不要乱刷!此步刷错必成砖!
dd if=mt7981-cmcc_rax3000m-emmc-gpt.bin of=/dev/mmcblk0 bs=512 seek=0 count=34 conv=fsync
echo 0 > /sys/block/mmcblk0boot0/force_ro
dd if=/dev/zero of=/dev/mmcblk0boot0 bs=512 count=8192 conv=fsync
dd if=mt7981-cmcc_rax3000m-emmc-bl2.bin of=/dev/mmcblk0boot0 bs=512 conv=fsync
dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=13312 count=8192 conv=fsync
dd if=mt7981-cmcc_rax3000m-emmc-fip.bin of=/dev/mmcblk0 bs=512 seek=13312 conv=fsync
查看分区情况:parted /dev/mmcblk0 print
如果没有parted命令,则先安装:opkg update
opkg install parted
分区前,可以看到rootfs大小是64M,而且有2个rootfs,这个空间决定了你刷机包上限的大小
分区后,就只有一个rootfs了,大小变成了629M
2.2、进入uboot
断开电源,按住reset不要松开,插上电源,等待红灯亮起后,再松开复位键
路由器的LAN口连接电脑
电脑修改IP地址为192.168.1.2, 默认网关192.168.1.1
浏览器打开192.168.1.1
解释 dd if=mt7981-cmcc_rax3000m-emmc-gpt.bin of=/dev/mmcblk0 bs=512 seek=0 count=34 conv=fsync
该命令执行了使用dd这一Unix和类Unix操作系统中的常用命令,进行磁盘写入操作。下面将一一解释命令中的每个组件:
dd:这是一个用于转换和复制文件的程序,通常被用于处理磁盘镜像文件或创建备份。
if=mt7981-cmcc_rax3000m-emmc-gpt.bin:if代表输入文件(input file),这里指定了要被复制到目的设备上的源文件mt7981-cmcc_rax3000m-emmc-gpt.bin。
of=/dev/mmcblk0:of代表输出文件(output file),指定了目的地设备。/dev/mmcblk0通常表示Linux环境下的第一个MMC设备(比如一个内嵌的eMMC存储)。
bs=512:bs代表块大小(blocksize),指定了读取和写入时每个块的大小,这里设置为512字节。每次读取和写入操作处理的数据量是512字节。
seek=0:这一参数指定了在开始写入前应该跳过目的文件(of指定的设备)开始的多少个bs大小的块。seek=0表示不跳过,直接从开头开始写入。
count=34:这一参数指定了要复制的块数量。结合上面的bs参数,这意味着此命令将写入34 * 512 = 17408字节的数据。
conv=fsync:conv代表转换,fsync意味着写入每个块后,dd命令会使用fsync()系统调用,确保将缓存中的数据立刻刷写到磁盘中。
总结起来,这个dd命令的作用是将名为mt7981-cmcc_rax3000m-emmc-gpt.bin的文件的前17408字节拷贝到设备/dev/mmcblk0,这通常是为了写入一个特定的磁盘镜像或是引导记录等重要数据到一个存储设备上。
echo 0 > /sys/block/mmcblk0boot0/force_ro
这条命令在Linux系统中用来修改内核系统参数或者某些设备的设置。具体来说,此命令的各部分含义如下:
echo:是一个常用的shell命令,用于在屏幕上显示一段文字,或者将文字写入到文件中。
0:这是echo命令输出的内容。在这个上下文中,数字0通常被用来表示禁用或关闭一个选项。
>:这是重定向操作符。它会将左侧命令的输出(在这个例子中是echo命令的输出)重定向到右侧指定的文件或设备。
/sys/block/mmcblk0boot0/force_ro:这是一个路径,指向sysfs(一种虚拟文件系统)中的一个文件。在Linux中,sysfs用于导出内核对象的信息,允许运行中的系统通过用户空间的变化影响内核。mmcblk0boot0指的是一个特定的eMMC存储设备的引导分区,而force_ro文件允许用户将该分区设置为只读(ro)或可读写模式。
所以,当执行echo 0 > /sys/block/mmcblk0boot0/force_ro命令时,它实际上是在将数字0写入到force_ro文件。这个操作会告诉系统不要强制将mmcblk0boot0这个eMMC引导分区设为只读模式,这允许在需要的时候对其进行修改。这种修改可能是为了更新引导加载程序或者对引导分区进行其他形式的写入操作。
dd if=/dev/zero of=/dev/mmcblk0boot0 bs=512 count=8192 conv=fsync
这条 dd 命令用于将数据写入Linux系统中的存储设备,命令各部分具体解释如下:
dd 是“data duplicator”的缩写,是一个非常强大的Unix命令行工具,用于转换和复制文件或设备内容。
if=/dev/zero 中的 if 代表输入文件(input file)。/dev/zero 是一个特殊的文件,它会不断提供无限的零(0x00)值。相当于输入源是「无限的0」。
of=/dev/mmcblk0boot0 中的 of 指输出文件(output file),在这里表示要写入的目标设备。/dev/mmcblk0boot0 可能是系统中某个eMMC存储设备的引导分区。
bs=512 中的 bs 表示块大小(block size),单位是字节。每次读取和写入操作会处理512字节的数据。
count=8192 这部分指明了要复制的块的数量,与bs结合,意味着命令会写入 8192 * 512 = 4194304 字节,即4MB的数据。
conv=fsync 指的是在写入每个块后,强制直接将内存中的缓冲数据同步到硬盘上,确保所有数据正确的被写入到设备中。
整个命令的作用是,向/dev/mmcblk0boot0这个eMMC存储设备的引导分区写入4MB的全零数据,这通常会将该存储区域清除。这种操作常用于清理分区的内容,以便重新格式化或重新使用存储区域。
3、刷入Openwrt固件
3.1、重启路由器
刷入openwrt的官方uboot后,只需要断开电源,按住reset再插上电源重启即可,路由器会等待tftp服务器上传固件。
选择固件,上传固件,上传完成
重启路由器
3.2、设置电脑IP地址
设置静态地址 192.168.1.X
网关和DNS填入192.168.1.1
此时电脑网线连接路由器的LAN口,打开powershell输入ping 192.168.1.1 应当有回应,否则表明你路由器没有成功连接电脑或者路由器没有进入uboot模式
进入路由器后台:192.168.6.1(固件版本不一样,地址不一样)
输入密码进入后台
二、无线中续
1、无线设置
因为我的上游路由是以2.5GHZ为主,所以我以2.5Ghz设置
点击添加一个
如图设置,信道与带宽设置最大
无线设置(也就是中续之后的无线),可选加密(我这就不加密了)
其他设置默认
接着,我们连接主路由,点击扫描
会扫描附近能加入的WiFi
点击加入网络,会让你输入该网络的密码,输完密码提交
接着,切换到接口界面
发现多了一个 WWAN的接口,并且有能获取到ID地址,说明:该Openwrt系统已经能获取到主路由的ID地址,现在访问网络,已经能上网了。
- Openwrt系统配置Openclash
- 打开Openclash
- 插件设置
2.1模式设置
2.2、流量控制
2.3、DNS设置
2.4、GEO数据库订阅(实时更新数据库),其他默认
- 覆写设置
3.1、Meta设置,其他默认
- 配置订阅
4.1、添加订阅,添加飞机场的地址,设置在线转换,保存设置
- 启动Openclash
- 测试网络
网络基本满足管管4K视频观看
twitch也能流畅观看
- 后话
在此,先郑重地感谢群友 @学了拉丁,丁丁也没变长,慷慨赠我路由一台,也感谢他在我对刷入硬路由系统时,所给予的耐心讲解与无私分享。网络的世界纷繁嘈杂,而群中这份善意与热情,却温暖得格外真实。
其实早在某个寂静的夜晚,就曾动过念头——想搞一台路由器,折腾些自己感兴趣的东西。但当现实把价格标在屏幕上,本就拮据的预算像是一只被困的麻雀,无处可飞,于是这份冲动也就暂时封存。
直到某天,与同事微醺之后,聊着聊着便走进了我们的精神庇护所——图拉丁Club茶馆。酒精催化下的念头在脑海里跳跃,我随口说了句“想做一个 WiFi 转以太网输出的小项目”。没想到这念头被听见、被回应——群友说他正好有一台闲置的路由器,可以送我折腾。那一刻,我仿佛看到一束光透进了理想的旮旯里。第二天我便毫不犹豫地发了地址,不久后他真的发来了快递,而我,也终于在今天,把那个酒后的念头落到了现实的土地上。
很多时候,念头就像夜空里突然掠过的流星,倘若不及时伸手,便会一闪而逝。
一个念头,若没有被行动拥抱,便只是虚无的梦话。
而当我们动手去尝试,哪怕只是微小的一步,都会让技术变得具体,让学习有了方向,也让我们站得更稳,走得更远。
技术从来不是高冷的符号,而是镌刻在我们日常生活里的温度和力量。
掌握它,我们便有了在混沌世界里谈话的底气;
折腾它,我们便在一次次尝试中发现自己的边界与可能。
世界很大,但所有探索的起点,都始于一个微小却炽热的想法。
愿我们都能守住这份不安于现状的倔强,在日复一日的生活里,依然保持对世界的好奇。
于是我想说——
生命不息,折腾不止;
折腾,是我与世界对话的方式;
是技术落地前,梦想的影子;
是精神不死,热爱不灭的回声。
生命不息,折腾不止!
生命不息,折腾不止!
生命不息,折腾不止!
生命不息,折腾不止!
致敬所有的垃圾佬!