因为要进入新的学校了,所以我打算买个路由器,但是听说学校限制有线连接的设备,我很好奇,因为路由器下其实是大内网,正常来说上层路由是访问不到下层路由的设备的,但是我在网上搜索的时候,发现了它确实不是看下层路由的设备,而是通过检测UA来识别多设备的,于是就有了这篇折腾笔记

目标

  • 完成路由器的PPPoE拨号
  • 突破学校的设备限制

免责声明

  1. 在根据本教程进行实际操作时,如因您操作失误导致出现的一切意外,包括但不限于路由器变砖、故障、数据丢失等情况,概不负责;
  2. 该技术仅供学习交流,请勿将此技术应用于任何商业行为,所产生的法律责任由您自行承担;
  3. 部分学校明令禁止使用路由器上网,相关文件前往学校官方网站相关页面查看。本教程仅用于交流使用,安装路由器的行为完全是您个人意志所决定的,如您已成功安装,请在 24 小时内重置路由器至原出产状态;
  4. 请按照学校推荐的方式连接到互联网,如因个人问题受到相关校规追责,由您自行承担。

安装系统

因为我买的没有带SD卡(我有为啥要买.jpg),所以系统得自己装

前往Openwrt的官网,发现在国内有镜像,直接从镜像站里面下载

因为这个产品的芯片为Rockchip,所以可以很容易地找到openwrt固件

Openwrt固件(Rockchip):https://mirror.sjtu.edu.cn/openwrt/releases/23.05.4/targets/rockchip/armv8/

下载好了以后,熟练地掏出我们的老朋友balenaEtcher,写入系统到SD卡里面就行了(Rufus也可以)

汉化

点击顶上的System,再点Software,如果是刚装的系统建议再点一下Update lists按钮

在搜索框里,我们输入luci-i18n-base-zh-cn,然后在下面找到这个包点击安装(我这里是已经装好了还改了主题,仅做示意)

装好了以后刷新就应该是中文了,如果不是的话,点击顶上的System,再点System,在Language and Style手动调成中文即可

更换主题

我使用的是Argon主题,因为这个Design System我以前用过,也挺好看的

主题仓库:https://github.com/jerrykuku/luci-theme-argon

直接用SSH运行仓库给我们的命令即可,但是要小改一下输出的路径,要不然会报找不到文件

1
2
3
4
5
6
$ opkg install luci-compat
$ opkg install luci-lib-ipkg
$ wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.3.1/luci-theme-argon_2.3.1_all.ipk -O luci-theme-argon_2.3.1_all.ipk
$ wget --no-check-certificate https://github.com/jerrykuku/luci-app-argon-config/releases/download/v0.9/luci-app-argon-config_0.9_all.ipk -O luci-app-argon-config_0.9_all.ipk
$ opkg install luci-theme-argon*.ipk
$ opkg install luci-app-argon-config*.ipk

装好了以后刷新就会变成新主题了

扩容

我是一张64G的SD卡,但是装好系统只显示有大约100MB,这远不及我们的SD卡原来的大小,我们要对SD卡进行扩容处理

显示约100MB的容量

第一次尝试扩容(懒人终被制裁 =-=)

Openwrt默认是开启了SSH了(没开的话在系统 => 管理权 => SSH 访问自己开一下),我们可以直接SSH链接

连接后,我们先安装一下fdisk,查看一下现在的分区(如果提示找不到fdiskopkg update一下)

1
2
$ opkg install fdisk
$ fdisk -l

很明显我64G的卡没有得到充分利用,所以我们接下来要把剩下的空间给利用起来,我把卡拔了下来,然后连上了Windows(这是最简单也是最快的方法)

连上电脑后,发现有两个分区,而我们的文件就在rootfs这个分区里面

直接把它后面的空间分配进去,完活——才怪

事实证明,偷懒是不好的……我们还是试试在Linux里面调吧

我打开了我的Ubuntu虚拟机,然后把卡连上去,用parted看看我们的盘在哪里

这里看到我的盘是/dev/sdb,然后我尝试使用cfdisk来完成这个操作(不为什么,就因为可视化),但是……

我还找了半天,这个/dev/sda是哪里来的,结果我忘了我的读卡器是双卡读卡器……

好吧,你彻底打败了我——你以为我会这么说嘛?Ubuntu里面自带了一个Disk应用可以用来调整硬盘,然后我就直接打开了那个玩意

直接选中我们的rootfs分区,选择Resize进行扩容,直接拉满!虽然弹了个错误,但是还是成功拉满了

然后再把卡丢回设备里开机,然而还是只有那么点空间,输入parted -l,显示有63.8GB,非常奇怪

可能是挂载有问题,我又尝试重新挂载,但是openwrt的web自身是没有挂载点的相关设置的,所以我们要装一下

1
2
3
$ opkg update
$ opkg install block-mount
$ reboot

重启后在系统选项卡里有挂载点,直接点进来,对我们的分区进行设置

启用,并作为根系统/使用,下面还贴心地跟我们列出了命令,我们登录SSH给它运行一次,最后回到网页端,点击保存并应用,然后重启系统,结果还是不行

于是我又接到了Ubuntu上,打算重新新建分区(盘为/dev/sdb

我们先进入parted模式

1
$ parted /dev/sdb

然后打印一下我们的分区

1
(parted) print

我选择先删除分区2,然后重建

注:删除分区(例如使用 partedrm 命令)确实会删除分区表中的条目,但它不会立即删除分区内的数据。删除分区的操作只会影响分区表,而不会直接对磁盘上的数据进行物理删除

1
2
3
(parted) rm 2
(parted) mkpart primary ext4 67.1MB 100% # 67.1MB来自于上面print的结果里面的起始位置
(parted) quit

重建了以后,我们要调整分区来保证所有的Block都被用上

1
2
$ e2fsck -f /dev/sdb2	# 先检查磁盘没有问题
$ resize2fs /dev/sdb2 # 重新调整大小

然后再插上卡,开机!诶?怎么开不起来???好吧,这次以失败告终……

第二次尝试扩容

因为第一次扩容的时候,系统被我搞炸了,所以我又重新刷了一次系统;偷懒偷出了问题,所以这次我决定走正规途径,在openwrt路由器里面扩容

我们还是先安装fdisk看看我们的硬盘情况,运行fdisk -l,确认我们的设备名为/dev/mmcblk0

然后我们运行cfdisk开始分区操作(没有的话要装一下)

这里可以很清晰地看到后面还有一块FREE SPACE,我们新建分区,用上下键选到那里,然后下面选择NEW,然后大小自动(自动就是分配所有空间),然后分区类型选择Primary,一路回车就行

然后我们要选择下面的Write把分区表写入,记得回复yes,然后再Quit

我们再运行fdisk -l,可以看到多了个分区

我们直接格式化这个分区,然后重启

1
$ mkfs.ext4 /dev/mmcblk0p3

回到我们的网页端,进行挂载点的挂载(如果没有挂载点的话要先安装opkg install block-mount

如果这个列表没有刚刚我们新建的分区的话(像我这样),需要手动添加

我们还需要先运行下面的命令(在SSH里面运行),注意第四行的/dev/sda1需要换成自己的实际分区,我这里应该换成/dev/mmcblk0p3

1
2
3
4
5
6
7
$ mkdir -p /tmp/introot
$ mkdir -p /tmp/extroot
$ mount --bind / /tmp/introot
$ mount /dev/mmcblk0p3 /tmp/extroot # 这里要改成自己新建的分区
$ tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
$ umount /tmp/introot
$ umount /tmp/extroot

运行后再到网页选择“保存并应用”,然后重启路由器,这下是真的成功了

编译并安装Dr.com插件

实测不需要安装插件,直接设置PPPoE拨号即可

因为我用的路由器没有那么大众,本质是一块开发板,所以我没找到适合我这个路由器的该插件,这就造成了我们需要自己编译,我还是用Ubuntu虚拟机来干

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
# 更新包列表
sudo apt-get update

# 安装ncurses
sudo apt-get install libncurses5-dev libncursesw5-dev -y

# 安装awk,执行过程中有任何提示
sudo apt-get install gawk -y

# 安装git,执行过程中有任何提示
sudo apt-get install git -y

# 切换工作目录
cd ~
mkdir dr.com
cd dr.com

# 在线下载相应的openwrt-sdk
wget https://mirror.sjtu.edu.cn/openwrt/releases/23.05.4/targets/rockchip/armv8/openwrt-sdk-23.05.4-rockchip-armv8_gcc-12.3.0_musl.Linux-x86_64.tar.xz

# 解压我们刚刚下载的openwrt-sdk
tar xvJf openwrt-sdk-23.05.4-rockchip-armv8_gcc-12.3.0_musl.Linux-x86_64.tar.xz

# 进入该sdk文件夹
cd openwrt-sdk-23.05.4-rockchip-armv8_gcc-12.3.0_musl.Linux-x86_64

# 然后再进入package文件夹,并克隆dr.com ODP
cd package && git clone https://github.com/GJXS1980/ODP.git

# 返回上层目录,也就是为了回到openwrt-sdk这个目录
cd ..

# 开始编译
make package/ODP/compile

刚开始编译的时候,会有这样的一个窗口允许我们配置,直接点击Exit,然后再点Yes就可以了(或者如果你有别的配置也可以进行)

编译要一段时间,可以坐下来喝杯茶刷会手机,最后生成的文件在./bin/packages/aarch64_generic/base/gdut-drcom_6.0-4_aarch64_generic.ipk

注:根据路由器芯片架构的不同,文件名很可能不同

安装直接在软件包页面上传就可以了

编译并安装xmurp-ua插件

实测此方法不好用,不如看下面的UA3F

把上面的脚本改一下就行了

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
# 更新包列表
sudo apt-get update

# 安装各种依赖
sudo apt-get install install git-core build-essential libssl-dev libncurses5-dev unzip gawk subversion mercurial ccache tar ssh -y

# 安装awk,执行过程中有任何提示
sudo apt-get install gawk -y

# 安装git,执行过程中有任何提示
sudo apt-get install git -y

# 切换工作目录
cd ~
mkdir xmurp-ua
cd xmurp-ua

# 在线下载相应的openwrt-sdk
wget https://mirror.sjtu.edu.cn/openwrt/releases/23.05.4/targets/rockchip/armv8/openwrt-sdk-23.05.4-rockchip-armv8_gcc-12.3.0_musl.Linux-x86_64.tar.xz

# 解压我们刚刚下载的openwrt-sdk
tar xvJf openwrt-sdk-23.05.4-rockchip-armv8_gcc-12.3.0_musl.Linux-x86_64.tar.xz

# 进入该sdk文件夹
cd openwrt-sdk-23.05.4-rockchip-armv8_gcc-12.3.0_musl.Linux-x86_64

# 然后再进入package文件夹,并克隆xmurp-ua
cd package && git clone https://github.com/CHN-beta/xmurp-ua.git xmurp-ua

# 返回上层目录
cd ..

# 开始编译
make package/xmurp-ua/compile V=sc

刚开始编译的时候,会有这样的一个窗口允许我们配置,直接点击Exit,然后再点Yes就可以了(或者如果你有别的配置也可以进行)

编译要一段时间,可以坐下来喝杯茶刷会手机,最后生成的文件在./bin/targets/rockchip/armv8/packages/kmod-xmurp-ua_5.15.162-34_aarch64_generic.ipk

注:根据路由器芯片架构的不同,文件名很可能不同

安装直接在软件包页面上传就可以了

突破限制

Dr.com插件信息该填的填就完事了

然而更改UA,我们还需要进行进一步的操作

我们先要安装一个插件

1
$ opkg install zram-swap

安装完这个插件以后,重启路由器,就完成了

安装UA3F插件

UA3F项目地址:https://github.com/SunBK201/UA3F

UA3F需要搭配OpenClash使用,如果没装OpenClash可以看看附加题

我们直接到UA3F的项目地址下载RELEASE(没有的自己编译吧),下载后通过SSH传输到Openwrt上后使用opkg安装

1
$ opkg install ua3f*.ipk

安装好后刷新,可以在Luci的服务选项卡里面找到UA3F

安装后我们在这个页面里面按照自己的需求进行配置后,保存并应用

然后来到OpenClash,选择配置管理,然后把下面的内容保存到一个yaml文件后上传上去(不要照抄,根据自己的UA3F配置改)

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
#--------------------------------------------------------------------------------------#
# Written by SunBK201
# https://github.com/SunBK201/UA3F
#--------------------------------------------------------------------------------------#
mixed-port: 7890
#--------------------------------------------------------------------------------------#
ipv6: false
mode: rule
#--------------------------------------------------------------------------------------#
dns:
#--------------------------------------------------------------------------------------#
proxies:
- name: "ua3f"
type: socks5
# 不管你选了0.0.0.0还是127.0.0.1,这里都不要改
server: 127.0.0.1
# 更改为自己的端口
port: 1080
url: http://connectivitycheck.platform.hicloud.com/generate_204
udp: true
#--------------------------------------------------------------------------------------#
proxy-providers:
#--------------------------------------------------------------------------------------#
proxy-groups:
#--------------------------------------------------------------------------------------#
rules:
- PROCESS-NAME,ua3f,DIRECT
- NETWORK,udp,DIRECT
- MATCH,ua3f
#--------------------------------------------------------------------------------------#
rule-providers:
#--------------------------------------------------------------------------------------#
parsers:
#------------

然后我们回到OpenClash的插件设置,按照我这么选(使用Redir-Host模式而不是Fake-IP模式)

回到OpenClash的仪表盘,切换到我们的UA3F配置文件后启动OpenClash

开启后,我们访问ua2.233996.xyz,查看我们的UA,如果是像我这样,上面是自己刚刚设置的UA,下面是自己的浏览器UA的话,就说明成功了

附加题:Clash

我们要用的是OpenClash,是一个专门装在openwrt上面的软件包

OpenClash:https://github.com/vernesong/OpenClash

安装好后第一次打开,会提示我们没有装内核,我非常不建议在这里直接装,直接装的话装半天装不上,倒不如直接我们自己手动安装

我们来到内核的下载地址,选择适合我们自己的版本下载,我使用的是Meta内核,下的是arm64版本

内核下载地址:https://github.com/vernesong/OpenClash/tree/core/

TUN内核下载地址:https://github.com/vernesong/OpenClash/releases/tag/TUN-Premium

把我们下载的内核丢到/etc/openclash/core文件夹里面就行了,如果是meta版就命名为clash_meta,普通clash为clash

然后我们在配置订阅页面,添加一个我们自己的订阅

保存后更新订阅,回到主界面,看到我们的机场写着启用了以后,我们点下方的启动OpenClash

如果你的配置没有问题,过一会就会显示启动成功了

启动成功以后,就可以实现无感上网了(我下面这个图已经把SwitchyOmega关掉了)

OpenClash也给我们提供了三种控制面板来修改自己的节点,我们可以选择任意一个进行修改,选择一个适合自己的就可以了