前言

终于得闲填个两年前的远古巨坑,也属于是老方法了。介绍一下本科时在宿舍使用 UDP 代理绕过校园网认证的方式。
本打算一年多前就准备发布的文章,在提及这一话题的第一篇文章中就已有想法,自发布后不断摸索重构思路,却是咕到了这个时间・・・img

该方法其实已经在多年前就广泛被利用,也催生了众多平台专门提供校园网破解服务,在这里为愿意折腾的各位提供一个自己搭建的简单教程。

提醒:本方法仅适用于部分 UDP 端口防范不严格的防火墙环境,存在部分网络使用此方式不可行

目前部分高校使用的校园网认证机制是在网关拦截和管理数据包,当用户接入校园网且未登录时,进行上网发出的请求数据包就会被网关拦截。此时如果我们访问某个 HTTP 网站,网关会对这个 HTTP 响应报文劫持并纂改,302 重定向给我们一个 Web 认证界面。

但是用于域名解析 (DNS) 的 UDP53 端口发出的数据包就不会被拦截,我们可以用 nslookup 命令进行测试,使用 kali 或 nmap 扫描端口同理。

1
nslookup baidu.com

若返回正确 IP 地址,则此方法可行。但请注意,本命令不能决定方法的可行性,即使不返回也是可以尝试的。

但在这之前需要注意你的校园网是否会自动分配 IP。笔者本人当时的情况是有线网络不会自动分配,需要手动设置 IP 和子网掩码。有意思的是,尽管明面说必须去指定地点申请自己的 IP,但实际上只要不冲突就可以自行随意选择,在使用锐捷认证一次后会自动绑定 IP、MAC 和账号,这也让很多学生白白浪费了很多时间。

此外,UDP 53、67、68 甚至 69 端口都是存在可能性的。

端口服务一览
UDP 53: DNS 协议,域名解析协议
UDP 67: DHCP 协议 - Server,向 67 端口(bootpc)广播回应请求
UDP 68: DHCP 协议 - Client,向 68 端口(bootps)广播请求配置
UDP 69: TFTP 简单文件传输协议

原理简介

利用网络防火墙对于 UDP 53/67/68 等端口的不严格限制,访问代理服务器的对应协议端口以实现绕过认证上网。
以下是初期的逻辑图,包含了一些初始的想法,存在一些问题,仅作为存档,无参考价值。创作于 2020.8.22
初期逻辑图简单来说,我们将 Kcptun 运行在代理软件的外层,就可以将代理流量转为 UDP 协议发送和接收。

相关仓库:
代理
Xrayhttps://github.com/XTLS/Xray-core
X-ui(GUI)https://github.com/vaxilu/x-ui
V2Rayhttps://github.com/v2fly/v2ray-core

Kcptun
Kcptunhttps://github.com/xtaci/kcptun
kcptun_gclient(GUI)https://github.com/dfdragon/kcptun_gclient

UDP 加速
UDPspeederhttps://github.com/wangyu-/UDPspeeder
udp2rawhttps://github.com/wangyu-/udp2raw

功能简介
Kcptun:远程端口转发。是一款服务器双边加速工具,可以将服务器的 TCP 流量,比如纸飞机的流量,转化为 KCP 协议的 UDP 流量发出。

UDPspeeder:UDP 双边加速工具,降低丢包率,配合 vpn 可以加速任何协议,尤其适用于加速游戏和网页打开速度;同时也是一个 UDP 连接的调试和统计工具。
跟 kcptun/finalspeed/BBR 等现有方案比,主要优势是可以加速 UDP 和 ICMP
【目前看来只能加速 UDP,不能直接加速 TCP】

udp2raw tunnel:通过 raw socket 给 UDP 包加上 TCP 或 ICMP header,进而绕过 UDP 屏蔽或 QoS,或在 UDP 不稳定的环境下提升稳定性。可以有效防止在使用 Kcptun 或者 Finalspeed 的情况下 UDP 端口被运营商限速。

笔者使用了 Xray、Kcptun 和 kcptun_gclient。


部署搭建

「一」搭建代理

首先,对于代理服务器,一般我们的需求是速率足够、延迟和价格可接受。而因为满足这些条件的 VPS 绝大部分都属于境外运营商,故可使用 XrayV2Ray 等主流项目作为代理的选择。笔者曾使用 Xray:Vless+TLS+wss & Kcptun 模式。

为什么不使用 OpenVPN(softether-vpnserver):正如上述原因,境外 VPS 的大流量需要尽可能的保证安全以防止 IP 被 ban,而 OpenVPN 做到这一点较为复杂不稳定。

关于代理的搭建教程,可自行搜索不再赘述。当然,如果你是一名 Homelaber,家中有服务器,那么也可以用它来做代理。
此外,如果你拥有或选择购买国内的 UDP 特定端口节点,那么就可以直接使用了。

「二」部署 Kcptun

可使用以下脚本部署安装:

1
2
wget --no-check-certificate -O kcptun.sh https://github.com/kuoruan/shell-scripts/raw/master/kcptun/kcptun.sh
sh kcptun.sh

配置时,选择加速目标为 127.0.0.1:443,即本机的 443 端口,这是基于 TLS 加密代理的常用端口,如果你的代理端口为其他则同步修改即可。

参考配置:
参考配置参考配置

「三」运行使用(多情景)

・个人使用
可在你的本地运行 代理 + kcptun_gclient,后者为 Kcptun 的 GUI 可视化,如下图所示
kcptun_gclient参考配置:参考配置

・全宿舍使用
可将其部署在路由器上,比如 OpenWrt 系统就可以支持(需要插件),路由器 wan 口根据校园网要求使用固定 IP 或 DHCP 模式。
将代理配置填入后,更改代理远程地址为 127.0.0.1,端口选择你的 Kcptun 客户端运行端口,那么此时再将代理模式改为全局,就会形成以下数据流:

从用户发出的请求通过路由器的代理客户端,传递到指定的端口,即本地 Kcptun 客户端。
本地 Kcptun 将其转换成 UDP 协议,发送到指定的远程代理服务器端口(如代理服务器的 UDP53 端口),那么从防火墙看来,就是向远程某个服务器的 DNS 端口发送和接收数据,允许通过。


这种方法历史悠久,也很好解决,比如限制 DNS 白名单或限制放行 53 端口内容等,但笔者通过各种考试等契机接触了不同校园网,亲测对于很多高校都是没问题的。

如果对于端口有一定限制,也许可以使用 dns2tcp:https://github.com/alex-sector/dns2tcp 这种妥协方法,但速度可能就无法保证了。

这种方法的缺点也有一些,比如流量需求大,也许需要选择购买无限流量的 VPS;境外服务器延迟较高,如果对低延迟游戏有要求则可能不太适合,以及一些国内平台对境外 IP 存在限制等。总之按需选择。