升级几年的校园网,升级了个防私接功能
背景
大概在一年前的时候,校园网说是准备升级了,然后我也确实看见了设备的更新和交换机的更换。我也兴奋地办理了校园网,然后发现网速依旧是出色的拉跨,我也不知道他是为了干什么,可能不是给我们学生提高网速的,而是服务于其他人(猜测),算了,也就这样吧。既然你这么贵,而且不让多设备,而且速度也不快,我装个路由器也没有问题吧(校园网打游戏更稳定,如果宿舍能一直有网,我在外面控制宿舍的设备也会更加轻松),然后在今年八月份的时候,他发了一个通知,说是装备了防私接,第二天开始,当设备列表有新增的时候,就会被封号十分钟,之后大概会每1-2小时被封号十分钟。
学校居然开始圈钱了,升级了这么久的校园网,什么体验都没有改善,还升级防私接?你有这这心里能不能降低一下校园网费用或者提高校园网网速??而且你这B网和校园卡还是绑定的,这就不说了,而且校园卡这种东西就是看自己需求的,平常也只是学长学姐推销,他们如果佣金是100,他们还能返90给你,你现在倒好,光明正大地在官方推销卡,美名其曰说是防止受骗,你这校园卡的佣金是多高你是一点不提。更不用说一些泛滥的后台校园网账户和其他一些东西了,跟自己说的理由前后矛盾,圈就是圈。暑假还打着澡堂升级的名号变相提高学生消费这些都不值一提。
DANGER
以上言论是对一所美国私立学校的评价,真实情况和现实有所区别,有一定的情节设计,我只是进行一个类比的说法来让国内用户听懂而采用了本土化设计,如有雷同,还请谅解。
思考解决用网问题
1. 办大流量卡(CPE或者手机热点)
抖动高,不稳定
2. 继续用校园网,手机开热点
路由器给手机提供WiFi,手机同时打开流量,然后手机开热点,然后给其他设备连接。有一定作用,也非常实用。但是还是不够理想。
3. 给路由器刷防检测固件
有很多社区都提供了编译好的固件,一般只要根据自己的路由器型号,进行刷机然后输入几个简单的命令即可。容易把机器刷坏,而且我宿舍的路由器是公共产品,可不能当私人机器刷机使用。
DANGER
刷机有风险,小白操作禁止刷机,如有失误导致损失,概不负责
4. 买个Mini电脑,装上软路由,然后给路由器提供网络,路由器再给其他设备提供网络(二级路由)
缺点是花费高,优点是你可以在Mini电脑装很多系统,包括openwrt。在这个期间你会实践很多东西和接触很多东西,如果毕业了,你还能在家里研究网络,给家里提供更加好的网络体验。
匹配第四个方案
购买篇
购买Mini电脑,购买内存条,购买硬盘。
我买的Mini电脑的型号是Y10,拥有2个2.5G网口(最低需要两个物理网口),N150处理器,配置是8+128。总共花费800余元,内存条配的是三星的DDR5,硬盘配的比较差一点。
收货
收货之后,先给电脑安装内存条和硬盘。然后下载Rufus
https://rufus.ie/zh/ 然后去下载Proxmox VE(这个当作你Mini电脑的主系统,选择适合自己Mini电脑的架构,我这里是x86/64。) https://www.proxmox.com/en/downloads 把镜像下载下来,准备一个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地址和网关。 点击 创建。创建完成后,点击 应用配置 使其生效。 现在你应该有两个桥: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 (半虚拟化)。 点击 添加。 现在虚拟机有两个网卡了:net0 (LAN) 和 net1 (WAN)。 切换到 选项 标签页,双击 引导顺序。 将刚刚添加的SATA硬盘(例如 sata0)拖到第一位,并勾选它前面的复选框,然后点击 确定。
配置OpenWRT
启动OpenWRT虚拟机。 在虚拟机的 >_ 控制台 标签页中,等待系统启动完成,看到命令行提示符后按一下回车。 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。(这里改成你设置的就行) 默认用户名是 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)的请求,或者请求的频率和模式不像单个设备,就可能判定为共享网络。
这样之后,应该就能成功防检测了。可以愉快地使用校园网了。
参考文献
