无需硬件!手把手教你在VMware上安装软路由,实现校园网多设备共享上网!

写这一篇文章是为了防止学校的校园网以后使用别的防检测手段,到时怕忘了如何编译OpenWrt

‍本文绝大部分参考以下两位up主的视频,在这里万分感谢!!!

【正片】面对校园网的多设备检测,「我」的解决方案是——

校园网防检测!软路由固件编译教程

1.搭建本地编译环境

1.1 下载Ubuntu镜像,推荐Ubuntu20.04.05 LTSx64

1
https://cn.ubuntu.com/download/desktop

PixPin_2024-10-10_19-30-18

0.2

PixPin_2024-10-21_23-53-20

0.4

1.2 安装ubuntu虚拟机

以VMware Workstation 16 Pro 16.2.4版本为例,新建虚拟机,选择自定义选项

1

2

4

0.5

0.6

0.7

0.8

0.9

10

11

1.00

PS:如果你要安装很多插件建议最低保持100G

1.01

1.02

1.03

添加Ubuntu系统镜像

1.04

1.05

1.06

1.07

1.081.09

安装完成之后,打开软件与更新,将下载自(位于中国的服务器)修改为阿里云的地址,下载快点,也可以不修改。

1.1

安装完测试一下宿主机能不能和ubuntu虚拟机进行直通,后面会需要复制粘贴命令行到终端,如果能复制粘贴命令行到ubuntu虚拟机中,则跳过安装vmware tools(以下三行)

1
2
3
sudo apt upgrade
sudo apt install open-vm-tools-desktop -y
sudo reboot

1.3 配置编译环境

按Ctrl+Alt+T快捷键在终端输入以下命令

1
2
sudo apt update
sudo apt upgrade -y

执行完毕输入

1
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc-s1 libc6-dev-i386 subversion flex uglifyjs gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx-ucl libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync

从这一步开始开启网络代理,否则有的文件无法下载

下载lede大佬的源码,注意下载路径不能有中文

1
git clone https://github.com/coolsnowwolf/lede

无法下载的话设置一下git代理

1
2
git config --global --unset http.proxy 
git config --global --unset https.proxy

进入lede目录

1
cd lede

拉取校园网防检测所需要的模块

1
2
git clone https://github.com/EOYOHOO/UA2F
git clone https://github.com/EOYOHOO/rkp-ipid.git package/rkp-ipid

然后进入lede源码的根目录中添加下面代码到feeds.conf.default 文件

1
2
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small

更新 feed 模块,终端输入

1
2
./scripts/feeds update -a
./scripts/feeds install -a

2. 本地编译.config

打开编译菜单,在终端输入

1
make menuconfig

前三项选择以下选项(VMware是x86架构,所以咱们选x86的)

以下为校园网防检测必选

1
2
3
4
5
6
7
8
9
10
11
12
13
# 勾选上 ipid
# kernel-modules->Other modules->kmod-rkp-ipid
# 选上模块
# kernel modules->Netfilter Extensions->kmod-ipt-ipopt
# kernel modules->Netfilter Extensions->kmod-ipt-u32
# 勾选上 ua2f
# network->Routing and Redirection->ua2f
# 选上模块
# network->firewall->iptables-mod-conntrack-extra
# network->firewall->iptables-mod-filter
# network->firewall->iptables-mod-ipopt
# network->firewall->iptables-mod-u32

Copy

根据自己喜好选择插件,然后保存退出

插件参考链接:Applications 添加插件应用说明-L大

3. 本地编译openwrt固件

下载 dl 库,在终端输入

1
make download -j8 

Copy

开始编译固件,在终端输入 (-j 后面是线程数,第一次编译推荐用单线程)

1
make V=s -j1

Copy

编译完成后镜像包输出路径:lede/bin/targets

然后这里会有两个镜像文件分别是:openwrt-x86-64-generic-squashfs-rootfs.img.gz和openwrt-x86-64-generic-squashfs-combined.img.gz,

选择导出:openwrt-x86-64-generic-squashfs-combined.img.gz

如果第一次编译失败,进入虚拟机进行二次编译

1
2
3
4
5
cd lede
rm -rf ./tmp && rm -rf .config
git pull
./scripts/feeds update -a && ./scripts/feeds install -a
make menuconfig

Copy

4. 在线编译openwrt固件

使用github Actions功能编译固件

此方法需要有github账号,将P3TERX项目拉到自己账号仓库

参考视频:校园网防检测!软路由固件编译教程——利用github编译openwrt固件

PS:GitHub Actions是有限制的,安装很多插件可能会导致编译失败,不过安装文章里的插件是可以编译成功的,详情请看:GitHub Actions 官方文档-使用限制、计费和管理

77.177.2

然后编辑拉取到自己仓库下diy2脚本,添加ua2f和rkp-ipid模块

77.3

1
2
git clone https://github.com/EOYOHOO/UA2F.git package/UA2F
git clone https://github.com/EOYOHOO/rkp-ipid.git package/rkp-ipid

在虚拟机进入lede目录,将feeds.conf.default文件和 .config文件导出虚拟机

77.4

以记事本打开.config文件按Ctrl+F查找Netfilter Extensions关键词,在Netfilter Extensions下第二行后添加代码,保存

77.5

1
CONFIG_NETFILTER_NETLINK_GLUE_CT=y

上传feeds.conf.default文件和 .config文件

77.777.9

查看一下是否上传完毕

78.1

开始编译

78.3

当出现这个界面时,Actions已经开始编译,编译时间4-6小时(插件越多编译时间越长)

78.4

报错的话,到Ubuntu虚拟机上重新编译一次

5. 刷入openwrt系统

5.1 镜像转换

将编译好的固件包导出来,使用 StarWind V2V Converter 将img镜像文件转换为vmdk格式

StarWind V2V Converter下载地址:https://www.starwindsoftware.com/tmplink/starwindconverter.exe

1113333444555666777

5.2 创建虚拟机并导入固件

以VMware Workstation 16 Pro 16.2.4版本为例,新建虚拟机,选择自定义选项

1

2

4

5

6

7

8

10

11

12

PixPin_2024-10-07_22-55-31

14

15

  • 此时先不要开机,在创建好的虚拟机点击编辑虚拟机设置,添加另一个网络适配器
  • 网络适配器NAT做lan(第一个不用改,Openwrt默认将第一个网口设置为lan口),网络适配器2桥接模式(自动)做wan口

161718

5.3 虚拟机网卡配置

点击虚拟网络编辑器,将桥接模式的网卡修改为计算机的物理网卡(当作openwrt的wan口)然后将NAT模式的nat地址这里划分为192.168.20.0

192021

5.4 配置上网环境

宿主机通过虚拟机中的Openwrt上网

该方案原理是OpenWrt作为主路由,VMware的虚拟机和宿主机的数据流量都是要通过OpenWrt,取消宿主机物理网卡的ipv4和ipv6,使OpenWrt虚拟机的WAN口桥接到了物理网卡上,接管了IP层的工作,此时,宿主机通过NAT模式虚拟网卡连接到OpenWrt虚拟机LAN口通过OpenWrt上网

wan口(就是你要桥接的物理网卡)

23

lan口(配置VMware Network Adapter VMnet8)

23.5

6. 配置OpenWrt

6.1 防检测配置

开机进入OpenWrt系统设置, 勾选启用NTP客户端和作为NTP服务器提供服务

在候选NTP服务器四个输入框分别填写:ntp1.aliyun.com、time1.cloud.tencent.com、stdtime.gov.hk 、pool.ntp.org

然后保存并应用

6.2 防火墙添加一下自定义规则

点击网络–防火墙–自定义规则,添加以下规则

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
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
#通过rkp-ipid设置IPID
#若没有加入rkp-ipid模块,此部分不需要加入
iptables -t mangle -N IPID_MOD
iptables -t mangle -A FORWARD -j IPID_MOD
iptables -t mangle -A OUTPUT -j IPID_MOD
iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN
#由于本校局域网是A类网,所以我将这条注释掉了,具体要不要注释结合你所在的校园网
iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10
# 防时钟偏移检测
iptables -t nat -N ntp_force_local
iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local
iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN
iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destinatio
# 通过 iptables 修改 TTL 值 数字为需要的修改的 ttl 值
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
#iptables 拒绝 AC 进行 Flash 检测
iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string " src=\"http://1.1.1." -j DROP

6.3 UA2F配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 开机自启
uci set ua2f.enabled.enabled=1
# 自动配置防火墙(默认开启) (建议开启)
uci set ua2f.firewall.handle_fw=1
uci set ua2f.firewall.handle_tls=1
uci set ua2f.firewall.handle_mmtls=1
uci set ua2f.firewall.handle_intranet=1
# 保存配置
uci commit ua2f
# 开机自启
service ua2f enable
# 启动 ua2f
service ua2f start
# 重启一下设备
reboot

‍‍然后这里有两个骚操作可以为其他设备提供网络:

方法一:电脑上下载360免费WIFI,开启WIFI,这里有几率无法创建无线网络,可以以校园网模式运行,(注意使用此方法开热点,网速就看你学校网络质量了,我这边白天用好到爆,晚上的时候卡成狗,玩游戏都玩不了)

方法二:将电脑的网络桥接给路由器(此步骤要有一个路由器和网线)打开网络控制面板—网络和Internet—网络和共享中心—更改适配器设置—然后按住Ctrl键选择VMware Network Adapter VMnet8和电脑的有线物理网卡(如图),选择桥接连接。然后进入路由器改为桥接模式,然后可以多设备上网了!!!

89

ua检测网站(有可能显示不正确,但能使用)

UserAgent查看/UA检测 - 在线工具

注: 如果你手上有X86硬路由或者可以刷机的路由器 (如:红米AC2100),可以在(2.本地编译.config)打开编译菜单时将前三项修改成你的路由器相关信息,在编译完成openwrt固件后导出虚拟机,通过U盘将镜像上传到你的设备

参考资料

【正片】面对校园网的多设备检测,「我」的解决方案是——

校园网防检测!软路由固件编译教程

VMware安装OpenWrt虚拟机让宿主机上网

VMware安装OpenWrt让宿主机上网&旁路由(两种方案)