记一次折腾J1900软路由的过程

3,548 阅读11分钟

第一次整软路由,笔者正处于大创报账时期,虽然不知道能不能报上去,反正挑了个合适价位的J1900的软路由买回来一阵折腾。由于怀着着折腾的心思,买的是裸主机,这意味着内存和硬盘都没有自带,同时openwrt系统就更不用说了,肯定得自己装上去。在收货当天笔者就开始了各项工作,结果还是花了好几天踩坑才将一切搞定,故记下这次极其耗神的工作。

软路由是什么

按笔者目前理解,软路由就是一台至少带了多个网口的过时主机,CPU、内存、硬盘等基本一应俱全。笔者手里这台就是J1900CPU、四网口的一台软路由,双十二期间价钱720+就拿下来了。 拥有复数个网口后,只要在主机上装一个openwrt系统,再给网口分配LAN口和WAN口,这台主机就是软路由了。换言之,只要有两个网口,任何电脑都可以改成软路由,只是功耗等不尽相同罢了。 与软路由相对的就是——硬路由,也就是一般我们称呼的路由器,软路由一般应用在有线网中,至于无线网则会靠额外连接一个无线AP来实现,而硬路由则集成这两项功能且更简单易用,当然价钱多少会高上一点。 QQ图片20211224170412.jpg

J1900路由器介绍

先来张内部结构图: Inked20220325164917_LI.jpg 图中的已经装好了内存条,可以看到硬盘上圈出来的分别是网卡接口(WIFI),msata硬盘接口(MSATA)和SATA硬盘接口,网卡口和msata接口一摸一样以至于笔者搞混了很多次,咨询了客服后才发现主板上的白字。。

按这篇博客的说法,网卡模块可以直接无视,只建议直接再买一个无线AP而不是无线网卡,毕竟有四个网口。

...我选的这款用的是Intel J1900四核处理器,性能相当可以的,有4个Intel I211千兆网口、...而且预留了天线接口,不过买之前卖家就提醒了,这货由于四个千兆网卡占用了cpu所有的pci-e通道,所以如果要装无线网卡虚拟AP的话,只能用USB定义的无线...

(这里吐槽一下在学校买的二手ddr3内存条和msata盘全都不能用,这张主板只支持ddr3L(低压版)内存,硬盘也是坏的,后续又花了100+上某宝收了4G ddr3L内存和32G msata盘装上) IMG_20220223_195803.jpg

安装openwrt系统

openwrt下载

openwrt官网下载 archive.openwrt.org/releases/19…

务必下载19.07.2版openwrt系统,在后面系统扩容时笔者拿着21版本的系统试了又试,重装了一遍又一遍,步骤和那些博客上的一摸一样就是开不了机,然后笔者在一篇文章截图中发现了他用的是19.07.2版本的系统,换成这个系统后一次就成功了。。笔者不是很清楚openwrt系统迭代过程中发生了啥,总之下这个版本肯定没有问题就是了。

openwrt系统刻录

网上多数说法是下载一个PE,然后进入PE用physdiskwrite写入硬盘,精简版如下:

(1) 下载 PE 工具盘制作工具,制作一个 PE 工具 U 盘

(2) 将 physdiskwrite 和软路由镜像固件拷贝到制作好的 PE 工具 U 盘插到电脑上识别出的盘符根目录下

(3) 将 PE 工具盘插入 J1900 小主机,通过 U 盘启动 PE 系统

(4) 打开 cmd 命令行工具

(5) 键入“U:” 后按回车键

(6) 再输入“physdiskwrite -u 下载好的软路由镜像.img” 后回车

(7) 根据提示选择安装软路由系统的硬盘盘符(一般是 0,输入 0 回车即可,但具体还得看自己的实际盘符情况)

(8) 再根据提示键入 y,等待一段时间完成刻录,关机拔 U 盘,在开机从硬盘启动即可进入软路由系统

这件事的思路是很清晰的,即:

1.msata口硬盘没有专门的转接卡插不进现在一般的笔记本电脑,所以很难通过外界来给硬盘写数据。

2.从U盘进入PE系统,硬盘插在路由器主板上能够被读取,这时候就能用physdiskwrite给硬盘写入数据。

所以重点就是给一块硬盘写入数据。这件事本身并不复杂,只是笔者下了四五个PE后才终于正常启动其中一个PE,在折腾期间不得不思考其他方法,最终笔者是在Linux虚拟机下用dd命令将openwrt系统成功写入硬盘。 总结一下做法:

1.买张转接卡将msata盘接到电脑上,Windows环境用physdiskwrite写入系统,Linux环境用dd写入系统。

2.下载一个PE,在路由器上进入PE用physdiskwrite写入系统。

同时笔者在用physdiskwrite时发现假如不用Disk Genius将硬盘数据清零,再次写入系统时会断在某个地方导致启动不了(还不报错!),所以每次重装系统前都建议各位将硬盘的0~3000000位数据归零

openwrt系统扩容

这一步如此重要,但我不知道为什么没有一篇博客在安装过程中提到。 openwrt系统装好并启动后,实际可用容量大概只有几个插件大小(几M来着),笔者在装好中文插件和mentoHUST插件后就发现可用容量没有了。 在系统上边栏进入 /系统/SoftWare 即可看见自己当前系统插件可用容量。 QQ截图20220325183452.jpg 所以系统扩容势在必行,无论是笔者之前使用的500G机械硬盘还是现在使用的32G固态硬盘,怎么样也经不住这种浪费。 重要的话说三遍:

openwrt一定要是19.07.2版本! openwrt一定要是19.07.2版本!! openwrt一定要是19.07.2版本!!!

其实也未必,笔者没有试过19的其他版本,但是21版本肯定不行,在扩容过程的某一步中21版本的系统分区是Microsoft xxx类型的,而19版本的文件系统则是Linux类型的。笔者无意寻找失败原因,总之假如按本博客所说一步步进行仍然不行的话,只建议系统换个版本。

扩容第一步

先装好系统并成功启动一次,否则系统不会自己分区。以下所有操作均在Linux环境下进行,笔者是使用Virtual Box安装Ubuntu系统,通过转接卡将msata盘连接至电脑,并挂载到虚拟机上(Virtual Box读取USB3.0还需要安装额外工具包,还好这一步笔者装好就成功了,没有踩坑)。

扩容后续

  1. df -h 确定硬盘盘符
  2. umount 硬盘设备
  3. 用fdisk命令开始重新分区,这里一定要记住硬盘分区的起点(我的是57344,等会要用到)。
  4. 重新新建分区2
  5. 保存分区修改
  6. 使修改生效
lixinxing@li:~$ sudo fdisk /dev/sdc

欢迎使用 fdisk (util-linux 2.31.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助): p
Disk /dev/sdc:14.9 GiB,15931539456 字节,31116288 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x5452574f

设备       启动  起点     末尾     扇区  大小 Id 类型
/dev/sdc1  *     8192    49151    40960   20M  c W95 FAT32 (LBA)
/dev/sdc2       57344 31116287 31058944 14.8G 83 Linux

命令(输入 m 获取帮助): d
分区号 (1,2, 默认  2): 2

分区 2 已删除。

命令(输入 m 获取帮助): n
分区类型
   p   主分区 (1个主分区,0个扩展分区,3空闲)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p): p
分区号 (2-4, 默认  2): 2
第一个扇区 (2048-31116287, 默认 2048): 57344
上个扇区,+sectors 或 +size{K,M,G,T,P} (57344-31116287, 默认 31116287): 

创建了一个新分区 2,类型为“Linux”,大小为 14.8 GiB。
分区 #2 包含一个 ext4 签名。

您想移除该签名吗? 是[Y]/否[N]: n

命令(输入 m 获取帮助): w

分区表已调整。
正在同步磁盘。

lixinxing@li:~$ sudo resize2fs /dev/sdc2
resize2fs 1.44.1 (24-Mar-2018)
/dev/sdc2 上的文件系统已被挂载于 /media/lixinxing/57f8f4bc-abf4-655f-bf67-946fc0f9f25b;需要进行在线调整大小
old_desc_blocks = 1, new_desc_blocks = 1
resize2fs: 无效的参数 检查是否支持在线调整文件系统大小时
lixinxing@li:~$ umount /dev/sdc2
lixinxing@li:~$ sudo resize2fs /dev/sdc2
resize2fs 1.44.1 (24-Mar-2018)
请先运行“e2fsck -f /dev/sdc2”。

lixinxing@li:~$ sudo e2fsck /dev/sdc2
e2fsck 1.44.1 (24-Mar-2018)
最后一个组的块位图未初始化。  处理? 是
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
块位图的差异:  +(65536--66049)
处理? 是

/dev/sdc2:***** 文件系统已修改 *****
/dev/sdc2:1417/24576 文件(0.0% 为非连续的), 7480/98304 块
lixinxing@li:~$ sudo resize2fs /dev/sdc2
resize2fs 1.44.1 (24-Mar-2018)
将 /dev/sdc2 上的文件系统调整为 3882368 个块(每块 4k)。
/dev/sdc2 上的文件系统现在为 3882368 个块(每块 4k)。

现在openwrt系统已经安装并扩容完毕了,下面开始介绍最最耗时间的mentoHUST插件。

在插件安装之前,笔者需要连上192.168.0.1视察一下刚刚装好的全新系统,结果笔者发现,连不上!!!为什么呢,问了一下客服,原来是网线插错网口了。笔者插反了,按一般逻辑当然是WAN口占eth0,然后eth1、2、3都是LAN口,结果整了这一出。。也许是市面上基本都是两口软路由居多的缘故? image.png 千辛万苦后,笔者终于能够打开心心念念的路由器web界面了。 QQ截图20220325192113.jpg

mentoHUST插件编译及其安装

装好系统后就需要安装上网插件了,笔者身为华某科的大学生,使用由华科前辈开发的mentoHUST合情合理。 华某科的校园网限制两台设备上网,大一更是逆天的限制一台设备上网,在笔者大三上期末时不知怎么回事突然支持了三台设备上网,结果寒假一结束就改回去了,不是很懂校方的小心思。 使用路由器登陆上网理论上可以使无上限数量限制的设备同时上网,只要路由器上登陆了帐号,其余设备通过路由器上网即可,再加装一个无线WIFI,嘿嘿嘿嘿。。。

mentoHUST插件编译

这一过程是笔者写这篇博客的主要原因,无他,编译这个ipk包让笔者电脑当时跑了一晚上,在狭小黑暗的宿舍里,一台超辣鸡的笔记本电脑的风扇呼呼运行,笔者当时在床上带着一个降噪耳机才勉强睡着,心里还时刻担心着舍友会不会突然暴起把笔者电脑扔了。这种经历,笔者不想再有第二次了。。。 究其原因就是笔者完全没有找到交叉编译好的ipk包所以不得不用自己电脑跑了一遍,但实际上笔者在编译过程中根本没有看到任何和openwrt系统版本有关的选项,换言之,这个ipk包理论上可以装在任何一个openwrt系统上才是。

这是mentoHUST ipk包的github仓库地址: github.com/KyleRicardo…

作者说受到一个人的启发终终终终于发布了ipk包,泪目

编译过程和github仓库的README文件以及上方给的博客一模一样,没有任何需要更改的地方,笔者就不复制粘贴了,只有一点需要注意的是,博客中选择编译选项时是 /Network/Ruijie/mentoHUST,但笔者实际操作过程中发现Ruijie并不在Network下,不过在哪现在也忘了,总之找不到也不要慌,每个都点进去找找看总是能找到的。 image.pngimage.pngimage.png

mentoHUST安装

稀松平常,没有坑。 同样进入192.168.0.1路由器管理界面,从上边栏进入 /系统/Software,点击Upload Package,选中两个ipk文件上传就安装上了。 QQ截图20220325203508.jpg

mentoHUST使用

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
欢迎使用MentoHUST 版本: 0.3.3
Copyright (C) 2009 HustMoon Studio
人到华中大,有甜亦有辣。明德厚学地,求是创新家。
Bug report to 
http://code.google.com/p/mentohust/issues/list

用法: mentohust [-选项][参数]
选项: -h 显示本帮助信息
-k 退出程序
-w 保存参数到配置文件
-u 用户名
-p 密码
-n 网卡名
-i IP[默认本机IP]
-m 子网掩码[默认本机掩码]
-g 网关[默认0.0.0.0]
-s DNS[默认0.0.0.0]
-o Ping主机[默认0.0.0.0,表示关闭该功能]
-t 认证超时(秒)[默认8]
-e 响应间隔(秒)[默认30]
-r 失败等待(秒)[默认15]
-a 组播地址: 0(标准) 1(锐捷) 2(赛尔) [默认0]
-d DHCP方式: 0(不使用) 1(二次认证) 2(认证后) 3(认证前) [默认0]
-b 是否后台运行: 0(否) 1(是,关闭输出) 2(是,保留输出) 3(是,输出到文件) [默认0]
-y 是否显示通知: 0(否) 1~20(是)[默认5]
-f 自定义数据文件[默认不使用]
-c DHCP脚本[默认dhclient]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

华某科可使用:

mentohust -uusername -ppassword -neth0 -d2 -b2 -w

无需指定ip、dns等,不如说校园网禁止指定ip,虽然每次分配的是一样的。同时需加上 -d2参数,在认证后开启DHCP,否则也不让连,即使不参考笔者的博客,这些报错信息最终连接一遍都会出现,非常好懂,也很好解决。

然后在路由器管理界面,进入 /系统/启动项,点击 本地启动脚本,在脚本中输入一句mentohust即可。注意,须先用-w参数将账号密码等保存至配置文件才可以省略参数。 QQ截图20220325205605.jpg

通过ssh连接至J1900路由器

进入192.168.0.1路由器管理界面,从上边栏进入 /系统/Software,点击SSH访问。 QQ截图20220325203959.jpg 最后点击保存并应用。 这一步主要是处理mentoHUST在路由器上运行命令行时显示中文乱码,cmd下中文则会正常显示,当然一般大家买路由器也是没有屏幕的(笔者使用的是之前树莓派遗留下来的屏幕),所以也需要配置ssh以访问路由器进行一些操作。

至此,完结撒花