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

软路由是什么

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

务必下载 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. 使修改生效
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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 仓库地址:
https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk

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

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

mentoHUST 安装

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

mentoHUST 使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
欢迎使用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 参数将账号密码等保存至配置文件才可以省略参数。
J1900_004.jpg

通过 ssh 连接至 J1900 路由器

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

至此,完结撒花