升级几年的校园网,升级了个防私接功能
背景
大概在一年前的时候,校园网说是准备升级了,然后我也确实看见了设备的更新和交换机的更换。我也兴奋地办理了校园网,然后发现网速依旧是出色的拉跨,我也不知道他是为了干什么,可能不是给我们学生提高网速的,而是服务于其他人(猜测),算了,也就这样吧。
既然你这么贵,而且不让多设备,而且速度也不快,我装个路由器也没有问题吧(校园网打游戏更稳定,如果宿舍能一直有网,我在外面控制宿舍的设备也会更加轻松),然后在今年八月份的时候,他发了一个通知,说是装备了防私接,第二天开始,当设备列表有新增的时候,就会被封号十分钟,之后大概会每 1-2 小时被封号十分钟。
学校居然开始圈钱了,升级了这么久的校园网,什么体验都没有改善,还升级防私接?你有这心思能不能降低一下校园网费用或者提高校园网网速??而且你这 B 网和校园卡还是绑定的,这就不说了,而且校园卡这种东西就是看自己需求的,平常也只是学长学姐推销,他们如果佣金是 100,他们还能返 90 给你,你现在倒好,光明正大地在官方推销卡,美名其曰说是防止受骗,你这校园卡的佣金是多高你是一点不提。更不用说一些泛滥的后台校园网账户和其他一些东西了,跟自己说的理由前后矛盾,圈就是圈。暑假还打着澡堂升级的名号变相提高学生消费这些都不值一提。
DANGER
以上言论是对一所美国私立学校的评价,真实情况和现实有所区别,有一定的情节设计,我只是进行一个类比的说法来让国内用户听懂而采用了本土化设计,如有雷同,还请谅解。
🤔 思考解决用网问题
1. 办大流量卡(CPE 或者手机热点)
抖动高,不稳定。
2. 继续用校园网,手机开热点
路由器给手机提供 WiFi,手机同时打开流量,然后手机开热点,然后给其他设备连接。有一定作用,也非常实用。但是还是不够理想。
3. 给路由器刷防检测固件
有很多社区都提供了编译好的固件,一般只要根据自己的路由器型号,进行刷机然后输入几个简单的命令即可。容易把机器刷坏,而且我宿舍的路由器是公共产品,可不能当私人机器刷机使用。
DANGER
刷机有风险,小白操作禁止刷机,如有失误导致损失,概不负责。
4. Mini 电脑 + 软路由(二级路由)
买个 Mini 电脑,装上软路由,然后给路由器提供网络,路由器再给其他设备提供网络。
| 项目 | 说明 |
|---|---|
| 缺点 | 花费高 |
| 优点 | 可以在 Mini 电脑装很多系统,包括 openwrt;实践很多东西,接触很多东西;毕业后还能在家里研究网络,给家里提供更好的网络体验 |
🛠️ 实施第四个方案
购买篇
购买 Mini 电脑、内存条、硬盘。
TIP
我买的 Mini 电脑的型号是 Y10,拥有 2 个 2.5G 网口(最低需要两个物理网口),N150 处理器,配置是 8+128。总共花费 800 余元,内存条配的是三星的 DDR5,硬盘配的比较差一点。
收货
收货之后,先给电脑安装内存条和硬盘。然后下载 Rufus:
然后去下载 Proxmox VE(这个当作你 Mini 电脑的主系统,选择适合自己 Mini 电脑的架构,我这里是 x86/64):
把镜像下载下来,准备一个 U 盘,备份好 U 盘里面的资料,将镜像烧录到 U 盘。
安装 Proxmox VE
然后将 U 盘插入电脑,启动 Mini 电脑,插上键盘和显示器,物理网口 1(离电源口近的那个)并插上路由器的 LAN 口(给 Mini 电脑提供 IP),反复按键盘的 F12 键(不同型号有不同的按法),会进入 U 盘的引导界面,根据选项选择,进入安装界面,按照提示安装。
第一个会让你选择安装方式,第一个选择是带有 UI 界面的,选择第一个。
到达 Administration Password and Email 的步骤的时候(不是说下一步就是这个,之前的步骤选择默认的就行了),输入设置 root 用户的密码和你的邮箱地址。
DANGER
这个密码超级重要,请务必记住。
之后会到达 Management Network Configuration 步骤:
| 配置项 | 说明 |
|---|---|
| Management Interface | 选择你连接到路由器的那个物理网口(例如 enp1s0,名字可能不同,但你可以根据 MAC 地址判断)。这就是我们规划的物理网口 1 |
| Hostname | 给你的 PVE 主机起个名字,例如 pve.home |
| IP Address | 为 PVE 设置一个静态 IP 地址,必须和你当前局域网在同一个网段。例如,你家路由器是 192.168.1.1,你可以设置为 192.168.1.10(连接路由器的话会默认填充) |
| Gateway | 填写你当前主路由器的 IP 地址(例如 192.168.1.1,连接路由器的话会默认填充) |
| DNS Server | 可以填写网关地址,或者公共 DNS 如 114.114.114.114(连接路由器的话会默认填充) |
填写完之后,点击 Next,然后等待安装完成。安装过程会自动进行,完成后系统会提示你重启并移除 U 盘。
访问 PVE
访问 https://你刚才设置的PVE的IP:8006,输入 root 和刚刚设置的密码,登录成功之后,就可以开始使用 PVE 了。
下载 openwrt 镜像
我这里选择的是 x86/64 的 openwrt 镜像,并且选择的是 combined-squashfs.img.gz,当然你也能使用 ext4,只是文件系统不同而已。
安装 openwrt
上传镜像
解压之前下载的 openwrt-....-combined-squashfs.img.gz 文件,得到 .img 镜像文件。
在 PVE 网页管理界面,点击左侧的 数据中心 -> pve -> local (pve) 存储。选择 ISO 镜像 标签页,点击上传,然后选择你解压好的 .img 文件并上传。
创造网络桥接
我们需要为 OpenWRT 的 WAN 口创建一个独立的虚拟交换机,并桥接到物理网口 2。
- 在 PVE 界面,点击 pve -> 系统 -> 网络
- 点击 创建 -> Linux Bridge
- 名称:
vmbr1 - 桥接端口:填写你的第二个物理网口名称(例如
enp2s0)。你可以通过ip a命令在 PVE 的 Shell 中查看网口名称 - 不要填写 IP 地址和网关
- 点击创建。创建完成后,点击应用配置使其生效
TIP
现在你应该有两个桥:vmbr0(用于 LAN 和 PVE 管理)和 vmbr1(用于 WAN)。
创建虚拟机
点击右上角的创建虚拟机。
1. 常规设置
| 配置项 | 值 | 说明 |
|---|---|---|
| 节点 | pve | 默认节点 |
| VM ID | 100 | 默认即可 |
| 名称 | openwrt | 虚拟机名称 |
2. 操作系统
| 配置项 | 值 | 说明 |
|---|---|---|
| 介质 | 不使用任何介质 | - |
| 类型 | Linux | 操作系统类型 |
| 版本 | 6.x - 2.6 Kernel | Linux 内核版本 |
3. 系统配置:保持默认设置
4. 硬盘配置:删除默认硬盘(直接点击硬盘条目右侧的垃圾桶图标删除它,因为我们稍后会导入镜像)
5. CPU 配置
| 配置项 | 值 | 说明 |
|---|---|---|
| 核心数 | 2 个 | 或更多,取决于你的 Y10 CPU 性能 |
6. 内存配置
| 配置项 | 值 | 说明 |
|---|---|---|
| 内存 | 512 MiB | 或 1024 MiB,作为主路由 512MB 足够 |
7. 网络配置
| 配置项 | 值 | 说明 |
|---|---|---|
| 桥接 | vmbr0 | 这是 OpenWRT 的 LAN 口 |
| 模型 | VirtIO | 半虚拟化,性能最好 |
8. 完成创建:检查信息无误后,点击完成。
导入镜像
在 PVE 界面左侧找到刚才创建的 100 (openwrt) 虚拟机,但不要启动它。
点击 pve -> >_ Shell 打开命令行终端,执行以下命令将上传的 .img 文件导入为虚拟机关联的虚拟硬盘:
qm importdisk 100 /var/lib/vz/template/iso/openwrt-24.10.2-x86-64-generic-squashfs-combined.img local-lvm
命令执行成功后,返回 PVE 网页界面:
- 点击
100 (openwrt)虚拟机 -> 硬件。你会看到一个未使用的磁盘 0 - 双击这个磁盘,在弹出的窗口中,将总线/设备设置为
SATA,然后点击添加
添加 WAN 口网卡
在硬件页面,点击添加 -> 网络设备:
- 桥接:
vmbr1(我们为 WAN 口创建的桥) - 模型:
VirtIO(半虚拟化) - 点击添加
TIP
现在虚拟机有两个网卡了:net0 (LAN) 和 net1 (WAN)。
切换到选项标签页,双击引导顺序。将刚刚添加的 SATA 硬盘(例如 sata0)拖到第一位,并勾选它前面的复选框,然后点击确定。
配置 OpenWRT
启动 OpenWRT 虚拟机。在虚拟机的 >_ 控制台 标签页中,等待系统启动完成,看到命令行提示符后按一下回车。
WARNING
OpenWRT 默认的 LAN 口 IP 是 192.168.1.1,这可能和你现有的网络冲突。我们需要修改它。
输入以下命令编辑网络配置文件:
vi /etc/config/network
按 i 键进入编辑模式,找到 config interface 'lan' 部分,修改 option ipaddr 的值为一个新的网段,例如 192.168.5.1:
config interface 'lan'
option device 'eth0'
option proto 'static'
option ipaddr '192.168.5.1' # 修改这里
option netmask '255.255.255.0'
option ip6assign '60'
修改完成后,按 ESC 键,然后输入 :wq 并回车,保存并退出。输入 reboot 重启虚拟机使配置生效。
INFO
请你时刻记住目前你设置的网段,要不然你每次连接相应服务的时候,都需要更换电脑自身的 ip,这就可太难受了。
登录 OpenWRT Web 界面 (LuCI)
将你的操作电脑的 IP 地址手动设置为与 OpenWRT 同网段的静态 IP,例如 192.168.5.100,子网掩码 255.255.255.0。
在浏览器中访问 http://192.168.5.1。(这里改成你设置的就行)
TIP
默认用户名是 root,密码为空,直接登录。登录后,第一件事是去 系统 -> 管理权 设置一个安全的登录密码。
配置网络
- WAN 口:网络 -> 接口。WAN 接口应该是不存在,这边需要你新建一个 WAN 接口,然后设置 PPPOE,输入你的校园网账号密码即可
- LAN 口:LAN 接口的配置我们已经修改过了。确保 DHCP 服务器是开启的,这样连接到你网络里的设备才能自动获取 IP
- 测试:将你的电脑 IP 改回自动获取,然后用网线连接到 Y10 的物理网口 1,看看是否能获取到
192.168.5.x的 IP 地址,并且能够正常上网
INFO
如果你的网络获取了 IP,但是无法上网,请检查你的虚拟机的硬件是否有两个虚拟网卡,并且成功桥接到我们设置好的 LAN 桥和 WAN 桥。这边也建议把 PVE 的 ip 设置为相同的网段,这样你就不需要自己手动设置 ip 来访问 PVE 了。
INFO
这个 PPPOE 是需要校园网支持的,如果不支持的话,建议在 openwrt 上进行网页认证,这里不讲述了。
开始设置二级路由
关闭路由器的 PPPOE
关闭 PPPOE 连接,建议设置 DHCP 连接,你要设置静态 IP 也可以,保持相同网段即可,你设置 AP 连接也行(只是我的路由器不支持这个)。
将路由器 WAN 口连接到 Mini 电脑的物理网口 1
连接就行,如果能够使用网络的话,应该是可以了。(虽然没过多久会被封号)
🛡️ 防检测设置
我学校主要是 ttl 检测和 UA 检测。
修改 ttl
直接这样在 /etc/nftables.d/ 下新建文件 12-mangle-ttl-65.nft:
chain mangle_postrouting_ttl64 {
type filter hook postrouting priority 300; policy accept;
counter ip ttl set 65
}
chain mangle_prerouting_ttl64 {
type filter hook prerouting priority 300; policy accept;
counter ip ttl set 65
}
这样再创建之后,再重启防火墙就行了。
INFO
存活时间(英语:Time To Live,简写 TTL) 是电脑网络技术的一个术语,指一个数据包在经过一个路由器时,可传递的最长距离(跃点数)。每当数据包经过一个路由器时,其存活次数就会被减一。当其存活次数为 0 时,路由器便会取消该数据包转发,IP 网络的话,会向原数据包的发出者发送一个 ICMP TTL 数据包以告知跃点数超限。
TTL 是最简单的多设备检测方式,因为 TTL 每过一个路由值都会 -1,所以只需要抓包然后读出我们的包头里面的 TTL 值是否是一般情况下系统默认的 128 或者 64 就可以判断我们是否共享了网络。但在 OpenWRT 中我们可以简单的通过添加 iptables 或者 nftables 防火墙规则来实现路由器下所有设备 TTL 值的统一。
自定义 UA
直接下载大佬开源的 UA2F 的 ipk 包,然后在 openwrt 的 UI 上传安装就行,好像是 系统/软件 这个路由:
# 启用 UA2F
uci set ua2f.enabled.enabled=1
# 可选的防火墙配置选项
# 是否自动添加防火墙规则
uci set ua2f.firewall.handle_fw=1
# 是否尝试处理 443 端口的流量,通常来说,流经 443 端口的流量是加密的,因此无需处理
uci set ua2f.firewall.handle_tls=1
# 是否处理微信的流量,微信的流量通常是加密的,因此无需处理。这一规则在启用 nftables 时无效
uci set ua2f.firewall.handle_mmtls=1
# 是否处理内网流量,如果你的路由器是在内网中,且你想要处理内网中的流量,那么请启用这一选项
uci set ua2f.firewall.handle_intranet=1
# 使用自定义 User-Agent
uci set ua2f.main.custom_ua="Test UA/1.0"
# 禁用 Conntrack 标记,这会降低性能,但是有助于和其他修改 Connmark 的软件共存
uci set ua2f.main.disable_connmark=1
# 应用配置
uci commit ua2f
# 开机自启
service ua2f enable
# 启动 UA2F
service ua2f start
# 读取日志
logread | grep UA2F
INFO
User-Agent 请求标头是一个特征字符串,使得服务器和对等网络能够识别发出请求的用户代理的应用程序、操作系统、供应商或版本信息。学校可以通过多次抓包检测我们的数据包然后查找 UA 是否有同时出现两种不同的设备来判定我们是否有共享网络,所以我们需要消除可以识别设备类型的字段,或者统一所有设备的 UA 都是同一个设备的。
TIP
在安装包的时候可能会提示缺少依赖,缺失的包的依赖提示得很明确,直接安装缺少的依赖包就好了。
DANGER
UA2F 和 clash core 不可以同时启用,不然 UA2F 无法起到作用。如果想实现类似功能,请尝试安装 UA3F:https://github.com/SunBK201/UA3F
设置统一的 NTP 服务器
前面两种已经可以防御检测了,但是多对一种行为进行伪装也是不错的。
在 openwrt 的系统中勾选 Provide NTP server。
在 OpenWRT 的 Web 界面,按照以下步骤操作:
- 进入菜单 网络 (Network) -> 防火墙 (Firewall)
- 切换到 端口转发 (Port Forwards) 标签页
- 在页面下方,点击添加 (Add) 按钮,来创建一条新的转发规则
新建端口转发配置信息
| 配置项 | 值 | 说明 |
|---|---|---|
| 名称 (Name) | Redirect_NTP | 或「NTP 劫持」 |
| 协议 (Protocol) | UDP | NTP 使用 UDP 协议 |
| 源区域 (Source zone) | lan | 规则应用于来自局域网的流量 |
| 外部端口 (External port) | 123 | NTP 的标准服务端口 |
| 目标区域 (Destination zone) | wan | 或选择「Device (input)」 |
| 内部 IP 地址 (Internal IP address) | 本路由器 (this device) | 在下拉菜单中选择 |
| 内部端口 (Internal port) | 123 | - |
| IP 协议版本 | IPv4 和 IPv6 | - |
填写完毕后,点击添加 (Add),然后再点击页面右下角的保存并应用 (Save & Apply)。
INFO
NTP(Network Time Protocol) 是一种用于同步网络中计算机或其他设备时钟的协议。它确保在分布式系统中,各个计算机或设备之间的时间能够保持一致,这对于许多需要精确时间同步的应用至关重要。
因为每一台系统他们访问 ntp 服务器是不一样的。你局域网内的每一台设备(Windows 电脑、手机、智能手表等)都会定期向互联网上的 NTP 服务器请求时间同步,以校准自己的时钟。这些 NTP 请求(通常使用 UDP 123 端口)虽然流量很小,但却是非常明显的「设备存活」信号。
DPI 设备可以轻易地识别出这些 NTP 流量。如果它发现从你一个 IP 地址,有发往不同 NTP 服务器(比如 time.windows.com, time.asia.apple.com, time.google.com)的请求,或者请求的频率和模式不像单个设备,就可能判定为共享网络。
✅ 总结
这样之后,应该就能成功防检测了。可以愉快地使用校园网了。
参考文献:
