博客测试贴

本次介绍的是一种可行的绕过校园网认证的方式, 然而这种方式仅仅是可行, 限制条件很高, 因此可能只对拥有特定条件的朋友有价值。

上面和标题的校园网实际上指需要付费且速度限制的宿舍网

实现并没有什么技术含量, 只是各种设备和工具的堆叠而已, 这个思路产生的过程大概是这样的

  1. 校园网内部 53/67 等 udp 端口可以直接与外部通信, 但是对外部而言公网 IP 和合适的带宽(至少要比校园网 10M 快吧)是个大问题, 考虑国内云服务器价格的问题, 这个思路被搁置很久。
  2. 随后一个偶然的机会, 从某学弟那里得知校园网内部各个设备是可以直接通信的, 但是同一个账号之间的不通宿舍网和同一个宿舍网之间的不同设备之间的通信是被阻断的()。因此产生了一个想法: 让宿舍网和在普通校园网(速度较快)之间通过普通的代理直接通信, 实验之后发现可行性极高, 测试最高可以达到 80Mbps, 而宿舍网只有 10Mpbs。
  3. 在有稳定校园网的位置下固定一台设备作为代理服务器,客户端通过代理软件直接连接, 但是这个过程并不透明, 校园网仍需要认证,而且还要手动连接到那边的代理才行,因此需要另外一台设备,放在宿舍作为Hotspot, 配置这台设备通过VPN和另外一台设备通信
  4. 我选择了闲置的安卓机, 大致配置就是wireguard+vpn hotspot
  5. 随后还没来得及尝试更多放假了, 无认证操作则在后面

原理

原理是大家早就知道的 53/67/udp 隧道, 因为很多校园网并不会对这些端口作限制, 否则一些重要的功能可能无法工作, 因为我打算利用这些端口(实际上用了 53/udp 端口)搭建一个校园网到外部网络(Internet)的隧道。

准备工作

实际上需要准备的东西特别多, 然而绝大多数条件我在很早前就已经完成, 所以实际做起来并不是很难,在这里我还是列出来

  • 拥有公网 IP 的公网设备
    • 安装 docker, docker-compose
  • 类软路由一台

拥有公网 IP 的公网设备这个条件可能比较难达成, 我使用的家宽动态公网 IP+DDNS, 设备则是树莓派 4B, 租借云服务产品当然也是可以的, 但是成本较高, 暂不考虑, 下面我介绍一下我的方案的具体实现方法,也是大多数家用 NAS 设备搭建的方案

类家用 NAS 设备搭建

准备工作

一般家庭宽带是可以直接申请到公网 IP 的, 但是这个根本不同地区不同运营商情况也会出现差异, 如果不确定可以试着打一下对应的客服电话,理由一般用装监控之类的就可以。

这里假设你已经拿到了公网 IP, 接下来就是正确设置自己的路由器和光猫, 就我的情况来说, 直接进入光猫后台把拨号上网改成桥接模式, 然后路由器设置PPPOE拨号就好了。

如果你的路由器就是你需要用到的设备, 那么就可以直接跳到下一部分了, 如果不是, 你需要将你的设备连接到路由器, 配置好网络, 最好设置上静态 IP。 在路由器里面设置 DMZ(demilitarized zone), 指向你配置好的静态 IP 即可, 当然在路由器上设置 mac 地址与 ip 绑定仍能实现类似静态 ip 的效果。

下一步就是安装dockerdocker-compose, 这种教程在网上多的是, 这里假设已经完成安装, 直接进入下一步

img

使用 docker 启动 wireguard 服务器

这一步很简单,创建 docker-compose.yml 文件写好配置直接启动就行了。
我的配置:

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
version: "2.1"
services:
wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- SERVERURL=mydomain.me #optional
- SERVERPORT=53 #optional
- PEERS=1 #optional
- PEERDNS=auto #optional
- INTERNAL_SUBNET=10.13.13.0 #optional
- ALLOWEDIPS=0.0.0.0/0 #optional
volumes:
- ./config:/config
- /lib/modules:/lib/modules
ports:
- 53:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped

如果你的目的和我一样,实际上上面的唯一需要改动的部分只有 SERVERURL 而已.

创建隧道